fixup Material: Move palette generation around

This commit is contained in:
Peter Hartmann 2022-06-03 10:15:20 +02:00
parent 17185addeb
commit fdd19894fb
4 changed files with 123 additions and 101 deletions

View File

@ -55,7 +55,7 @@ namespace
class Editor : private QskSkinHintTableEditor
{
public:
Editor( QskSkinHintTable* table, const QskMaterialPalette& palette )
Editor( QskSkinHintTable* table, const QskMaterialTheme& palette )
: QskSkinHintTableEditor( table )
, m_pal( palette )
{
@ -91,7 +91,7 @@ namespace
void setupTextInput();
void setupTextLabel();
const QskMaterialPalette& m_pal;
const QskMaterialTheme& m_pal;
const uint rippleSize = 30;
};
}
@ -830,7 +830,94 @@ void Editor::setupSubWindow()
}
QskMaterialSkin::QskMaterialSkin( const QskMaterialPalette& palette, QObject* parent )
QskMaterialTheme::QskMaterialTheme( Lightness lightness )
: QskMaterialTheme( lightness,
{
QskRgbPalette::palette( QskRgbPalette::DefaultMaterialPrimary ),
QskRgbPalette::palette( QskRgbPalette::DefaultMaterialSecondary ),
QskRgbPalette::palette( QskRgbPalette::DefaultMaterialTertiary ),
QskRgbPalette::palette( QskRgbPalette::DefaultMaterialError ),
QskRgbPalette::palette( QskRgbPalette::DefaultMaterialNeutral ),
QskRgbPalette::palette( QskRgbPalette::DefaultMaterialNeutralVariant ),
} )
{
}
QskMaterialTheme::QskMaterialTheme( Lightness lightness,
std::array< QskRgbPalette, NumPaletteTypes > palettes )
: m_palettes( palettes )
{
using Q = QskRgbPalette;
if ( lightness == Light )
{
using Q = QskRgbPalette;
primary = m_palettes[ Primary ].rgb( Q::W40 );
onPrimary = m_palettes[ Primary ].rgb( Q::W100 );
primaryContainer = m_palettes[ Primary ].rgb( Q::W90 );
onPrimaryContainer = m_palettes[ Primary ].rgb( Q::W10 );
primary = m_palettes[ Secondary ].rgb( Q::W40 );
onSecondary = m_palettes[ Secondary ].rgb( Q::W100 );
secondaryContainer = m_palettes[ Secondary ].rgb( Q::W90 );
onSecondaryContainer = m_palettes[ Secondary ].rgb( Q::W10 );
tertiary = m_palettes[ Tertiary ].rgb( Q::W40 );
onTertiary = m_palettes[ Tertiary ].rgb( Q::W100 );
tertiaryContainer = m_palettes[ Tertiary ].rgb( Q::W90 );
onTertiaryContainer = m_palettes[ Tertiary ].rgb( Q::W10 );
error = m_palettes[ Error ].rgb( Q::W40 );
onError = m_palettes[ Error ].rgb( Q::W100 );
errorContainer = m_palettes[ Error ].rgb( Q::W90 );
onErrorContainer = m_palettes[ Error ].rgb( Q::W10 );
background = m_palettes[ Neutral ].rgb( Q::W99 );
onBackground = m_palettes[ Neutral ].rgb( Q::W10 );
surface = m_palettes[ Neutral ].rgb( Q::W99 );
onSurface = m_palettes[ Neutral ].rgb( Q::W10 );
surfaceVariant = m_palettes[ NeutralVariant ].rgb( Q::W90 );
onSurfaceVariant = m_palettes[ NeutralVariant ].rgb( Q::W30 );
outline = m_palettes[ NeutralVariant ].rgb( Q::W50 );
}
else if ( lightness == Dark )
{
using Q = QskRgbPalette;
primary = m_palettes[ Primary ].rgb( Q::W80 );
onPrimary = m_palettes[ Primary ].rgb( Q::W20 );
primaryContainer = m_palettes[ Primary ].rgb( Q::W30 );
onPrimaryContainer = m_palettes[ Primary ].rgb( Q::W90 );
primary = m_palettes[ Secondary ].rgb( Q::W80 );
onSecondary = m_palettes[ Secondary ].rgb( Q::W20 );
secondaryContainer = m_palettes[ Secondary ].rgb( Q::W30 );
onSecondaryContainer = m_palettes[ Secondary ].rgb( Q::W90 );
tertiary = m_palettes[ Tertiary ].rgb( Q::W80 );
onTertiary = m_palettes[ Tertiary ].rgb( Q::W20 );
tertiaryContainer = m_palettes[ Tertiary ].rgb( Q::W30 );
onTertiaryContainer = m_palettes[ Tertiary ].rgb( Q::W90 );
error = m_palettes[ Error ].rgb( Q::W80 );
onError = m_palettes[ Error ].rgb( Q::W20 );
errorContainer = m_palettes[ Error ].rgb( Q::W30 );
onErrorContainer = m_palettes[ Error ].rgb( Q::W90 );
background = m_palettes[ Neutral ].rgb( Q::W10 );
onBackground = m_palettes[ Neutral ].rgb( Q::W90 );
surface = m_palettes[ Neutral ].rgb( Q::W10 );
onSurface = m_palettes[ Neutral ].rgb( Q::W80 );
surfaceVariant = m_palettes[ NeutralVariant ].rgb( Q::W30 );
onSurfaceVariant = m_palettes[ NeutralVariant ].rgb( Q::W80 );
outline = m_palettes[ NeutralVariant ].rgb( Q::W60 );
}
}
QskMaterialSkin::QskMaterialSkin( const QskMaterialTheme& palette, QObject* parent )
: Inherited( parent )
{
// Default theme colors

View File

@ -8,12 +8,31 @@
#include "QskMaterialGlobal.h"
#include <QskSkin.h>
#include <QskRgbValue.h>
#include <QskRgbPalette.h>
class QSK_MATERIAL_EXPORT QskMaterialPalette
class QSK_MATERIAL_EXPORT QskMaterialTheme
{
public:
// ### here add palettes? Or just pass them in the constructor?
enum Lightness
{
Light,
Dark
};
enum PaletteType
{
Primary,
Secondary,
Tertiary,
Error,
Neutral,
NeutralVariant,
NumPaletteTypes
};
QskMaterialTheme( Lightness );
QskMaterialTheme( Lightness, std::array< QskRgbPalette, NumPaletteTypes > );
QRgb primary;
QRgb onPrimary;
@ -43,6 +62,9 @@ class QSK_MATERIAL_EXPORT QskMaterialPalette
QRgb surfaceVariant;
QRgb onSurfaceVariant;
QRgb outline;
private:
std::array< QskRgbPalette, NumPaletteTypes > m_palettes;
};
class QSK_MATERIAL_EXPORT QskMaterialSkin : public QskSkin
@ -52,8 +74,10 @@ class QSK_MATERIAL_EXPORT QskMaterialSkin : public QskSkin
using Inherited = QskSkin;
public:
QskMaterialSkin( const QskMaterialPalette&, QObject* parent = nullptr );
QskMaterialSkin( const QskMaterialTheme&, QObject* parent = nullptr );
~QskMaterialSkin() override;
// ### add setTheme() re-implement resetColors()
};
#endif

