From 0fb4b25bbaef94534b49475dbc24bcef16580084 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Sun, 13 Nov 2022 10:09:18 +0100 Subject: [PATCH] making QskGradient types acessible for QML ( mot 100% happy with using lists ) --- examples/layouts/layouts.qml | 2 ++ src/common/QskGradient.cpp | 62 ++++++++++++++++++++++++++++++++++++ src/common/QskGradient.h | 18 ++++++++++- 3 files changed, 81 insertions(+), 1 deletion(-) diff --git a/examples/layouts/layouts.qml b/examples/layouts/layouts.qml index a06c66ef..51950179 100644 --- a/examples/layouts/layouts.qml +++ b/examples/layouts/layouts.qml @@ -11,6 +11,8 @@ GridBox background { + linear: [ 0.0, 0.0, 1.0, 0.0 ] + stops: [ { position: 0.0, color: "Red" }, { position: 1.0, color: "Yellow" }, diff --git a/src/common/QskGradient.cpp b/src/common/QskGradient.cpp index d38a619c..9f47e9a0 100644 --- a/src/common/QskGradient.cpp +++ b/src/common/QskGradient.cpp @@ -386,6 +386,68 @@ QskHashValue QskGradient::hash( QskHashValue seed ) const return hash; } +void QskGradient::setLinear( const QVector< qreal >& params ) +{ + Q_ASSERT( params.size() == 4 ); + + m_type = Linear; + + m_values[0] = params[0]; + m_values[1] = params[1]; + m_values[2] = params[2]; + m_values[3] = params[3]; +} + +QVector< qreal > QskGradient::linear() const +{ + Q_ASSERT( m_type == Linear ); + return { m_values[0], m_values[1], m_values[2], m_values[3] }; +} + +void QskGradient::setRadial( const QVector< qreal >& params ) +{ + Q_ASSERT( params.size() == 3 ); + + m_type = Radial; + + m_values[0] = params[0]; + m_values[1] = params[1]; + m_values[2] = params[2]; + m_values[3] = 0.0; +} + +QVector< qreal > QskGradient::radial() const +{ + Q_ASSERT( m_type == Radial ); + return { m_values[0], m_values[1], m_values[2] }; +} + +void QskGradient::setConic( const QVector< qreal >& params ) +{ + Q_ASSERT( params.size() >= 2 && params.size() <= 4 ); + + m_type = Linear; + + m_values[0] = params[0]; + m_values[1] = params[1]; + + if ( params.size() > 2 ) + m_values[2] = params[2]; + else + m_values[2] = 0.0; + + if ( params.size() == 4 ) + m_values[3] = params[3]; + else + m_values[2] = 360.0; +} + +QVector< qreal > QskGradient::conic() const +{ + Q_ASSERT( m_type == Conic ); + return { m_values[0], m_values[1], m_values[2], m_values[3] }; +} + #include "QskLinearGradient.h" #include "QskRadialGradient.h" #include "QskConicGradient.h" diff --git a/src/common/QskGradient.h b/src/common/QskGradient.h index 3d8f0522..110aeb93 100644 --- a/src/common/QskGradient.h +++ b/src/common/QskGradient.h @@ -26,8 +26,13 @@ class QSK_EXPORT QskGradient { Q_GADGET + Q_PROPERTY( Type type READ type ) + + Q_PROPERTY( QVector< qreal > linear READ linear WRITE setLinear ) + Q_PROPERTY( QVector< qreal > conic READ linear WRITE setConic ) + Q_PROPERTY( QVector< qreal > radial READ radial WRITE setRadial ) + Q_PROPERTY( QVector< QskGradientStop > stops READ stops WRITE setStops ) - // Q_PROPERTY( QQmlListProperty stops READ stops ) Q_PROPERTY( bool valid READ isValid ) Q_PROPERTY( bool visible READ isVisible ) @@ -126,6 +131,17 @@ class QSK_EXPORT QskGradient void updateStatusBits() const; + private: + // for QML + QVector< qreal > linear() const; + void setLinear( const QVector< qreal >& ); + + QVector< qreal > radial() const; + void setRadial( const QVector< qreal >& ); + + QVector< qreal > conic() const; + void setConic( const QVector< qreal >& ); + private: QVector< QskGradientStop > m_stops;