/**************************************************************************** ** ** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Quick Templates 2 module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:COMM$ ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** $QT_END_LICENSE$ ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ****************************************************************************/ #include "qquickpaletteprovider_p.h" #include "qquickpalette_p.h" #include QT_BEGIN_NAMESPACE static QQmlValueTypeProvider *instance() { static QQuickPaletteProvider provider; return &provider; } void QQuickPaletteProvider::init() { QQml_addValueTypeProvider(instance()); } void QQuickPaletteProvider::cleanup() { QQml_removeValueTypeProvider(instance()); } #if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS) #define ASSERT_VALID_SIZE(size, min) Q_UNUSED(size) #else #define ASSERT_VALID_SIZE(size, min) Q_ASSERT(size >= min) #endif const QMetaObject *QQuickPaletteProvider::getMetaObjectForMetaType(int type) { switch (type) { case QMetaType::QPalette: return &QQuickPalette::staticMetaObject; default: break; } return nullptr; } bool QQuickPaletteProvider::init(int type, QVariant& dst) { switch (type) { case QMetaType::QPalette: dst.setValue(QPalette()); return true; default: break; } return false; } template bool typedEqual(const void *lhs, const QVariant& rhs) { return (*(reinterpret_cast(lhs)) == rhs.value()); } bool QQuickPaletteProvider::equal(int type, const void *lhs, const QVariant &rhs) { switch (type) { case QMetaType::QPalette: return typedEqual(lhs, rhs); default: break; } return false; } template bool typedStore(const void *src, void *dst, size_t dstSize) { ASSERT_VALID_SIZE(dstSize, sizeof(T)); const T *srcT = reinterpret_cast(src); T *dstT = reinterpret_cast(dst); new (dstT) T(*srcT); return true; } bool QQuickPaletteProvider::store(int type, const void *src, void *dst, size_t dstSize) { switch (type) { case QMetaType::QPalette: return typedStore(src, dst, dstSize); default: break; } return false; } template bool typedRead(const QVariant& src, int dstType, void *dst) { T *dstT = reinterpret_cast(dst); if (src.type() == static_cast(dstType)) { *dstT = src.value(); } else { *dstT = T(); } return true; } bool QQuickPaletteProvider::read(const QVariant &src, void *dst, int dstType) { switch (dstType) { case QMetaType::QPalette: return typedRead(src, dstType, dst); default: break; } return false; } template bool typedWrite(const void *src, QVariant& dst) { const T *srcT = reinterpret_cast(src); if (dst.value() != *srcT) { dst = *srcT; return true; } return false; } bool QQuickPaletteProvider::write(int type, const void *src, QVariant& dst) { switch (type) { case QMetaType::QPalette: return typedWrite(src, dst); default: break; } return false; } #undef ASSERT_VALID_SIZE QT_END_NAMESPACE