diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-11-20 12:45:31 +0100 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-11-26 17:58:09 +0100 |
commit | 08abb22443078dcd69cec98ea451a0e2e190982f (patch) | |
tree | c70b150ba7faf29f9b18dcb5e97b3ad0e0678633 /src/qml/qml/qqmlpropertycachecreator.cpp | |
parent | e6b45a2f5dad8105a8f493e2167988a95c1f08ed (diff) |
QML engine: Use QMetaType instead of metatype-id in propertydata
We don't want to convert back and forth between QMetaTypes and ids. This
change is the first step towards using QMetaType directly everywhere.
By reordering the members of QQmlPropertyData to avoid a gap caused by
alignment, we can replace the typeid int with a QMetaType without
requiring more space.
There are still a few places left using metatype ids, notably the value
type logic.
Task-number: QTBUG-82931
Change-Id: Ic38f38d10c71ed20655877976c9cb5ee3cbe2d77
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlpropertycachecreator.cpp')
-rw-r--r-- | src/qml/qml/qqmlpropertycachecreator.cpp | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/src/qml/qml/qqmlpropertycachecreator.cpp b/src/qml/qml/qqmlpropertycachecreator.cpp index 144d7e59b4..dcefa33166 100644 --- a/src/qml/qml/qqmlpropertycachecreator.cpp +++ b/src/qml/qml/qqmlpropertycachecreator.cpp @@ -46,31 +46,32 @@ QT_BEGIN_NAMESPACE QAtomicInt QQmlPropertyCacheCreatorBase::classIndexCounter(0); -int QQmlPropertyCacheCreatorBase::metaTypeForPropertyType(QV4::CompiledData::BuiltinType type) +QMetaType QQmlPropertyCacheCreatorBase::metaTypeForPropertyType(QV4::CompiledData::BuiltinType type) { + // TODO: we cannot depend on GUI types in declarative, so we'll have to do the id lookup switch (type) { - case QV4::CompiledData::BuiltinType::Var: return QMetaType::QVariant; - case QV4::CompiledData::BuiltinType::Int: return QMetaType::Int; - case QV4::CompiledData::BuiltinType::Bool: return QMetaType::Bool; - case QV4::CompiledData::BuiltinType::Real: return QMetaType::Double; - case QV4::CompiledData::BuiltinType::String: return QMetaType::QString; - case QV4::CompiledData::BuiltinType::Url: return QMetaType::QUrl; - case QV4::CompiledData::BuiltinType::Color: return QMetaType::QColor; - case QV4::CompiledData::BuiltinType::Font: return QMetaType::QFont; - case QV4::CompiledData::BuiltinType::Time: return QMetaType::QTime; - case QV4::CompiledData::BuiltinType::Date: return QMetaType::QDate; - case QV4::CompiledData::BuiltinType::DateTime: return QMetaType::QDateTime; - case QV4::CompiledData::BuiltinType::Rect: return QMetaType::QRectF; - case QV4::CompiledData::BuiltinType::Point: return QMetaType::QPointF; - case QV4::CompiledData::BuiltinType::Size: return QMetaType::QSizeF; - case QV4::CompiledData::BuiltinType::Vector2D: return QMetaType::QVector2D; - case QV4::CompiledData::BuiltinType::Vector3D: return QMetaType::QVector3D; - case QV4::CompiledData::BuiltinType::Vector4D: return QMetaType::QVector4D; - case QV4::CompiledData::BuiltinType::Matrix4x4: return QMetaType::QMatrix4x4; - case QV4::CompiledData::BuiltinType::Quaternion: return QMetaType::QQuaternion; + case QV4::CompiledData::BuiltinType::Var: return QMetaType::fromType<QVariant>(); + case QV4::CompiledData::BuiltinType::Int: return QMetaType::fromType<int>(); + case QV4::CompiledData::BuiltinType::Bool: return QMetaType::fromType<bool>(); + case QV4::CompiledData::BuiltinType::Real: return QMetaType::fromType<qreal>(); + case QV4::CompiledData::BuiltinType::String: return QMetaType::fromType<QString>(); + case QV4::CompiledData::BuiltinType::Url: return QMetaType::fromType<QUrl>(); + case QV4::CompiledData::BuiltinType::Color: return QMetaType(QMetaType::QColor); + case QV4::CompiledData::BuiltinType::Font: return QMetaType(QMetaType::QFont); + case QV4::CompiledData::BuiltinType::Time: return QMetaType::fromType<QTime>(); + case QV4::CompiledData::BuiltinType::Date: return QMetaType::fromType<QDate>(); + case QV4::CompiledData::BuiltinType::DateTime: return QMetaType::fromType<QDateTime>(); + case QV4::CompiledData::BuiltinType::Rect: return QMetaType::fromType<QRectF>(); + case QV4::CompiledData::BuiltinType::Point: return QMetaType::fromType<QPointF>(); + case QV4::CompiledData::BuiltinType::Size: return QMetaType::fromType<QSizeF>(); + case QV4::CompiledData::BuiltinType::Vector2D: return QMetaType(QMetaType::QVector2D); + case QV4::CompiledData::BuiltinType::Vector3D: return QMetaType(QMetaType::QVector3D); + case QV4::CompiledData::BuiltinType::Vector4D: return QMetaType(QMetaType::QVector4D); + case QV4::CompiledData::BuiltinType::Matrix4x4: return QMetaType(QMetaType::QMatrix4x4); + case QV4::CompiledData::BuiltinType::Quaternion: return QMetaType(QMetaType::QQuaternion); case QV4::CompiledData::BuiltinType::InvalidBuiltin: break; }; - return QMetaType::UnknownType; + return QMetaType {}; } QByteArray QQmlPropertyCacheCreatorBase::createClassNameTypeByUrl(const QUrl &url) @@ -120,9 +121,9 @@ QQmlRefPointer<QQmlPropertyCache> QQmlBindingInstantiationContext::instantiating if (instantiatingProperty->isQObject()) { // rawPropertyCacheForType assumes a given unspecified version means "any version". // There is another overload that takes no version, which we shall not use here. - return enginePrivate->rawPropertyCacheForType(instantiatingProperty->propType(), + return enginePrivate->rawPropertyCacheForType(instantiatingProperty->propType().id(), instantiatingProperty->typeVersion()); - } else if (const QMetaObject *vtmo = QQmlValueTypeFactory::metaObjectForMetaType(instantiatingProperty->propType())) { + } else if (const QMetaObject *vtmo = QQmlValueTypeFactory::metaObjectForMetaType(instantiatingProperty->propType().id())) { return enginePrivate->cache(vtmo, instantiatingProperty->typeVersion()); } } |