4#ifndef QQMLVALUETYPE_P_H
5#define QQMLVALUETYPE_P_H
18#include <QtQml/private/qqmlproperty_p.h>
20#include <private/qqmlnullablevalue_p.h>
21#include <private/qmetatype_p.h>
23#include <QtCore/qobject.h>
24#include <QtCore/qrect.h>
25#if QT_CONFIG(easingcurve)
26#include <QtCore/qeasingcurve.h>
28#include <QtCore/qvariant.h>
35 QQmlValueType() =
default;
36 QQmlValueType(QMetaType type,
const QMetaObject *staticMetaObject)
37 : m_metaType(type), m_staticMetaObject(staticMetaObject)
41 void *create()
const {
return m_metaType.create(); }
42 void destroy(
void *gadgetPtr)
const { m_metaType.destroy(gadgetPtr); }
44 void construct(
void *gadgetPtr,
const void *copy)
const { m_metaType.construct(gadgetPtr, copy); }
45 void destruct(
void *gadgetPtr)
const { m_metaType.destruct(gadgetPtr); }
47 QMetaType metaType()
const {
return m_metaType; }
48 const QMetaObject *staticMetaObject()
const {
return m_staticMetaObject; }
51#if QT_VERSION >= QT_VERSION_CHECK(7
, 0
, 0
)
52 const QMetaObject *toDynamicMetaObject(QObject *)
const override;
54 QMetaObject *toDynamicMetaObject(QObject *) override;
56 void objectDestroyed(QObject *) override;
57 int metaCall(QObject *obj, QMetaObject::Call type,
int _id,
void **argv) override;
62 const QMetaObject *m_staticMetaObject =
nullptr;
63 QT7_ONLY(
mutable const)
64 QMetaObject *m_dynamicMetaObject =
nullptr;
71 static QQmlGadgetPtrWrapper *instance(QQmlEngine *engine, QMetaType type);
73 QQmlGadgetPtrWrapper(QQmlValueType *valueType, QObject *parent =
nullptr);
74 ~QQmlGadgetPtrWrapper();
76 void read(QObject *obj,
int idx);
77 void write(QObject *obj,
int idx, QQmlPropertyData::WriteFlags flags,
int internalIndex)
const;
78 QVariant value()
const;
79 void setValue(
const QVariant &value);
81 QMetaType metaType()
const {
return valueType()->metaType(); }
82 int metaCall(QMetaObject::Call type,
int id,
void **argv);
84 QMetaProperty property(
int index)
const
86 return valueType()->staticMetaObject()->property(index);
89 QVariant readOnGadget(
const QMetaProperty &property)
const
91 return property.readOnGadget(m_gadgetPtr);
94 void writeOnGadget(
const QMetaProperty &property,
const QVariant &value)
96 property.writeOnGadget(m_gadgetPtr, value);
99 void writeOnGadget(
const QMetaProperty &property, QVariant &&value)
101 property.writeOnGadget(m_gadgetPtr, std::move(value));
105 const QQmlValueType *valueType()
const;
106 void *m_gadgetPtr =
nullptr;
111 Q_PROPERTY(qreal x READ x WRITE setX FINAL)
112 Q_PROPERTY(qreal y READ y WRITE setY FINAL)
114 QML_VALUE_TYPE(point)
116 QML_EXTENDED(QQmlPointFValueType)
120 Q_INVOKABLE QQmlPointFValueType() =
default;
121 Q_INVOKABLE QQmlPointFValueType(
const QPointF &point) : QPointF(point) {}
122 Q_INVOKABLE QQmlPointFValueType(
const QPoint &point) : QPointF(point) {}
123 Q_INVOKABLE QString toString()
const;
132 Q_PROPERTY(
int x READ x WRITE setX FINAL)
133 Q_PROPERTY(
int y READ y WRITE setY FINAL)
137 QML_EXTENDED(QQmlPointValueType)
141 QQmlPointValueType() =
default;
142 Q_INVOKABLE QQmlPointValueType(
const QPoint &point) : QPoint(point) {}
143 Q_INVOKABLE QQmlPointValueType(
const QPointF &point) : QPoint(point.toPoint()) {}
144 Q_INVOKABLE QString toString()
const;
153 Q_PROPERTY(qreal width READ width WRITE setWidth FINAL)
154 Q_PROPERTY(qreal height READ height WRITE setHeight FINAL)
158 QML_EXTENDED(QQmlSizeFValueType)
162 Q_INVOKABLE QQmlSizeFValueType() =
default;
163 Q_INVOKABLE QQmlSizeFValueType(
const QSizeF &size) : QSizeF(size) {}
164 Q_INVOKABLE QQmlSizeFValueType(
const QSize &size) : QSizeF(size) {}
165 Q_INVOKABLE QString toString()
const;
167 qreal height()
const;
168 void setWidth(qreal);
169 void setHeight(qreal);
174 Q_PROPERTY(
int width READ width WRITE setWidth FINAL)
175 Q_PROPERTY(
int height READ height WRITE setHeight FINAL)
179 QML_EXTENDED(QQmlSizeValueType)
183 QQmlSizeValueType() =
default;
184 Q_INVOKABLE QQmlSizeValueType(
const QSize &size) : QSize(size) {}
185 Q_INVOKABLE QQmlSizeValueType(
const QSizeF &size) : QSize(size.toSize()) {}
186 Q_INVOKABLE QString toString()
const;
195 Q_PROPERTY(qreal x READ x WRITE setX FINAL)
196 Q_PROPERTY(qreal y READ y WRITE setY FINAL)
197 Q_PROPERTY(qreal width READ width WRITE setWidth FINAL)
198 Q_PROPERTY(qreal height READ height WRITE setHeight FINAL)
199 Q_PROPERTY(qreal left READ left DESIGNABLE
false FINAL)
200 Q_PROPERTY(qreal right READ right DESIGNABLE
false FINAL)
201 Q_PROPERTY(qreal top READ top DESIGNABLE
false FINAL)
202 Q_PROPERTY(qreal bottom READ bottom DESIGNABLE
false FINAL)
206 QML_EXTENDED(QQmlRectFValueType)
210 Q_INVOKABLE QQmlRectFValueType() =
default;
211 Q_INVOKABLE QQmlRectFValueType(
const QRectF &rect) : QRectF(rect) {}
212 Q_INVOKABLE QQmlRectFValueType(
const QRect &rect) : QRectF(rect) {}
213 Q_INVOKABLE QString toString()
const;
220 qreal height()
const;
221 void setWidth(qreal);
222 void setHeight(qreal);
227 qreal bottom()
const;
232 Q_PROPERTY(
int x READ x WRITE setX FINAL)
233 Q_PROPERTY(
int y READ y WRITE setY FINAL)
234 Q_PROPERTY(
int width READ width WRITE setWidth FINAL)
235 Q_PROPERTY(
int height READ height WRITE setHeight FINAL)
236 Q_PROPERTY(
int left READ left DESIGNABLE
false FINAL)
237 Q_PROPERTY(
int right READ right DESIGNABLE
false FINAL)
238 Q_PROPERTY(
int top READ top DESIGNABLE
false FINAL)
239 Q_PROPERTY(
int bottom READ bottom DESIGNABLE
false FINAL)
243 QML_EXTENDED(QQmlRectValueType)
247 QQmlRectValueType() =
default;
248 Q_INVOKABLE QQmlRectValueType(
const QRect &rect) : QRect(rect) {}
249 Q_INVOKABLE QQmlRectValueType(
const QRectF &rect) : QRect(rect.toRect()) {}
250 Q_INVOKABLE QString toString()
const;
269 Q_PROPERTY(qreal left READ left WRITE setLeft FINAL)
270 Q_PROPERTY(qreal right READ right WRITE setRight FINAL)
271 Q_PROPERTY(qreal top READ top WRITE setTop FINAL)
272 Q_PROPERTY(qreal bottom READ bottom WRITE setBottom FINAL)
275 QML_FOREIGN(QMarginsF)
276 QML_EXTENDED(QQmlMarginsFValueType)
280 QQmlMarginsFValueType() =
default;
281 Q_INVOKABLE QQmlMarginsFValueType(
const QMarginsF &margins) : QMarginsF(margins) {}
282 Q_INVOKABLE QQmlMarginsFValueType(
const QMargins &margins) : QMarginsF(margins) {}
283 Q_INVOKABLE QString toString()
const;
287 qreal bottom()
const;
289 void setRight(qreal);
291 void setBottom(qreal);
296 Q_PROPERTY(
int left READ left WRITE setLeft FINAL)
297 Q_PROPERTY(
int right READ right WRITE setRight FINAL)
298 Q_PROPERTY(
int top READ top WRITE setTop FINAL)
299 Q_PROPERTY(
int bottom READ bottom WRITE setBottom FINAL)
302 QML_FOREIGN(QMargins)
303 QML_EXTENDED(QQmlMarginsValueType)
307 QQmlMarginsValueType() =
default;
308 Q_INVOKABLE QQmlMarginsValueType(
const QMargins &margins) : QMargins(margins) {}
309 Q_INVOKABLE QQmlMarginsValueType(
const QMarginsF &margins) : QMargins(margins.toMargins()) {}
310 Q_INVOKABLE QString toString()
const;
321#if QT_CONFIG(easingcurve)
323class Q_QML_EXPORT QQmlEasing :
public QObject
326 QML_NAMED_ELEMENT(Easing)
331 Linear = QEasingCurve::Linear,
332 InQuad = QEasingCurve::InQuad, OutQuad = QEasingCurve::OutQuad,
333 InOutQuad = QEasingCurve::InOutQuad, OutInQuad = QEasingCurve::OutInQuad,
334 InCubic = QEasingCurve::InCubic, OutCubic = QEasingCurve::OutCubic,
335 InOutCubic = QEasingCurve::InOutCubic, OutInCubic = QEasingCurve::OutInCubic,
336 InQuart = QEasingCurve::InQuart, OutQuart = QEasingCurve::OutQuart,
337 InOutQuart = QEasingCurve::InOutQuart, OutInQuart = QEasingCurve::OutInQuart,
338 InQuint = QEasingCurve::InQuint, OutQuint = QEasingCurve::OutQuint,
339 InOutQuint = QEasingCurve::InOutQuint, OutInQuint = QEasingCurve::OutInQuint,
340 InSine = QEasingCurve::InSine, OutSine = QEasingCurve::OutSine,
341 InOutSine = QEasingCurve::InOutSine, OutInSine = QEasingCurve::OutInSine,
342 InExpo = QEasingCurve::InExpo, OutExpo = QEasingCurve::OutExpo,
343 InOutExpo = QEasingCurve::InOutExpo, OutInExpo = QEasingCurve::OutInExpo,
344 InCirc = QEasingCurve::InCirc, OutCirc = QEasingCurve::OutCirc,
345 InOutCirc = QEasingCurve::InOutCirc, OutInCirc = QEasingCurve::OutInCirc,
346 InElastic = QEasingCurve::InElastic, OutElastic = QEasingCurve::OutElastic,
347 InOutElastic = QEasingCurve::InOutElastic, OutInElastic = QEasingCurve::OutInElastic,
348 InBack = QEasingCurve::InBack, OutBack = QEasingCurve::OutBack,
349 InOutBack = QEasingCurve::InOutBack, OutInBack = QEasingCurve::OutInBack,
350 InBounce = QEasingCurve::InBounce, OutBounce = QEasingCurve::OutBounce,
351 InOutBounce = QEasingCurve::InOutBounce, OutInBounce = QEasingCurve::OutInBounce,
352 InCurve = QEasingCurve::InCurve, OutCurve = QEasingCurve::OutCurve,
353 SineCurve = QEasingCurve::SineCurve, CosineCurve = QEasingCurve::CosineCurve,
354 BezierSpline = QEasingCurve::BezierSpline,
356 Bezier = BezierSpline
360 Q_INVOKABLE qreal valueForProgress(QQmlEasing::Type type, qreal progress)
const;
363struct Q_QML_EXPORT QQmlEasingValueType :
private QEasingCurve
366 QML_VALUE_TYPE(easingCurve)
367 QML_FOREIGN(QEasingCurve)
368 QML_EXTENDED(QQmlEasingValueType)
371 Q_PROPERTY(QQmlEasing::Type type READ type WRITE setType FINAL)
372 Q_PROPERTY(qreal amplitude READ amplitude WRITE setAmplitude FINAL)
373 Q_PROPERTY(qreal overshoot READ overshoot WRITE setOvershoot FINAL)
374 Q_PROPERTY(qreal period READ period WRITE setPeriod FINAL)
375 Q_PROPERTY(QList<qreal> bezierCurve READ bezierCurve WRITE setBezierCurve FINAL)
378 Q_INVOKABLE QQmlEasingValueType() =
default;
379 Q_INVOKABLE QQmlEasingValueType(QQmlEasing::Type type);
380 Q_INVOKABLE QQmlEasingValueType(
const QEasingCurve &easing) : QEasingCurve(easing) {}
382 Q_INVOKABLE qreal valueForProgress(qreal progress);
384 QQmlEasing::Type type()
const;
385 qreal amplitude()
const;
386 qreal overshoot()
const;
387 qreal period()
const;
388 void setType(QQmlEasing::Type);
389 void setAmplitude(qreal);
390 void setOvershoot(qreal);
391 void setPeriod(qreal);
392 void setBezierCurve(
const QList<qreal> &);
393 QList<qreal> bezierCurve()
const;