From 17185addeb8244573e1e035253134d36a2096164 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Fri, 3 Jun 2022 09:32:29 +0200 Subject: [PATCH] fixup? Material: Use predefined palettes in skin --- skins/material/QskMaterialSkin.h | 59 ++++------- skins/material/QskMaterialSkinFactory.cpp | 121 +++++++++++----------- 2 files changed, 76 insertions(+), 104 deletions(-) diff --git a/skins/material/QskMaterialSkin.h b/skins/material/QskMaterialSkin.h index 4e04b2fc..c387f70a 100644 --- a/skins/material/QskMaterialSkin.h +++ b/skins/material/QskMaterialSkin.h @@ -13,59 +13,36 @@ class QSK_MATERIAL_EXPORT QskMaterialPalette { public: - enum Lightness - { - Light, - Dark - }; + // ### here add palettes? Or just pass them in the constructor? - 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 primaryVariant; QRgb onPrimary; + QRgb primaryContainer; + QRgb onPrimaryContainer; QRgb secondary; - QRgb secondaryVariant; QRgb onSecondary; + QRgb secondaryContainer; + QRgb onSecondaryContainer; - QRgb background; - QRgb onBackground; + QRgb tertiary; + QRgb onTertiary; + QRgb tertiaryContainer; + QRgb onTertiaryContainer; QRgb error; QRgb onError; + QRgb errorContainer; + QRgb onErrorContainer; - QRgb primaryNoSaturation; - QRgb secondaryNoSaturation; - QRgb secondaryVariantNoSaturation; + QRgb background; + QRgb onBackground; + QRgb surface; + QRgb onSurface; - const qreal disabledOccupancy = 0.2; - const qreal widgetBackgroundDisabled = 0.6; - - 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; + QRgb surfaceVariant; + QRgb onSurfaceVariant; + QRgb outline; }; class QSK_MATERIAL_EXPORT QskMaterialSkin : public QskSkin diff --git a/skins/material/QskMaterialSkinFactory.cpp b/skins/material/QskMaterialSkinFactory.cpp index 2f12ba79..d82a4e1a 100644 --- a/skins/material/QskMaterialSkinFactory.cpp +++ b/skins/material/QskMaterialSkinFactory.cpp @@ -9,42 +9,6 @@ static const QString materialLightSkinName = QStringLiteral( "materialLight" ); 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 ) : QskSkinFactory( parent ) { @@ -71,46 +35,77 @@ QskSkin* QskMaterialSkinFactory::createSkin( const QString& skinName ) { if ( QString::compare( skinName, materialLightSkinName, Qt::CaseInsensitive ) == 0 ) { - QskMaterialPalette pal( QskMaterialPalette::Light ); + // ### Move this to QskMaterialSkin? + QskMaterialPalette pal; using Q = QskRgbPalette; pal.primary = m_palettes[ Primary ].rgb( Q::W40 ); - pal.primaryVariant = 0xff3700b3; - pal.onPrimary = QskRgb::White; - pal.secondary = 0xff03dac6; - pal.secondaryVariant = 0xff018786; - pal.onSecondary = QskRgb::White; - pal.background = QskRgb::DefaultMaterialNeutral90; - pal.onBackground = QskRgb::Black; - pal.error = 0xffb00020; - pal.onError = QskRgb::White; + pal.onPrimary = m_palettes[ Primary ].rgb( Q::W100 ); + pal.primaryContainer = m_palettes[ Primary ].rgb( Q::W90 ); + pal.onPrimaryContainer = m_palettes[ Primary ].rgb( Q::W10 ); - pal.primaryNoSaturation = toUnsaturated( pal.primary ); - pal.secondaryNoSaturation = toUnsaturated( pal.secondary ); - pal.secondaryVariantNoSaturation = toUnsaturated( pal.secondaryVariant ); + pal.primary = m_palettes[ Secondary ].rgb( Q::W40 ); + pal.onSecondary = m_palettes[ Secondary ].rgb( Q::W100 ); + 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 ); } if ( QString::compare( skinName, materialDarkSkinName, Qt::CaseInsensitive ) == 0 ) { - QskMaterialPalette pal( QskMaterialPalette::Dark ); + QskMaterialPalette pal; - pal.primary = 0xffbb86fc; - 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; + using Q = QskRgbPalette; - pal.primaryNoSaturation = toUnsaturated( pal.primary ); - pal.secondaryNoSaturation = toUnsaturated( pal.secondary ); - pal.secondaryVariantNoSaturation = toUnsaturated( pal.secondaryVariant ); + pal.primary = m_palettes[ Primary ].rgb( Q::W80 ); + pal.onPrimary = m_palettes[ Primary ].rgb( Q::W20 ); + 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 ); }