aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@nokia.com>2012-05-03 16:15:35 +1000
committerQt by Nokia <qt-info@nokia.com>2012-05-10 01:46:17 +0200
commit319007117a8fafe9a72230bbc13fb18833ff4a16 (patch)
tree5f63bc409a45179ffea55a55207e141c6b2d6380 /src
parenta0ee51bef5425947ede6b35b3c7606dfff36c3c6 (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.cpp1
-rw-r--r--src/qml/qml/qqmlscript.cpp1
-rw-r--r--src/qml/qml/qqmlscript_p.h2
-rw-r--r--src/qml/qml/qqmlvmemetaobject.cpp33
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);