diff --git a/skins/material/QskMaterialSkin.cpp b/skins/material/QskMaterialSkin.cpp index 74a1bd6d..58d81616 100644 --- a/skins/material/QskMaterialSkin.cpp +++ b/skins/material/QskMaterialSkin.cpp @@ -809,10 +809,16 @@ QskMaterialTheme::QskMaterialTheme( Lightness lightness ) QskMaterialTheme::QskMaterialTheme( Lightness lightness, std::array< QskRgbPalette, NumPaletteTypes > palettes ) : m_palettes( palettes ) + , m_lightness( lightness ) +{ + initColors(); +} + +void QskMaterialTheme::initColors() { using Q = QskRgbPalette; - if ( lightness == Light ) + if ( m_lightness == Light ) { primary = m_palettes[ Primary ].rgb( Q::W40 ); onPrimary = m_palettes[ Primary ].rgb( Q::W100 ); @@ -843,7 +849,7 @@ QskMaterialTheme::QskMaterialTheme( Lightness lightness, onSurfaceVariant = m_palettes[ NeutralVariant ].rgb( Q::W30 ); outline = m_palettes[ NeutralVariant ].rgb( Q::W50 ); } - else if ( lightness == Dark ) + else if ( m_lightness == Dark ) { primary = m_palettes[ Primary ].rgb( Q::W80 ); onPrimary = m_palettes[ Primary ].rgb( Q::W20 ); @@ -876,19 +882,41 @@ QskMaterialTheme::QskMaterialTheme( Lightness lightness, } } -QskMaterialSkin::QskMaterialSkin( const QskMaterialTheme& palette, QObject* parent ) +std::array< QskRgbPalette, QskMaterialTheme::NumPaletteTypes > QskMaterialTheme::palettes() const +{ + return m_palettes; +} + +void QskMaterialTheme::setPalette( PaletteType type, const QskRgbPalette& palette ) +{ + m_palettes[ type ] = palette; + initColors(); +} + +QskMaterialSkin::QskMaterialSkin( const QskMaterialTheme& theme, QObject* parent ) : Inherited( parent ) + , m_theme( theme ) { setupFonts(); - - Editor editor( &hintTable(), palette ); - editor.setup(); + init( theme ); } QskMaterialSkin::~QskMaterialSkin() { } +void QskMaterialSkin::setPalette( QskMaterialTheme::PaletteType type, + const QskRgbPalette& palette ) +{ + m_theme.setPalette( type, palette ); +} + +void QskMaterialSkin::init( const QskMaterialTheme& palette ) +{ + Editor editor( &hintTable(), palette ); + editor.setup(); +} + void QskMaterialSkin::setupFonts() { Inherited::setupFonts( QStringLiteral( "Roboto" ) ); diff --git a/skins/material/QskMaterialSkin.h b/skins/material/QskMaterialSkin.h index e4bc11f1..14cb2c83 100644 --- a/skins/material/QskMaterialSkin.h +++ b/skins/material/QskMaterialSkin.h @@ -68,8 +68,14 @@ class QSK_MATERIAL_EXPORT QskMaterialTheme const qreal pressedOpacity = 0.12; const qreal draggedOpacity = 0.16; + std::array< QskRgbPalette, NumPaletteTypes > palettes() const; + void setPalette( PaletteType type, const QskRgbPalette& palette ); + private: + void initColors(); + std::array< QskRgbPalette, NumPaletteTypes > m_palettes; + Lightness m_lightness; }; class QSK_MATERIAL_EXPORT QskMaterialSkin : public QskSkin @@ -87,10 +93,13 @@ class QSK_MATERIAL_EXPORT QskMaterialSkin : public QskSkin M3LabelLarge = QskSkin::HugeFont + 1, }; - // ### add setTheme() re-implement resetColors() + void setPalette( QskMaterialTheme::PaletteType, const QskRgbPalette& palette ); private: + void init( const QskMaterialTheme& palette ); void setupFonts(); + + QskMaterialTheme m_theme; }; #endif