more variations for generating color stops

This commit is contained in:
Uwe Rathmann 2020-07-31 16:56:33 +02:00
parent 0df61d647d
commit c66d2044a9
2 changed files with 54 additions and 13 deletions

View File

@ -58,37 +58,73 @@ QskRgbPalette QskRgbPalette::palette( Theme theme )
return Palette( static_cast< int >( theme ) ); return Palette( static_cast< int >( theme ) );
} }
QVector< QskGradientStop > QskRgbPalette::colorStops( bool discrete ) const static QVector< QskGradientStop > qskColorStops(
const QRgb* rgb, int count, bool discrete )
{ {
QVector< QskGradientStop > stops; QVector< QskGradientStop > stops;
if ( discrete ) if ( discrete )
stops.reserve( 2 * QskRgbPalette::NumWeights - 2 ); stops.reserve( 2 * count - 2 );
else else
stops.reserve( QskRgbPalette::NumWeights ); stops.reserve( count );
stops += QskGradientStop( 0.0, m_rgb[0] ); stops += QskGradientStop( 0.0, rgb[0] );
if ( discrete ) if ( discrete )
{ {
constexpr auto step = 1.0 / NumWeights; const auto step = 1.0 / count;
for ( int i = 1; i < NumWeights; i++ ) for ( int i = 1; i < count; i++ )
{ {
const qreal pos = i * step; const qreal pos = i * step;
stops += QskGradientStop( pos, m_rgb[i-1] ); stops += QskGradientStop( pos, rgb[i-1] );
stops += QskGradientStop( pos, m_rgb[i] ); stops += QskGradientStop( pos, rgb[i] );
} }
} }
else else
{ {
constexpr auto step = 1.0 / ( NumWeights - 1 ); const auto step = 1.0 / ( count - 1 );
for ( int i = 1; i < NumWeights - 1; i++ ) for ( int i = 1; i < count - 1; i++ )
stops += QskGradientStop( i * step, m_rgb[i] ); stops += QskGradientStop( i * step, rgb[i] );
} }
stops += QskGradientStop( 1.0, m_rgb[NumWeights - 1] ); stops += QskGradientStop( 1.0, rgb[count - 1] );
return stops; return stops;
} }
QVector< QskGradientStop > QskRgbPalette::colorStops( bool discrete ) const
{
return qskColorStops( m_rgb, NumWeights, discrete );
}
QVector< QskGradientStop > QskRgbPalette::colorStops( Theme theme, bool discrete )
{
const auto pal = QskRgbPalette::palette( theme );
return pal.colorStops( discrete );
}
QVector< QskGradientStop > QskRgbPalette::colorStops(
const QVector< QRgb >& rgb, bool discrete )
{
const int count = rgb.count();
if ( count == 0 )
return QVector< QskGradientStop >();
if ( count == 0 )
{
QVector< QskGradientStop > stops;
stops.reserve( 2 );
stops += QskGradientStop( 0.0, rgb[0] );
stops += QskGradientStop( 1.0, rgb[0] );
return stops;
}
return qskColorStops( rgb.constData(), count, discrete );
}
#include "moc_QskRgbPalette.cpp"

View File

@ -61,6 +61,8 @@ class QSK_EXPORT QskRgbPalette
}; };
Q_ENUM( Theme ) Q_ENUM( Theme )
static QskRgbPalette palette( Theme );
inline QRgb rgb( Weight weight ) const inline QRgb rgb( Weight weight ) const
{ {
if ( weight < 0 || weight >= NumWeights ) if ( weight < 0 || weight >= NumWeights )
@ -76,7 +78,10 @@ class QSK_EXPORT QskRgbPalette
QVector< QskGradientStop > colorStops( bool discrete = false ) const; QVector< QskGradientStop > colorStops( bool discrete = false ) const;
static QskRgbPalette palette( Theme ); static QVector< QskGradientStop > colorStops( Theme, bool discrete = false );
static QVector< QskGradientStop > colorStops(
const QVector< QRgb >&, bool discrete = false );
protected: protected:
const QRgb* m_rgb; const QRgb* m_rgb;