Material skin: Allow setting a different palette

This commit is contained in:
Peter Hartmann 2022-06-07 14:03:06 +02:00
parent a2d67f0438
commit 421db106da
2 changed files with 44 additions and 7 deletions

View File

@ -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" ) );

View File

@ -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