View File

@ -12,14 +12,6 @@ static const QString materialDarkSkinName = QStringLiteral( "materialDark" );
QskMaterialSkinFactory::QskMaterialSkinFactory( QObject* parent )
: QskSkinFactory( parent )
{
using Q = QskRgbPalette;
m_palettes[ Primary ] = Q::palette( Q::DefaultMaterialPrimary );
m_palettes[ Secondary ] = Q::palette( Q::DefaultMaterialSecondary );
m_palettes[ Tertiary ] = Q::palette( Q::DefaultMaterialTertiary );
m_palettes[ Error ] = Q::palette( Q::DefaultMaterialError );
m_palettes[ Neutral ] = Q::palette( Q::DefaultMaterialNeutral );
m_palettes[ NeutralVariant ] = Q::palette( Q::DefaultMaterialNeutralVariant );
}
QskMaterialSkinFactory::~QskMaterialSkinFactory()
@ -35,79 +27,13 @@ QskSkin* QskMaterialSkinFactory::createSkin( const QString& skinName )
{
if ( QString::compare( skinName, materialLightSkinName, Qt::CaseInsensitive ) == 0 )
{
// ### Move this to QskMaterialSkin?
QskMaterialPalette pal;
using Q = QskRgbPalette;
pal.primary = m_palettes[ Primary ].rgb( Q::W40 );
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.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 );
QskMaterialTheme theme( QskMaterialTheme::Light );
return new QskMaterialSkin( theme );
}
if ( QString::compare( skinName, materialDarkSkinName, Qt::CaseInsensitive ) == 0 )
else if ( QString::compare( skinName, materialDarkSkinName, Qt::CaseInsensitive ) == 0 )
{
QskMaterialPalette pal;
using Q = QskRgbPalette;
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 );
QskMaterialTheme theme( QskMaterialTheme::Dark );
return new QskMaterialSkin( theme );
}
return nullptr;

View File

@ -21,23 +21,8 @@ class QSK_MATERIAL_EXPORT QskMaterialSkinFactory : public QskSkinFactory
QskMaterialSkinFactory( QObject* parent = nullptr );
~QskMaterialSkinFactory() override;
enum PaletteType
{
Primary,
Secondary,
Tertiary,
Error,
Neutral,
NeutralVariant,
NumPaletteTypes
};
QStringList skinNames() const override;
QskSkin* createSkin( const QString& skinName ) override;
private:
QskRgbPalette m_palettes[ NumPaletteTypes ];
};
#endif