diff options
author | Frank Meerkoetter <frank.meerkoetter@basyskom.com> | 2015-07-30 22:48:23 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@theqtcompany.com> | 2015-08-19 12:25:43 +0000 |
commit | 1cec413180de40b7f0dc497a13c3151d8310754a (patch) | |
tree | 85ca52bb96c0cec0579d06e3b3bf061f0b204cdc /src/quick3d | |
parent | fe349cd5dda4fb8178240dbdb50f915b7d21033e (diff) |
Adapt to the changed interface of the ValueTypeProvider
Change-Id: Iad6f9fccfbb69ea476294f3e5cd87aa0919b2c09
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Diffstat (limited to 'src/quick3d')
-rw-r--r-- | src/quick3d/quick3d/qt3dquick_global.cpp | 125 |
1 files changed, 36 insertions, 89 deletions
diff --git a/src/quick3d/quick3d/qt3dquick_global.cpp b/src/quick3d/quick3d/qt3dquick_global.cpp index dc1125333..d7fd1a898 100644 --- a/src/quick3d/quick3d/qt3dquick_global.cpp +++ b/src/quick3d/quick3d/qt3dquick_global.cpp @@ -304,39 +304,27 @@ public: return Q_NULLPTR; } - template<typename T> - bool typedInit(void *data, size_t dataSize) - { - ASSERT_VALID_SIZE(dataSize, sizeof(T)); - T *t = reinterpret_cast<T *>(data); - new (t) T(); - return true; - } - - bool init(int type, void *data, size_t dataSize) Q_DECL_OVERRIDE + bool init(int type, QVariant& dst) Q_DECL_OVERRIDE { switch (type) { case QMetaType::QColor: - return typedInit<QColor>(data, dataSize); + dst.setValue<QColor>(QColor()); + return true; case QMetaType::QVector2D: - return typedInit<QVector2D>(data, dataSize); + dst.setValue<QVector2D>(QVector2D()); + return true; case QMetaType::QVector3D: - return typedInit<QVector3D>(data, dataSize); + dst.setValue<QVector3D>(QVector3D()); + return true; case QMetaType::QVector4D: - return typedInit<QVector4D>(data, dataSize); + dst.setValue<QVector4D>(QVector4D()); + return true; case QMetaType::QQuaternion: - return typedInit<QQuaternion>(data, dataSize); + dst.setValue<QQuaternion>(QQuaternion()); + return true; case QMetaType::QMatrix4x4: - { - if (dataSize >= sizeof(QMatrix4x4)) - return typedInit<QMatrix4x4>(data, dataSize); - - // special case: init matrix-containing qvariant. - Q_ASSERT(dataSize >= sizeof(QVariant)); - QVariant *matvar = reinterpret_cast<QVariant *>(data); - new (matvar) QVariant(QMatrix4x4()); + dst.setValue<QMatrix4x4>(QMatrix4x4()); return true; - } default: break; } @@ -622,12 +610,12 @@ public: } template<typename T> - bool typedEqual(const void *lhs, const void *rhs) + bool typedEqual(const void *lhs, const QVariant& rhs) { - return (*(reinterpret_cast<const T *>(lhs)) == *(reinterpret_cast<const T *>(rhs))); + return (*(reinterpret_cast<const T *>(lhs)) == rhs.value<T>()); } - bool equal(int type, const void *lhs, const void *rhs, size_t rhsSize) Q_DECL_OVERRIDE + bool equal(int type, const void *lhs, const QVariant &rhs) Q_DECL_OVERRIDE { switch (type) { case QMetaType::QColor: @@ -641,14 +629,7 @@ public: case QMetaType::QQuaternion: return typedEqual<QQuaternion>(lhs, rhs); case QMetaType::QMatrix4x4: - { - if (rhsSize >= sizeof(QMatrix4x4)) - return typedEqual<QMatrix4x4>(lhs, rhs); - - Q_ASSERT(rhsSize >= sizeof(QVariant)); - QMatrix4x4 rhsmat = reinterpret_cast<const QVariant *>(rhs)->value<QMatrix4x4>(); - return typedEqual<QMatrix4x4>(lhs, &rhsmat); - } + return typedEqual<QMatrix4x4>(lhs, rhs); default: break; } @@ -705,48 +686,32 @@ public: } template<typename T> - bool typedRead(int srcType, const void *src, size_t srcSize, int dstType, void *dst) + bool typedRead(const QVariant& src, int dstType, void *dst) { T *dstT = reinterpret_cast<T *>(dst); - if (srcType == dstType) { - ASSERT_VALID_SIZE(srcSize, sizeof(T)); - const T *srcT = reinterpret_cast<const T *>(src); - *dstT = *srcT; + if (src.type() == dstType) { + *dstT = src.value<T>(); } else { *dstT = T(); } return true; } - bool read(int srcType, const void *src, size_t srcSize, int dstType, void *dst) Q_DECL_OVERRIDE + bool read(const QVariant &src, void *dst, int dstType) Q_DECL_OVERRIDE { switch (dstType) { case QMetaType::QColor: - return typedRead<QColor>(srcType, src, srcSize, dstType, dst); + return typedRead<QColor>(src, dstType, dst); case QMetaType::QVector2D: - return typedRead<QVector2D>(srcType, src, srcSize, dstType, dst); + return typedRead<QVector2D>(src, dstType, dst); case QMetaType::QVector3D: - return typedRead<QVector3D>(srcType, src, srcSize, dstType, dst); + return typedRead<QVector3D>(src, dstType, dst); case QMetaType::QVector4D: - return typedRead<QVector4D>(srcType, src, srcSize, dstType, dst); + return typedRead<QVector4D>(src, dstType, dst); case QMetaType::QQuaternion: - return typedRead<QQuaternion>(srcType, src, srcSize, dstType, dst); + return typedRead<QQuaternion>(src, dstType, dst); case QMetaType::QMatrix4x4: - { - if (srcSize >= sizeof(QMatrix4x4)) - return typedRead<QMatrix4x4>(srcType, src, srcSize, dstType, dst); - - // the source data may be stored in a QVariant. - QMatrix4x4 *dstMat = reinterpret_cast<QMatrix4x4 *>(dst); - if (srcType == dstType) { - Q_ASSERT(srcSize >= sizeof(QVariant)); - const QVariant *srcMatVar = reinterpret_cast<const QVariant *>(src); - *dstMat = srcMatVar->value<QMatrix4x4>(); - } else { - *dstMat = QMatrix4x4(); - } - return true; - } + return typedRead<QMatrix4x4>(src, dstType, dst); default: break; } @@ -754,49 +719,31 @@ public: } template<typename T> - bool typedWrite(const void *src, void *dst, size_t dstSize) + bool typedWrite(const void *src, QVariant& dst) { - ASSERT_VALID_SIZE(dstSize, sizeof(T)); const T *srcT = reinterpret_cast<const T *>(src); - T *dstT = reinterpret_cast<T *>(dst); - if (*dstT != *srcT) { - *dstT = *srcT; + if (dst.value<T>() != *srcT) { + dst = *srcT; return true; } return false; } - bool write(int type, const void *src, void *dst, size_t dstSize) Q_DECL_OVERRIDE + bool write(int type, const void *src, QVariant& dst) Q_DECL_OVERRIDE { switch (type) { case QMetaType::QColor: - return typedWrite<QColor>(src, dst, dstSize); + return typedWrite<QColor>(src, dst); case QMetaType::QVector2D: - return typedWrite<QVector2D>(src, dst, dstSize); + return typedWrite<QVector2D>(src, dst); case QMetaType::QVector3D: - return typedWrite<QVector3D>(src, dst, dstSize); + return typedWrite<QVector3D>(src, dst); case QMetaType::QVector4D: - return typedWrite<QVector4D>(src, dst, dstSize); + return typedWrite<QVector4D>(src, dst); case QMetaType::QQuaternion: - return typedWrite<QQuaternion>(src, dst, dstSize); + return typedWrite<QQuaternion>(src, dst); case QMetaType::QMatrix4x4: - { - if (dstSize >= sizeof(QMatrix4x4)) - return typedWrite<QMatrix4x4>(src, dst, dstSize); - - // special case: storing matrix into variant - // eg, QVMEMO QVMEVariant data cell is big enough to store - // QVariant, but not large enough to store QMatrix4x4. - Q_ASSERT(dstSize >= sizeof(QVariant)); - const QMatrix4x4 *srcMat = reinterpret_cast<const QMatrix4x4 *>(src); - QVariant *dstMatVar = reinterpret_cast<QVariant *>(dst); - QMatrix4x4 dstMatVal = dstMatVar->value<QMatrix4x4>(); - if (dstMatVal != *srcMat) { - *dstMatVar = QVariant(*srcMat); - return true; - } - return false; - } + return typedWrite<QMatrix4x4>(src, dst); default: break; } |