QGradient::Spread -> QskGradient::Spread

This commit is contained in:
Uwe Rathmann 2022-12-01 12:03:36 +01:00
parent abf325dbde
commit 0925b40b7a
7 changed files with 56 additions and 44 deletions

View File

@ -65,7 +65,7 @@ namespace
QskGradient gradient( QGradient::PhoenixStart ); QskGradient gradient( QGradient::PhoenixStart );
gradient.setLinearDirection( 0.0, 0.0, 0.2, 0.5 ); gradient.setLinearDirection( 0.0, 0.0, 0.2, 0.5 );
gradient.setSpread( QGradient::ReflectSpread ); gradient.setSpread( QskGradient::ReflectSpread );
shapeItem->setGradient( gradient ); shapeItem->setGradient( gradient );
} }
@ -79,7 +79,7 @@ namespace
QskGradient gradient( stops ); QskGradient gradient( stops );
gradient.setLinearDirection( 0.0, 0.0, 0.05, 0.1 ); gradient.setLinearDirection( 0.0, 0.0, 0.05, 0.1 );
gradient.setSpread( QGradient::RepeatSpread ); gradient.setSpread( QskGradient::RepeatSpread );
shapeItem->setGradient( gradient ); shapeItem->setGradient( gradient );
} }
@ -112,7 +112,7 @@ namespace
QskGradient gradient( QskRgb::LightYellow, QskRgb::MidnightBlue ); QskGradient gradient( QskRgb::LightYellow, QskRgb::MidnightBlue );
gradient.setRadialDirection( QskRadialDirection() ); gradient.setRadialDirection( QskRadialDirection() );
gradient.setSpread( QGradient::PadSpread ); gradient.setSpread( QskGradient::PadSpread );
shapeItem->setGradient( gradient ); shapeItem->setGradient( gradient );
} }
@ -137,7 +137,7 @@ namespace
QskGradient gradient( stops ); QskGradient gradient( stops );
gradient.setDirection( QskGradient::Radial ); gradient.setDirection( QskGradient::Radial );
gradient.setSpread( QGradient::PadSpread ); gradient.setSpread( QskGradient::PadSpread );
shapeItem->setGradient( gradient ); shapeItem->setGradient( gradient );
} }
@ -149,7 +149,7 @@ namespace
QskGradient gradient( QGradient::LilyMeadow ); QskGradient gradient( QGradient::LilyMeadow );
gradient.setRadialDirection( 0.5, 0.7, 0.25 ); gradient.setRadialDirection( 0.5, 0.7, 0.25 );
gradient.setSpread( QGradient::RepeatSpread ); gradient.setSpread( QskGradient::RepeatSpread );
shapeItem->setGradient( gradient ); shapeItem->setGradient( gradient );
} }
@ -161,7 +161,7 @@ namespace
QskGradient gradient( Qt::red, Qt::blue ); QskGradient gradient( Qt::red, Qt::blue );
gradient.setRadialDirection( 0.6, 0.4, 0.1 ); gradient.setRadialDirection( 0.6, 0.4, 0.1 );
gradient.setSpread( QGradient::ReflectSpread ); gradient.setSpread( QskGradient::ReflectSpread );
shapeItem->setGradient( gradient ); shapeItem->setGradient( gradient );
} }
@ -181,7 +181,7 @@ namespace
QskGradient gradient( QGradient::JuicyPeach ); QskGradient gradient( QGradient::JuicyPeach );
gradient.setConicDirection( 0.5, 0.5, 30.0, 60.0 ); gradient.setConicDirection( 0.5, 0.5, 30.0, 60.0 );
gradient.setSpread( QGradient::ReflectSpread ); gradient.setSpread( QskGradient::ReflectSpread );
shapeItem->setGradient( gradient ); shapeItem->setGradient( gradient );
} }
@ -192,7 +192,7 @@ namespace
QskGradient gradient( QGradient::WinterNeva ); QskGradient gradient( QGradient::WinterNeva );
gradient.setConicDirection( 0.5, 0.5, 30.0, 60.0 ); gradient.setConicDirection( 0.5, 0.5, 30.0, 60.0 );
gradient.setSpread( QGradient::RepeatSpread ); gradient.setSpread( QskGradient::RepeatSpread );
shapeItem->setGradient( gradient ); shapeItem->setGradient( gradient );
} }
@ -213,7 +213,7 @@ namespace
QskGradient gradient( QGradient::FabledSunset ); QskGradient gradient( QGradient::FabledSunset );
gradient.setConicDirection( 0.5, 0.5, 45.0, 180.0 ); gradient.setConicDirection( 0.5, 0.5, 45.0, 180.0 );
gradient.setSpread( QGradient::ReflectSpread ); gradient.setSpread( QskGradient::ReflectSpread );
shapeItem->setGradient( gradient ); shapeItem->setGradient( gradient );
} }

