2019-06-20 10:02:28 +00:00
|
|
|
/******************************************************************************
|
|
|
|
* QSkinny - Copyright (C) 2016 Uwe Rathmann
|
2020-07-31 10:43:08 +00:00
|
|
|
* This file may be used under the terms of the QSkinny License, Version 1.0
|
2019-06-20 10:02:28 +00:00
|
|
|
*****************************************************************************/
|
|
|
|
|
2020-07-31 10:43:08 +00:00
|
|
|
#include "QskRgbPalette.h"
|
|
|
|
#include "QskRgbValue.h"
|
2020-07-31 11:26:22 +00:00
|
|
|
#include "QskGradient.h"
|
2017-10-17 15:29:02 +00:00
|
|
|
|
|
|
|
#define RGB( color, weight ) color ## weight
|
|
|
|
|
|
|
|
#define RGBTABLE( c ) \
|
|
|
|
{ \
|
|
|
|
RGB( c, 50 ), RGB( c, 100 ), RGB( c, 200 ), RGB( c, 300 ), RGB( c, 400 ), \
|
|
|
|
RGB( c, 500 ), RGB( c, 600 ), RGB( c, 700 ), RGB( c, 800 ), RGB( c, 900 ) \
|
|
|
|
}
|
|
|
|
|
|
|
|
namespace
|
|
|
|
{
|
2020-07-31 10:43:08 +00:00
|
|
|
class Palette : public QskRgbPalette
|
2017-10-17 15:29:02 +00:00
|
|
|
{
|
2018-08-03 06:15:28 +00:00
|
|
|
public:
|
2020-07-31 10:43:08 +00:00
|
|
|
Palette( int index )
|
2017-10-17 15:29:02 +00:00
|
|
|
{
|
|
|
|
using namespace QskRgbValue;
|
|
|
|
|
2020-07-31 10:43:08 +00:00
|
|
|
static constexpr QRgb table[][ Palette::NumWeights ] =
|
2017-10-17 15:29:02 +00:00
|
|
|
{
|
|
|
|
RGBTABLE( Red ),
|
|
|
|
RGBTABLE( Pink ),
|
|
|
|
RGBTABLE( Purple ),
|
|
|
|
RGBTABLE( DeepPurple ),
|
|
|
|
RGBTABLE( Indigo ),
|
|
|
|
RGBTABLE( Blue ),
|
|
|
|
RGBTABLE( LightBlue ),
|
|
|
|
RGBTABLE( Cyan ),
|
|
|
|
RGBTABLE( Teal ),
|
|
|
|
RGBTABLE( Green ),
|
2018-08-03 06:15:28 +00:00
|
|
|
RGBTABLE( LightGreen ),
|
2017-10-17 15:29:02 +00:00
|
|
|
RGBTABLE( Lime ),
|
|
|
|
RGBTABLE( Yellow ),
|
|
|
|
RGBTABLE( Amber ),
|
|
|
|
RGBTABLE( Orange ),
|
|
|
|
RGBTABLE( DeepOrange ),
|
|
|
|
RGBTABLE( Brown ),
|
|
|
|
RGBTABLE( Grey ),
|
|
|
|
RGBTABLE( BlueGrey ),
|
|
|
|
};
|
|
|
|
|
2018-08-03 06:15:28 +00:00
|
|
|
const int count = sizeof( table ) / sizeof( table[ 0 ] );
|
2017-10-17 15:29:02 +00:00
|
|
|
m_rgb = table[ qBound( 0, index, count ) ];
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2020-07-31 10:43:08 +00:00
|
|
|
QskRgbPalette QskRgbPalette::palette( Theme theme )
|
2017-10-17 15:29:02 +00:00
|
|
|
{
|
2020-07-31 10:43:08 +00:00
|
|
|
return Palette( static_cast< int >( theme ) );
|
2017-10-17 15:29:02 +00:00
|
|
|
}
|
2020-07-31 11:26:22 +00:00
|
|
|
|
|
|
|
QVector< QskGradientStop > QskRgbPalette::colorStops( bool discrete ) const
|
|
|
|
{
|
|
|
|
QVector< QskGradientStop > stops;
|
|
|
|
|
|
|
|
if ( discrete )
|
|
|
|
stops.reserve( 2 * QskRgbPalette::NumWeights - 2 );
|
|
|
|
else
|
|
|
|
stops.reserve( QskRgbPalette::NumWeights );
|
|
|
|
|
|
|
|
stops += QskGradientStop( 0.0, m_rgb[0] );
|
|
|
|
|
|
|
|
if ( discrete )
|
|
|
|
{
|
|
|
|
constexpr auto step = 1.0 / NumWeights;
|
|
|
|
|
|
|
|
for ( int i = 1; i < NumWeights; i++ )
|
|
|
|
{
|
|
|
|
const qreal pos = i * step;
|
|
|
|
stops += QskGradientStop( pos, m_rgb[i-1] );
|
|
|
|
stops += QskGradientStop( pos, m_rgb[i] );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
constexpr auto step = 1.0 / ( NumWeights - 1 );
|
|
|
|
|
|
|
|
for ( int i = 1; i < NumWeights - 1; i++ )
|
|
|
|
stops += QskGradientStop( i * step, m_rgb[i] );
|
|
|
|
}
|
|
|
|
|
|
|
|
stops += QskGradientStop( 1.0, m_rgb[NumWeights - 1] );
|
|
|
|
|
|
|
|
return stops;
|
|
|
|
}
|