From 99eb5c369523fe1cf0d158837d2a9111eee7c3be Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Thu, 2 Mar 2023 09:16:55 +0100 Subject: [PATCH] using graphics for the spin box button indicators --- skins/material3/QskMaterial3Skin.cpp | 8 +++++--- skins/squiek/QskSquiekSkin.cpp | 24 ++++++++++++++++++------ skins/squiek/QskSquiekSkin.h | 1 + src/controls/QskSpinBoxSkinlet.cpp | 16 +++++++++++----- 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/skins/material3/QskMaterial3Skin.cpp b/skins/material3/QskMaterial3Skin.cpp index f17b2dcd..277aa32e 100644 --- a/skins/material3/QskMaterial3Skin.cpp +++ b/skins/material3/QskMaterial3Skin.cpp @@ -893,6 +893,7 @@ void Editor::setupSpinBox() { setGradient( subControl, m_pal.primary ); setGradient( subControl | Q::Disabled, m_pal.onSurface12 ); + setPadding( subControl, 10 ); } { @@ -904,10 +905,9 @@ void Editor::setupSpinBox() for( const auto subControl : { Q::DownIndicator, Q::UpIndicator } ) { - setColor( subControl, m_pal.onPrimary ); - setColor( subControl | Q::Disabled, m_pal.onSurface38 ); setAlignment( subControl, Qt::AlignCenter ); - setFontRole( subControl, QskMaterial3Skin::M3LabelLarge ); + setGraphicRole( subControl, QskMaterial3Skin::GraphicRoleOnPrimary ); + setGraphicRole( subControl | Q::Disabled, QskMaterial3Skin::GraphicRoleOnSurface38 ); } setColor( Q::Text, m_pal.onBackground ); @@ -1370,9 +1370,11 @@ QskGraphic QskMaterial3Skin::symbol( int symbolType ) const return *( provider->requestGraphic( "segmented-button-check" ) ); case QskStandardSymbol::ComboBoxSymbolPopupClosed: + case QskStandardSymbol::TriangleDown: return *( provider->requestGraphic( "combo-box-arrow-closed" ) ); case QskStandardSymbol::ComboBoxSymbolPopupOpen: + case QskStandardSymbol::TriangleUp: return *( provider->requestGraphic( "combo-box-arrow-open" ) ); default: diff --git a/skins/squiek/QskSquiekSkin.cpp b/skins/squiek/QskSquiekSkin.cpp index 1facfb60..8898c8ed 100644 --- a/skins/squiek/QskSquiekSkin.cpp +++ b/skins/squiek/QskSquiekSkin.cpp @@ -44,6 +44,7 @@ #include #include #include +#include static const int qskDuration = 200; @@ -175,6 +176,11 @@ namespace const ColorPalette& m_pal; }; + + enum ColorRole + { + DisabledColor = 1 + }; } void Editor::setSeparator( QskAspect aspect ) @@ -1041,7 +1047,7 @@ void Editor::setupSpinBox() for ( auto subControl : { Q::UpPanel, Q::DownPanel } ) { setButton( subControl, Raised, 1.0 ); - setPadding( subControl, 0.0 ); + setPadding( subControl, 4 ); setStrutSize( subControl, 20, 10 ); setBoxShape( subControl, 0 ); @@ -1056,12 +1062,9 @@ void Editor::setupSpinBox() for ( auto subControl : { Q::UpIndicator, Q::DownIndicator } ) { + setGraphicRole( subControl | Q::Disabled, DisabledColor ); setAlignment( subControl, Qt::AlignCenter ); -#if 1 - setFontRole( subControl, QskSkin::TinyFont ); // until it is no graphic - setColor( subControl, m_pal.themeForeground ); - setColor( subControl | Q::Disabled, m_pal.darker200 ); -#endif + setAnimation( subControl | A::Color, 100 ); } } @@ -1122,6 +1125,8 @@ QskSquiekSkin::QskSquiekSkin( QObject* parent ) { setupFonts( QStringLiteral( "DejaVuSans" ) ); + addGraphicRole( DisabledColor, m_data->palette.lighter150 ); + Editor editor( &hintTable(), m_data->palette ); editor.setup(); } @@ -1138,5 +1143,12 @@ void QskSquiekSkin::resetColors( const QColor& accent ) editor.setup(); } +void QskSquiekSkin::addGraphicRole( int role, const QColor& color ) +{ + QskColorFilter colorFilter; + colorFilter.addColorSubstitution( QskRgb::Black, color.rgba() ); + + setGraphicFilter( role, colorFilter ); +} #include "moc_QskSquiekSkin.cpp" diff --git a/skins/squiek/QskSquiekSkin.h b/skins/squiek/QskSquiekSkin.h index 8cbe3a98..a72f0c45 100644 --- a/skins/squiek/QskSquiekSkin.h +++ b/skins/squiek/QskSquiekSkin.h @@ -22,6 +22,7 @@ class QSK_SQUIEK_EXPORT QskSquiekSkin : public QskSkin private: void resetColors( const QColor& accent ) override; + void addGraphicRole( int role, const QColor& ); class PrivateData; std::unique_ptr< PrivateData > m_data; diff --git a/src/controls/QskSpinBoxSkinlet.cpp b/src/controls/QskSpinBoxSkinlet.cpp index 162f18ad..20a7dcc0 100644 --- a/src/controls/QskSpinBoxSkinlet.cpp +++ b/src/controls/QskSpinBoxSkinlet.cpp @@ -6,7 +6,10 @@ #include "QskSpinBoxSkinlet.h" #include "QskSpinBox.h" #include "QskFunctions.h" +#include "QskSkin.h" #include "QskSkinStateChanger.h" +#include "QskStandardSymbol.h" +#include "QskGraphic.h" #include @@ -92,15 +95,19 @@ QSGNode* QskSpinBoxSkinlet::updateSubNode( case UpIndicator: { stateChanger.setStates( qskButtonStates( skinnable, Q::UpIndicator ) ); - return updateTextNode( skinnable, node, - QStringLiteral( "+" ), Q::UpIndicator ); + + const auto skin = skinnable->effectiveSkin(); + return updateGraphicNode( skinnable, node, + skin->symbol( QskStandardSymbol::TriangleUp ), Q::UpIndicator ); } case DownIndicator: { stateChanger.setStates( qskButtonStates( skinnable, Q::DownIndicator ) ); - return updateTextNode( skinnable, node, - QStringLiteral( "-" ), Q::DownIndicator ); + + const auto skin = skinnable->effectiveSkin(); + return updateGraphicNode( skinnable, node, + skin->symbol( QskStandardSymbol::TriangleDown ), Q::DownIndicator ); } case TextPanel: @@ -271,4 +278,3 @@ QSizeF QskSpinBoxSkinlet::sizeHint( const QskSkinnable* skinnable, hint = hint.expandedTo( spinBox->strutSizeHint( Q::Panel ) ); return hint; } -