diff options
author | Michael Brasser <michael.brasser@nokia.com> | 2012-05-03 16:15:35 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-10 01:46:17 +0200 |
commit | 319007117a8fafe9a72230bbc13fb18833ff4a16 (patch) | |
tree | 5f63bc409a45179ffea55a55207e141c6b2d6380 /src | |
parent | a0ee51bef5425947ede6b35b3c7606dfff36c3c6 (diff) |
Add rect property type
Change-Id: I9a533be414dca7fcf802e767164eeb745a9f6cd0
Reviewed-by: Matthew Vogt <matthew.vogt@nokia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/qml/qqmlcompiler.cpp | 1 | ||||
-rw-r--r-- | src/qml/qml/qqmlscript.cpp | 1 | ||||
-rw-r--r-- | src/qml/qml/qqmlscript_p.h | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlvmemetaobject.cpp | 33 |
4 files changed, 35 insertions, 2 deletions
diff --git a/src/qml/qml/qqmlcompiler.cpp b/src/qml/qml/qqmlcompiler.cpp index 7d06ff359c..e409544c96 100644 --- a/src/qml/qml/qqmlcompiler.cpp +++ b/src/qml/qml/qqmlcompiler.cpp @@ -2839,6 +2839,7 @@ bool QQmlCompiler::buildDynamicMeta(QQmlScript::Object *obj, DynamicMetaMode mod { Object::DynamicProperty::Time, QMetaType::QTime }, { Object::DynamicProperty::Date, QMetaType::QDate }, { Object::DynamicProperty::DateTime, QMetaType::QDateTime }, + { Object::DynamicProperty::Rect, QMetaType::QRectF }, }; static const int builtinTypeCount = sizeof(builtinTypes) / sizeof(TypeData); diff --git a/src/qml/qml/qqmlscript.cpp b/src/qml/qml/qqmlscript.cpp index 704130d69b..555eb44e0b 100644 --- a/src/qml/qml/qqmlscript.cpp +++ b/src/qml/qml/qqmlscript.cpp @@ -924,6 +924,7 @@ bool ProcessAST::visit(AST::UiPublicMember *node) // { "time", strlen("time"), Object::DynamicProperty::Time }, // { "date", strlen("date"), Object::DynamicProperty::Date }, { "date", strlen("date"), Object::DynamicProperty::DateTime }, + { "rect", strlen("rect"), Object::DynamicProperty::Rect }, { "variant", strlen("variant"), Object::DynamicProperty::Variant }, { "var", strlen("var"), Object::DynamicProperty::Var } }; diff --git a/src/qml/qml/qqmlscript_p.h b/src/qml/qml/qqmlscript_p.h index 0a762d457f..65dd406476 100644 --- a/src/qml/qml/qqmlscript_p.h +++ b/src/qml/qml/qqmlscript_p.h @@ -387,7 +387,7 @@ public: DynamicProperty(); enum Type { Var, Variant, Int, Bool, Real, String, Url, Color, - Time, Date, DateTime, Alias, Custom, CustomList }; + Time, Date, DateTime, Rect, Alias, Custom, CustomList }; quint32 isDefaultProperty:1; quint32 isReadOnly:1; diff --git a/src/qml/qml/qqmlvmemetaobject.cpp b/src/qml/qml/qqmlvmemetaobject.cpp index dd2fe4baeb..d7e9a28efe 100644 --- a/src/qml/qml/qqmlvmemetaobject.cpp +++ b/src/qml/qml/qqmlvmemetaobject.cpp @@ -100,6 +100,7 @@ public: inline const QTime &asQTime(); inline const QDate &asQDate(); inline const QDateTime &asQDateTime(); + inline const QRectF &asQRectF(); inline const QJSValue &asQJSValue(); inline void setValue(QObject *v, QQmlVMEMetaObject *target, int index); @@ -112,6 +113,7 @@ public: inline void setValue(const QTime &); inline void setValue(const QDate &); inline void setValue(const QDateTime &); + inline void setValue(const QRectF &); inline void setValue(const QJSValue &); inline void setDataType(int t); @@ -120,7 +122,7 @@ public: private: int type; - void *data[6]; // Large enough to hold all types + void *data[8]; // Large enough to hold all types inline void cleanup(); }; @@ -171,6 +173,9 @@ void QQmlVMEVariant::cleanup() } else if (type == QMetaType::QDateTime) { ((QDateTime *)dataPtr())->~QDateTime(); type = QVariant::Invalid; + } else if (type == QMetaType::QRectF) { + ((QRectF *)dataPtr())->~QRectF(); + type = QVariant::Invalid; } else if (type == qMetaTypeId<QVariant>()) { ((QVariant *)dataPtr())->~QVariant(); type = QVariant::Invalid; @@ -284,6 +289,14 @@ const QDateTime &QQmlVMEVariant::asQDateTime() return *(QDateTime *)(dataPtr()); } +const QRectF &QQmlVMEVariant::asQRectF() +{ + if (type != QMetaType::QRectF) + setValue(QRectF()); + + return *(QRectF *)(dataPtr()); +} + const QJSValue &QQmlVMEVariant::asQJSValue() { if (type != qMetaTypeId<QJSValue>()) @@ -395,6 +408,17 @@ void QQmlVMEVariant::setValue(const QDateTime &v) } } +void QQmlVMEVariant::setValue(const QRectF &v) +{ + if (type != QMetaType::QRectF) { + cleanup(); + type = QMetaType::QRectF; + new (dataPtr()) QRectF(v); + } else { + *(QRectF *)(dataPtr()) = v; + } +} + void QQmlVMEVariant::setValue(const QJSValue &v) { if (type != qMetaTypeId<QJSValue>()) { @@ -598,6 +622,9 @@ int QQmlVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a) case QVariant::DateTime: *reinterpret_cast<QDateTime *>(a[0]) = data[id].asQDateTime(); break; + case QVariant::RectF: + *reinterpret_cast<QRectF *>(a[0]) = data[id].asQRectF(); + break; case QMetaType::QObjectStar: *reinterpret_cast<QObject **>(a[0]) = data[id].asQObject(); break; @@ -648,6 +675,10 @@ int QQmlVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a) needActivate = *reinterpret_cast<QDateTime *>(a[0]) != data[id].asQDateTime(); data[id].setValue(*reinterpret_cast<QDateTime *>(a[0])); break; + case QVariant::RectF: + needActivate = *reinterpret_cast<QRectF *>(a[0]) != data[id].asQRectF(); + data[id].setValue(*reinterpret_cast<QRectF *>(a[0])); + break; case QMetaType::QObjectStar: needActivate = *reinterpret_cast<QObject **>(a[0]) != data[id].asQObject(); data[id].setValue(*reinterpret_cast<QObject **>(a[0]), this, id); |