making QskGradient types acessible for QML ( mot 100% happy with using

lists )
This commit is contained in:
Uwe Rathmann 2022-11-13 10:09:18 +01:00
parent f988805f95
commit 0fb4b25bba
3 changed files with 81 additions and 1 deletions

View File

@ -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" },

View File

@ -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"

View File

@ -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<QQuickGradientStop> 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;