From 9a3e8d0d2df69668660986593a1507cfb17948f2 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Wed, 28 Oct 2020 19:35:51 +0100 Subject: [PATCH] using QskMargins instead of QMargins in Q_PROPRTY definitions to get Qt6 working --- qmlexport/QskQml.cpp | 47 +++---------------------------------- src/common/QskMargins.cpp | 11 +++++++++ src/controls/QskBox.cpp | 1 + src/controls/QskBox.h | 2 +- src/controls/QskControl.cpp | 1 + src/controls/QskControl.h | 2 +- 6 files changed, 18 insertions(+), 46 deletions(-) diff --git a/qmlexport/QskQml.cpp b/qmlexport/QskQml.cpp index 47454ecb..9c72509d 100644 --- a/qmlexport/QskQml.cpp +++ b/qmlexport/QskQml.cpp @@ -45,9 +45,7 @@ #include #include - #include -#include #include QSK_QT_PRIVATE_BEGIN @@ -106,8 +104,6 @@ struct QskRgbValue_Gadget Q_GADGET }; -Q_DECLARE_METATYPE( QMarginsF ) - // Use this pattern to provide valueOf() to any type, something which is needed // in JS to convert a variant to a JS value. This would be a template, but moc // doesn't support template classes. @@ -267,6 +263,7 @@ void QskQml::registerTypes() QSK_REGISTER_GADGET( QskLayoutHint, "LayoutHint" ); QSK_REGISTER_GADGET( QskSizePolicy, "SizePolicy" ); QSK_REGISTER_GADGET( QskTextOptions, "TextOptions" ); + QSK_REGISTER_GADGET( QskMargins, "Margins" ); // Support (lists of) GradientStop QMetaType::registerConverter< QJSValue, QskGradientStop >( @@ -310,46 +307,8 @@ void QskQml::registerTypes() } ); - // Support QMarginsF in QML - class MarginsProvider final : public QQmlValueTypeProvider - { - public: - const QMetaObject* getMetaObjectForMetaType( int id ) override - { - if ( id == qMetaTypeId< QMarginsF >() ) - return &QskMargins::staticMetaObject; - - return nullptr; - } - }; - QQml_addValueTypeProvider( new MarginsProvider() ); - - QQmlMetaType::registerCustomStringConverter( - qMetaTypeId< QMarginsF >(), - []( const QString& rhs ) - { - auto margin = rhs.toDouble(); - return QVariant::fromValue( QMarginsF( margin, margin, margin, margin ) ); - } - ); - - QMetaType::registerConverter< int, QMarginsF >( - []( int value ) { return QMarginsF( value, value, value, value ); } ); - - QMetaType::registerConverter< qreal, QMarginsF >( - []( qreal value ) { return QMarginsF( value, value, value, value ); } ); - - qRegisterAnimationInterpolator< QMarginsF >( - []( const QMarginsF& from, const QMarginsF& to, qreal progress ) - { - return QVariant::fromValue( QMarginsF( - _q_interpolate( from.left(), to.left(), progress ), - _q_interpolate( from.top(), to.top(), progress ), - _q_interpolate( from.right(), to.right(), progress ), - _q_interpolate( from.bottom(), to.bottom(), progress ) - ) ); - } - ); + QQmlMetaType::registerCustomStringConverter( qMetaTypeId< QskMargins >(), + []( const QString& s ) { return QVariant::fromValue( QskMargins( s.toDouble() ) ); } ); // Support QskSizePolicy in QML user properties QMetaType::registerConverter< QJSValue, QskSizePolicy >( diff --git a/src/common/QskMargins.cpp b/src/common/QskMargins.cpp index 031f1299..f1e65c3f 100644 --- a/src/common/QskMargins.cpp +++ b/src/common/QskMargins.cpp @@ -1,6 +1,17 @@ #include "QskMargins.h" #include +static void qskRegisterConverter() +{ + QMetaType::registerConverter< int, QskMargins >( + []( int value ) { return QskMargins( value ); } ); + + QMetaType::registerConverter< qreal, QskMargins >( + []( qreal value ) { return QskMargins( value ); } ); +} + +Q_CONSTRUCTOR_FUNCTION( qskRegisterConverter ) + static inline qreal qskInterpolated( qreal from, qreal to, qreal ratio ) { return from + ( to - from ) * ratio; diff --git a/src/controls/QskBox.cpp b/src/controls/QskBox.cpp index 31e7a9fd..157f11aa 100644 --- a/src/controls/QskBox.cpp +++ b/src/controls/QskBox.cpp @@ -4,6 +4,7 @@ *****************************************************************************/ #include "QskBox.h" +#include "QskMargins.h" QSK_SUBCONTROL( QskBox, Panel ) diff --git a/src/controls/QskBox.h b/src/controls/QskBox.h index 46995ac8..b429c92d 100644 --- a/src/controls/QskBox.h +++ b/src/controls/QskBox.h @@ -17,7 +17,7 @@ class QSK_EXPORT QskBox : public QskControl Q_PROPERTY( bool panel READ hasPanel WRITE setPanel NOTIFY panelChanged FINAL ) - Q_PROPERTY( QMarginsF padding READ padding + Q_PROPERTY( QskMargins padding READ padding WRITE setPadding RESET resetPadding NOTIFY paddingChanged ) public: diff --git a/src/controls/QskControl.cpp b/src/controls/QskControl.cpp index 3a70fd6a..909730f9 100644 --- a/src/controls/QskControl.cpp +++ b/src/controls/QskControl.cpp @@ -14,6 +14,7 @@ #include "QskSkin.h" #include "QskSkinlet.h" #include "QskSkinHintTable.h" +#include "QskMargins.h" #include #include diff --git a/src/controls/QskControl.h b/src/controls/QskControl.h index 92f9c518..7cbf6947 100644 --- a/src/controls/QskControl.h +++ b/src/controls/QskControl.h @@ -37,7 +37,7 @@ class QSK_EXPORT QskControl : public QskQuickItem, public QskSkinnable Q_PROPERTY( bool wheelEnabled READ isWheelEnabled WRITE setWheelEnabled NOTIFY wheelEnabledChanged FINAL ) - Q_PROPERTY( QMarginsF margins READ margins + Q_PROPERTY( QskMargins margins READ margins WRITE setMargins RESET resetMargins NOTIFY marginsChanged ) Q_PROPERTY( QskGradient background READ background