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
|
|
|
{
|
2020-08-15 11:29:17 +00:00
|
|
|
using namespace QskRgb;
|
2017-10-17 15:29:02 +00:00
|
|
|
|
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
|
|
|
|
2021-09-17 11:47:43 +00:00
|
|
|
static QskGradientStops qskColorStops(
|
2020-07-31 14:56:33 +00:00
|
|
|
const QRgb* rgb, int count, bool discrete )
|
2020-07-31 11:26:22 +00:00
|
|
|
{
|
2021-09-17 11:47:43 +00:00
|
|
|
QskGradientStops stops;
|
2020-07-31 11:26:22 +00:00
|
|
|
|
|
|
|
if ( discrete )
|
2020-07-31 14:56:33 +00:00
|
|
|
stops.reserve( 2 * count - 2 );
|
2020-07-31 11:26:22 +00:00
|
|
|
else
|
2020-07-31 14:56:33 +00:00
|
|
|
stops.reserve( count );
|
2020-07-31 11:26:22 +00:00
|
|
|
|
2020-07-31 14:56:33 +00:00
|
|
|
stops += QskGradientStop( 0.0, rgb[0] );
|
2020-07-31 11:26:22 +00:00
|
|
|
|
|
|
|
if ( discrete )
|
|
|
|
{
|
2020-07-31 14:56:33 +00:00
|
|
|
const auto step = 1.0 / count;
|
2020-07-31 11:26:22 +00:00
|
|
|
|
2020-07-31 14:56:33 +00:00
|
|
|
for ( int i = 1; i < count; i++ )
|
2020-07-31 11:26:22 +00:00
|
|
|
{
|
|
|
|
const qreal pos = i * step;
|
2020-07-31 14:56:33 +00:00
|
|
|
stops += QskGradientStop( pos, rgb[i-1] );
|
|
|
|
stops += QskGradientStop( pos, rgb[i] );
|
2020-07-31 11:26:22 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2020-07-31 14:56:33 +00:00
|
|
|
const auto step = 1.0 / ( count - 1 );
|
2020-07-31 11:26:22 +00:00
|
|
|
|
2020-07-31 14:56:33 +00:00
|
|
|
for ( int i = 1; i < count - 1; i++ )
|
|
|
|
stops += QskGradientStop( i * step, rgb[i] );
|
2020-07-31 11:26:22 +00:00
|
|
|
}
|
|
|
|
|
2020-07-31 14:56:33 +00:00
|
|
|
stops += QskGradientStop( 1.0, rgb[count - 1] );
|
2020-07-31 11:26:22 +00:00
|
|
|
|
|
|
|
return stops;
|
|
|
|
}
|
2020-07-31 14:56:33 +00:00
|
|
|
|
2021-09-17 11:47:43 +00:00
|
|
|
QskGradientStops QskRgbPalette::colorStops( bool discrete ) const
|
2020-07-31 14:56:33 +00:00
|
|
|
{
|
|
|
|
return qskColorStops( m_rgb, NumWeights, discrete );
|
|
|
|
}
|
|
|
|
|
2021-09-17 11:47:43 +00:00
|
|
|
QskGradientStops QskRgbPalette::colorStops( Theme theme, bool discrete )
|
2020-07-31 14:56:33 +00:00
|
|
|
{
|
|
|
|
const auto pal = QskRgbPalette::palette( theme );
|
|
|
|
return pal.colorStops( discrete );
|
|
|
|
}
|
|
|
|
|
2021-09-17 11:47:43 +00:00
|
|
|
QskGradientStops QskRgbPalette::colorStops(
|
2020-07-31 14:56:33 +00:00
|
|
|
const QVector< QRgb >& rgb, bool discrete )
|
|
|
|
{
|
|
|
|
const int count = rgb.count();
|
|
|
|
|
|
|
|
if ( count == 0 )
|
2021-09-17 11:47:43 +00:00
|
|
|
return QskGradientStops();
|
2020-07-31 14:56:33 +00:00
|
|
|
|
|
|
|
if ( count == 0 )
|
|
|
|
{
|
2021-09-17 11:47:43 +00:00
|
|
|
QskGradientStops stops;
|
2020-07-31 14:56:33 +00:00
|
|
|
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"
|