fixup? Material: Use predefined palettes in skin
This commit is contained in:
parent
6281a6afe0
commit
17185addeb
@ -13,59 +13,36 @@
|
|||||||
class QSK_MATERIAL_EXPORT QskMaterialPalette
|
class QSK_MATERIAL_EXPORT QskMaterialPalette
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum Lightness
|
// ### here add palettes? Or just pass them in the constructor?
|
||||||
{
|
|
||||||
Light,
|
|
||||||
Dark
|
|
||||||
};
|
|
||||||
|
|
||||||
QskMaterialPalette( Lightness lightness )
|
|
||||||
: m_lightness( lightness )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
inline QRgb elevated( const QRgb rgb, const float level = 1 ) const
|
|
||||||
{
|
|
||||||
return ( m_lightness == Light )
|
|
||||||
? QskRgb::darker( rgb, 100 + level * 15 )
|
|
||||||
: QskRgb::lighter( rgb, 130 + level * 30 );
|
|
||||||
}
|
|
||||||
|
|
||||||
inline QRgb toDisabled( const QRgb rgb ) const
|
|
||||||
{
|
|
||||||
return QskRgb::toTransparentF( rgb, this->m_disabled );
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
QRgb primary;
|
QRgb primary;
|
||||||
QRgb primaryVariant;
|
|
||||||
QRgb onPrimary;
|
QRgb onPrimary;
|
||||||
|
QRgb primaryContainer;
|
||||||
|
QRgb onPrimaryContainer;
|
||||||
|
|
||||||
QRgb secondary;
|
QRgb secondary;
|
||||||
QRgb secondaryVariant;
|
|
||||||
QRgb onSecondary;
|
QRgb onSecondary;
|
||||||
|
QRgb secondaryContainer;
|
||||||
|
QRgb onSecondaryContainer;
|
||||||
|
|
||||||
QRgb background;
|
QRgb tertiary;
|
||||||
QRgb onBackground;
|
QRgb onTertiary;
|
||||||
|
QRgb tertiaryContainer;
|
||||||
|
QRgb onTertiaryContainer;
|
||||||
|
|
||||||
QRgb error;
|
QRgb error;
|
||||||
QRgb onError;
|
QRgb onError;
|
||||||
|
QRgb errorContainer;
|
||||||
|
QRgb onErrorContainer;
|
||||||
|
|
||||||
QRgb primaryNoSaturation;
|
QRgb background;
|
||||||
QRgb secondaryNoSaturation;
|
QRgb onBackground;
|
||||||
QRgb secondaryVariantNoSaturation;
|
QRgb surface;
|
||||||
|
QRgb onSurface;
|
||||||
|
|
||||||
const qreal disabledOccupancy = 0.2;
|
QRgb surfaceVariant;
|
||||||
const qreal widgetBackgroundDisabled = 0.6;
|
QRgb onSurfaceVariant;
|
||||||
|
QRgb outline;
|
||||||
const qreal hover = 0.1;
|
|
||||||
const qreal focused = 0.4;
|
|
||||||
const qreal pressed = 0.5;
|
|
||||||
|
|
||||||
private:
|
|
||||||
const qreal m_disabled = 0.3;
|
|
||||||
|
|
||||||
const Lightness m_lightness;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class QSK_MATERIAL_EXPORT QskMaterialSkin : public QskSkin
|
class QSK_MATERIAL_EXPORT QskMaterialSkin : public QskSkin
|
||||||
|
@ -9,42 +9,6 @@
|
|||||||
static const QString materialLightSkinName = QStringLiteral( "materialLight" );
|
static const QString materialLightSkinName = QStringLiteral( "materialLight" );
|
||||||
static const QString materialDarkSkinName = QStringLiteral( "materialDark" );
|
static const QString materialDarkSkinName = QStringLiteral( "materialDark" );
|
||||||
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
inline int lightnessRgb( QRgb rgb )
|
|
||||||
{
|
|
||||||
const int red = qRed( rgb );
|
|
||||||
const int green = qGreen( rgb );
|
|
||||||
const int blue = qBlue( rgb );
|
|
||||||
|
|
||||||
int min, max;
|
|
||||||
|
|
||||||
if ( red > green )
|
|
||||||
{
|
|
||||||
max = qMax( red, blue );
|
|
||||||
min = qMin( green, blue );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
max = qMax( green, blue );
|
|
||||||
min = qMin( red, blue );
|
|
||||||
}
|
|
||||||
|
|
||||||
return ( max + min ) / 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline QRgb toUnsaturated( QRgb rgb )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
a saturation of 0 results in having the lightness as r,g,b
|
|
||||||
Is this intended ?
|
|
||||||
*/
|
|
||||||
|
|
||||||
const auto l = lightnessRgb( rgb );
|
|
||||||
return qRgba( l, l, l, qAlpha( rgb ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QskMaterialSkinFactory::QskMaterialSkinFactory( QObject* parent )
|
QskMaterialSkinFactory::QskMaterialSkinFactory( QObject* parent )
|
||||||
: QskSkinFactory( parent )
|
: QskSkinFactory( parent )
|
||||||
{
|
{
|
||||||
@ -71,46 +35,77 @@ QskSkin* QskMaterialSkinFactory::createSkin( const QString& skinName )
|
|||||||
{
|
{
|
||||||
if ( QString::compare( skinName, materialLightSkinName, Qt::CaseInsensitive ) == 0 )
|
if ( QString::compare( skinName, materialLightSkinName, Qt::CaseInsensitive ) == 0 )
|
||||||
{
|
{
|
||||||
QskMaterialPalette pal( QskMaterialPalette::Light );
|
// ### Move this to QskMaterialSkin?
|
||||||
|
QskMaterialPalette pal;
|
||||||
|
|
||||||
using Q = QskRgbPalette;
|
using Q = QskRgbPalette;
|
||||||
|
|
||||||
pal.primary = m_palettes[ Primary ].rgb( Q::W40 );
|
pal.primary = m_palettes[ Primary ].rgb( Q::W40 );
|
||||||
pal.primaryVariant = 0xff3700b3;
|
pal.onPrimary = m_palettes[ Primary ].rgb( Q::W100 );
|
||||||
pal.onPrimary = QskRgb::White;
|
pal.primaryContainer = m_palettes[ Primary ].rgb( Q::W90 );
|
||||||
pal.secondary = 0xff03dac6;
|
pal.onPrimaryContainer = m_palettes[ Primary ].rgb( Q::W10 );
|
||||||
pal.secondaryVariant = 0xff018786;
|
|
||||||
pal.onSecondary = QskRgb::White;
|
|
||||||
pal.background = QskRgb::DefaultMaterialNeutral90;
|
|
||||||
pal.onBackground = QskRgb::Black;
|
|
||||||
pal.error = 0xffb00020;
|
|
||||||
pal.onError = QskRgb::White;
|
|
||||||
|
|
||||||
pal.primaryNoSaturation = toUnsaturated( pal.primary );
|
pal.primary = m_palettes[ Secondary ].rgb( Q::W40 );
|
||||||
pal.secondaryNoSaturation = toUnsaturated( pal.secondary );
|
pal.onSecondary = m_palettes[ Secondary ].rgb( Q::W100 );
|
||||||
pal.secondaryVariantNoSaturation = toUnsaturated( pal.secondaryVariant );
|
pal.secondaryContainer = m_palettes[ Secondary ].rgb( Q::W90 );
|
||||||
|
pal.onSecondaryContainer = m_palettes[ Secondary ].rgb( Q::W10 );
|
||||||
|
|
||||||
|
pal.tertiary = m_palettes[ Tertiary ].rgb( Q::W40 );
|
||||||
|
pal.onTertiary = m_palettes[ Tertiary ].rgb( Q::W100 );
|
||||||
|
pal.tertiaryContainer = m_palettes[ Tertiary ].rgb( Q::W90 );
|
||||||
|
pal.onTertiaryContainer = m_palettes[ Tertiary ].rgb( Q::W10 );
|
||||||
|
|
||||||
|
pal.error = m_palettes[ Error ].rgb( Q::W40 );
|
||||||
|
pal.onError = m_palettes[ Error ].rgb( Q::W100 );
|
||||||
|
pal.errorContainer = m_palettes[ Error ].rgb( Q::W90 );
|
||||||
|
pal.onErrorContainer = m_palettes[ Error ].rgb( Q::W10 );
|
||||||
|
|
||||||
|
pal.background = m_palettes[ Neutral ].rgb( Q::W99 );
|
||||||
|
pal.onBackground = m_palettes[ Neutral ].rgb( Q::W10 );
|
||||||
|
pal.surface = m_palettes[ Neutral ].rgb( Q::W99 );
|
||||||
|
pal.onSurface = m_palettes[ Neutral ].rgb( Q::W10 );
|
||||||
|
|
||||||
|
pal.surfaceVariant = m_palettes[ NeutralVariant ].rgb( Q::W90 );
|
||||||
|
pal.onSurfaceVariant = m_palettes[ NeutralVariant ].rgb( Q::W30 );
|
||||||
|
pal.outline = m_palettes[ NeutralVariant ].rgb( Q::W50 );
|
||||||
|
|
||||||
return new QskMaterialSkin( pal );
|
return new QskMaterialSkin( pal );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( QString::compare( skinName, materialDarkSkinName, Qt::CaseInsensitive ) == 0 )
|
if ( QString::compare( skinName, materialDarkSkinName, Qt::CaseInsensitive ) == 0 )
|
||||||
{
|
{
|
||||||
QskMaterialPalette pal( QskMaterialPalette::Dark );
|
QskMaterialPalette pal;
|
||||||
|
|
||||||
pal.primary = 0xffbb86fc;
|
using Q = QskRgbPalette;
|
||||||
pal.primaryVariant = 0xff3700b3;
|
|
||||||
pal.onPrimary = QskRgb::Black;
|
|
||||||
pal.secondary = 0xff03dac6;
|
|
||||||
pal.secondaryVariant = 0xff018786;
|
|
||||||
pal.onSecondary = QskRgb::Black;
|
|
||||||
pal.background = 0xff121212;
|
|
||||||
pal.onBackground = QskRgb::White;
|
|
||||||
pal.error = 0xffcf6679;
|
|
||||||
pal.onError = QskRgb::Black;
|
|
||||||
|
|
||||||
pal.primaryNoSaturation = toUnsaturated( pal.primary );
|
pal.primary = m_palettes[ Primary ].rgb( Q::W80 );
|
||||||
pal.secondaryNoSaturation = toUnsaturated( pal.secondary );
|
pal.onPrimary = m_palettes[ Primary ].rgb( Q::W20 );
|
||||||
pal.secondaryVariantNoSaturation = toUnsaturated( pal.secondaryVariant );
|
pal.primaryContainer = m_palettes[ Primary ].rgb( Q::W30 );
|
||||||
|
pal.onPrimaryContainer = m_palettes[ Primary ].rgb( Q::W90 );
|
||||||
|
|
||||||
|
pal.primary = m_palettes[ Secondary ].rgb( Q::W80 );
|
||||||
|
pal.onSecondary = m_palettes[ Secondary ].rgb( Q::W20 );
|
||||||
|
pal.secondaryContainer = m_palettes[ Secondary ].rgb( Q::W30 );
|
||||||
|
pal.onSecondaryContainer = m_palettes[ Secondary ].rgb( Q::W90 );
|
||||||
|
|
||||||
|
pal.tertiary = m_palettes[ Tertiary ].rgb( Q::W80 );
|
||||||
|
pal.onTertiary = m_palettes[ Tertiary ].rgb( Q::W20 );
|
||||||
|
pal.tertiaryContainer = m_palettes[ Tertiary ].rgb( Q::W30 );
|
||||||
|
pal.onTertiaryContainer = m_palettes[ Tertiary ].rgb( Q::W90 );
|
||||||
|
|
||||||
|
pal.error = m_palettes[ Error ].rgb( Q::W80 );
|
||||||
|
pal.onError = m_palettes[ Error ].rgb( Q::W20 );
|
||||||
|
pal.errorContainer = m_palettes[ Error ].rgb( Q::W30 );
|
||||||
|
pal.onErrorContainer = m_palettes[ Error ].rgb( Q::W90 );
|
||||||
|
|
||||||
|
pal.background = m_palettes[ Neutral ].rgb( Q::W10 );
|
||||||
|
pal.onBackground = m_palettes[ Neutral ].rgb( Q::W90 );
|
||||||
|
pal.surface = m_palettes[ Neutral ].rgb( Q::W10 );
|
||||||
|
pal.onSurface = m_palettes[ Neutral ].rgb( Q::W80 );
|
||||||
|
|
||||||
|
pal.surfaceVariant = m_palettes[ NeutralVariant ].rgb( Q::W30 );
|
||||||
|
pal.onSurfaceVariant = m_palettes[ NeutralVariant ].rgb( Q::W80 );
|
||||||
|
pal.outline = m_palettes[ NeutralVariant ].rgb( Q::W60 );
|
||||||
|
|
||||||
return new QskMaterialSkin( pal );
|
return new QskMaterialSkin( pal );
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user