View File

@ -151,6 +151,15 @@ namespace
} }
} }
} }
else if ( v.isNumber() )
{
if ( it.name() == QStringLiteral( "spread" ) )
{
const auto s = v.toNumber();
if ( s >= QskGradient::PadSpread && s <= QskGradient::RepeatSpread )
gradient.setSpread( static_cast< QskGradient::Spread >( s ) );
}
}
} }
return gradient; return gradient;

View File

@ -288,7 +288,7 @@ void QskGradient::setAlpha( int alpha )
m_isDirty = true; m_isDirty = true;
} }
void QskGradient::setSpread( QGradient::Spread spread ) void QskGradient::setSpread( Spread spread )
{ {
m_spread = spread; m_spread = spread;
} }
@ -612,15 +612,15 @@ QDebug operator<<( QDebug debug, const QskGradient& gradient )
switch( gradient.spread() ) switch( gradient.spread() )
{ {
case QGradient::RepeatSpread: case QskGradient::RepeatSpread:
debug << " RP"; debug << " RP";
break; break;
case QGradient::ReflectSpread: case QskGradient::ReflectSpread:
debug << " RF"; debug << " RF";
break; break;
case QGradient::PadSpread: case QskGradient::PadSpread:
break; break;
} }

View File

@ -17,11 +17,6 @@ class QskConicDirection;
class QVariant; class QVariant;
/*
Don't use QskGradientStops for definitions seen by moc
Otherwise exporting these interfaces to QML does not work.
*/
class QSK_EXPORT QskGradient class QSK_EXPORT QskGradient
{ {
Q_GADGET Q_GADGET
@ -32,7 +27,9 @@ class QSK_EXPORT QskGradient
Q_PROPERTY( QskConicDirection conic READ conicDirection WRITE setConicDirection ) Q_PROPERTY( QskConicDirection conic READ conicDirection WRITE setConicDirection )
Q_PROPERTY( QskRadialDirection radial READ radialDirection WRITE setRadialDirection ) Q_PROPERTY( QskRadialDirection radial READ radialDirection WRITE setRadialDirection )
Q_PROPERTY( QVector< QskGradientStop > stops READ stops WRITE setStops ) Q_PROPERTY( QskGradientStops stops READ stops WRITE setStops )
Q_PROPERTY( Spread spread READ spread WRITE setSpread )
Q_PROPERTY( bool valid READ isValid ) Q_PROPERTY( bool valid READ isValid )
Q_PROPERTY( bool visible READ isVisible ) Q_PROPERTY( bool visible READ isVisible )
@ -51,6 +48,14 @@ class QSK_EXPORT QskGradient
}; };
Q_ENUM( Type ) Q_ENUM( Type )
enum Spread
{
PadSpread,
ReflectSpread,
RepeatSpread
};
Q_ENUM( Spread )
QskGradient() noexcept = default; QskGradient() noexcept = default;
QskGradient( Qt::GlobalColor ); QskGradient( Qt::GlobalColor );
@ -58,7 +63,7 @@ class QSK_EXPORT QskGradient
QskGradient( const QColor& ); QskGradient( const QColor& );
QskGradient( const QColor&, const QColor& ); QskGradient( const QColor&, const QColor& );
QskGradient( QGradient::Preset ); QskGradient( QGradient::Preset );
QskGradient( const QVector< QskGradientStop >& ); QskGradient( const QskGradientStops& );
QskGradient( const QskGradient& ) noexcept; QskGradient( const QskGradient& ) noexcept;
@ -92,8 +97,8 @@ class QSK_EXPORT QskGradient
bool isMonochrome() const noexcept; bool isMonochrome() const noexcept;
bool isVisible() const noexcept; bool isVisible() const noexcept;
void setStops( const QVector< QskGradientStop >& ); void setStops( const QskGradientStops& );
const QVector< QskGradientStop >& stops() const noexcept; const QskGradientStops& stops() const noexcept;
void setStops( const QRgb ); void setStops( const QRgb );
void setStops( Qt::GlobalColor ); void setStops( Qt::GlobalColor );
@ -114,8 +119,8 @@ class QSK_EXPORT QskGradient
void setAlpha( int alpha ); void setAlpha( int alpha );
void setSpread( QGradient::Spread ); void setSpread( Spread );
QGradient::Spread spread() const noexcept; Spread spread() const noexcept;
void reverse(); void reverse();
QskGradient reversed() const; QskGradient reversed() const;
@ -139,7 +144,7 @@ class QSK_EXPORT QskGradient
void updateStatusBits() const; void updateStatusBits() const;
private: private:
QVector< QskGradientStop > m_stops; QskGradientStops m_stops;
/* /*
Linear: x1, y1, x2, y2 Linear: x1, y1, x2, y2
@ -149,7 +154,7 @@ class QSK_EXPORT QskGradient
qreal m_values[4] = {}; qreal m_values[4] = {};
Type m_type = Stops; Type m_type = Stops;
QGradient::Spread m_spread = QGradient::PadSpread; Spread m_spread = PadSpread;
mutable bool m_isDirty = false; mutable bool m_isDirty = false;
mutable bool m_isValid = false; mutable bool m_isValid = false;
@ -223,7 +228,7 @@ inline QRgb QskGradient::rgbEnd() const
return m_stops.isEmpty() ? qRgba( 0, 0, 0, 255 ) : m_stops.last().rgb(); return m_stops.isEmpty() ? qRgba( 0, 0, 0, 255 ) : m_stops.last().rgb();
} }
inline QGradient::Spread QskGradient::spread() const noexcept inline QskGradient::Spread QskGradient::spread() const noexcept
{ {
return m_spread; return m_spread;
} }

View File

@ -18,7 +18,7 @@ namespace
class Texture : public QSGPlainTexture class Texture : public QSGPlainTexture
{ {
public: public:
Texture( const QskGradientStops& stops, QGradient::Spread spread ) Texture( const QskGradientStops& stops, QskGradient::Spread spread )
{ {
/* /*
Qt creates tables of 1024 colors, while Chrome, Firefox, and Android Qt creates tables of 1024 colors, while Chrome, Firefox, and Android
@ -37,14 +37,14 @@ namespace
}; };
private: private:
static inline QSGTexture::WrapMode wrapMode( QGradient::Spread spread ) static inline QSGTexture::WrapMode wrapMode( QskGradient::Spread spread )
{ {
switch ( spread ) switch ( spread )
{ {
case QGradient::RepeatSpread: case QskGradient::RepeatSpread:
return QSGTexture::Repeat; return QSGTexture::Repeat;
case QGradient::ReflectSpread: case QskGradient::ReflectSpread:
return QSGTexture::MirroredRepeat; return QSGTexture::MirroredRepeat;
default: default:
@ -63,7 +63,7 @@ namespace
const void* rhi; const void* rhi;
const QskGradientStops stops; const QskGradientStops stops;
const QGradient::Spread spread; const QskGradient::Spread spread;
}; };
inline size_t qHash( const HashKey& key, size_t seed = 0 ) inline size_t qHash( const HashKey& key, size_t seed = 0 )
@ -84,7 +84,7 @@ namespace
void cleanupRhi( const QRhi* ); void cleanupRhi( const QRhi* );
Texture* texture( const void* rhi, Texture* texture( const void* rhi,
const QskGradientStops&, QGradient::Spread ); const QskGradientStops&, QskGradient::Spread );
private: private:
QHash< HashKey, Texture* > m_hashTable; QHash< HashKey, Texture* > m_hashTable;
@ -107,7 +107,7 @@ static void qskCleanupRhi( const QRhi* rhi )
} }
Texture* Cache::texture( const void* rhi, Texture* Cache::texture( const void* rhi,
const QskGradientStops& stops, QGradient::Spread spread ) const QskGradientStops& stops, QskGradient::Spread spread )
{ {
const HashKey key { rhi, stops, spread }; const HashKey key { rhi, stops, spread };
@ -151,7 +151,7 @@ void Cache::cleanupRhi( const QRhi* rhi )
} }
QSGTexture* QskColorRamp::texture( const void* rhi, QSGTexture* QskColorRamp::texture( const void* rhi,
const QskGradientStops& stops, QGradient::Spread spread ) const QskGradientStops& stops, QskGradient::Spread spread )
{ {
if ( s_cache == nullptr ) if ( s_cache == nullptr )
{ {

View File

@ -7,15 +7,13 @@
#define QSK_COLOR_RAMP_H #define QSK_COLOR_RAMP_H
#include "QskGlobal.h" #include "QskGlobal.h"
#include "QskGradientStop.h" #include "QskGradient.h"
#include <qbrush.h>
class QSGTexture; class QSGTexture;
namespace QskColorRamp namespace QskColorRamp
{ {
QSGTexture* texture( const void* rhi, const QskGradientStops&, QGradient::Spread ); QSGTexture* texture( const void* rhi, const QskGradientStops&, QskGradient::Spread );
} }
#endif #endif

View File

@ -19,19 +19,19 @@ class QSK_EXPORT QskGradientMaterial : public QSGMaterial
QskGradient::Type gradientType() const; QskGradient::Type gradientType() const;
const QskGradientStops& stops() const; const QskGradientStops& stops() const;
QGradient::Spread spread() const; QskGradient::Spread spread() const;
protected: protected:
QskGradientMaterial( QskGradient::Type ); QskGradientMaterial( QskGradient::Type );
void setStops( const QskGradientStops& ); void setStops( const QskGradientStops& );
void setSpread( QGradient::Spread ); void setSpread( QskGradient::Spread );
private: private:
const QskGradient::Type m_gradientType; const QskGradient::Type m_gradientType;
QskGradientStops m_stops; QskGradientStops m_stops;
QGradient::Spread m_spread = QGradient::PadSpread; QskGradient::Spread m_spread = QskGradient::PadSpread;
}; };
inline QskGradient::Type QskGradientMaterial::gradientType() const inline QskGradient::Type QskGradientMaterial::gradientType() const
@ -44,7 +44,7 @@ inline void QskGradientMaterial::setStops( const QskGradientStops& stops )
m_stops = stops; m_stops = stops;
} }
inline void QskGradientMaterial::setSpread( QGradient::Spread spread ) inline void QskGradientMaterial::setSpread( QskGradient::Spread spread )
{ {
m_spread = spread; m_spread = spread;
} }
@ -54,7 +54,7 @@ inline const QskGradientStops& QskGradientMaterial::stops() const
return m_stops; return m_stops;
} }
inline QGradient::Spread QskGradientMaterial::spread() const inline QskGradient::Spread QskGradientMaterial::spread() const
{ {
return m_spread; return m_spread;
} }