button: Add more states to cover different button types

This commit is contained in:
Peter Hartmann 2022-06-08 10:54:01 +02:00
parent a810739254
commit e6b85e528b
4 changed files with 53 additions and 14 deletions

View File

@ -29,27 +29,36 @@ namespace
private: private:
void populate() void populate()
{ {
const char* texts[] = { "Press Me", "Check Me" }; const char* texts[] = { "Press Me", "Check Me", "Outlined", "Text" };
const char* graphics[] = { "diamond/khaki", "ellipse/sandybrown" }; const char* graphics[] = { "diamond/khaki", "ellipse/sandybrown" };
for ( int i = 0; i < 6; i++ ) for ( int i = 0; i < 8; i++ )
{ {
const int index = i % 2; const int index = i % 2;
auto button = new QskPushButton( this ); auto button = new QskPushButton( this );
button->setCheckable( index != 0 ); button->setCheckable( index != 0 && index < 6 );
//button->setSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Fixed ); //button->setSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Fixed );
if ( i > 1 ) if ( i > 1 && i < 6 )
{ {
auto src = QStringLiteral( "image://shapes/" ) + graphics[ index ]; auto src = QStringLiteral( "image://shapes/" ) + graphics[ index ];
button->setGraphicSource( src ); button->setGraphicSource( src );
} }
if ( i < 2 || ( i > 3 && i < 6 ) )
if ( i < 2 || i > 3 )
{ {
button->setText( texts[ index ] ); button->setText( texts[ index ] );
} }
else if( i == 6 )
{
button->setSkinStateFlag( QskAbstractButton::Outlined );
button->setText( texts[ 2 ] );
}
else if( i == 7 )
{
button->setSkinStateFlag( QskAbstractButton::TextState );
button->setText( texts[ 3 ] );
}
} }
} }
}; };

View File

@ -423,24 +423,52 @@ void Editor::setupPushButton()
setBoxShape( Q::Panel, 100, Qt::RelativeSize ); setBoxShape( Q::Panel, 100, Qt::RelativeSize );
setColor( Q::Text, m_pal.onPrimary ); setAlignment( Q::Graphic | A::Alignment, Qt::AlignLeft );
setPadding( Q::Graphic, 5 );
QColor c2( m_pal.onSurface );
c2.setAlphaF( 0.38 );
setColor( Q::Text | Q::Disabled, c2 );
setFontRole( Q::Text, QskMaterialSkin::M3LabelLarge ); setFontRole( Q::Text, QskMaterialSkin::M3LabelLarge );
setAlignment( Q::Text, Qt::AlignCenter ); setAlignment( Q::Text, Qt::AlignCenter );
// normal buttons (i.e. Filled):
setGradient( Q::Panel, m_pal.primary ); setGradient( Q::Panel, m_pal.primary );
QColor c1( m_pal.onSurface ); QColor c1( m_pal.onSurface );
c1.setAlphaF( 0.12 ); c1.setAlphaF( 0.12 );
setGradient( Q::Panel | Q::Disabled, c1 ); setGradient( Q::Panel | Q::Disabled, c1 );
setColor( Q::Text, m_pal.onPrimary );
QColor c2( m_pal.onSurface );
c2.setAlphaF( 0.38 );
setColor( Q::Text | Q::Disabled, c2 );
// Outlined and Text:
const QskStateCombination combination( QskStateCombination::Combination, Q::Outlined | Q::TextState );
setGradient( Q::Panel, Qt::transparent, combination );
setBoxBorderMetrics( Q::Panel, 1, { QskStateCombination::CombinationNoState, Q::Outlined } );
setBoxBorderColors( Q::Panel | Q::Outlined, m_pal.outline );
setGradient( Q::Panel | Q::Disabled, Qt::transparent, combination );
setBoxBorderColors( Q::Panel | Q::Outlined | Q::Disabled, c1 );
QColor primary08( m_pal.primary );
primary08.setAlphaF( 0.08 );
setGradient( Q::Panel | Q::Outlined, primary08,
{ QskStateCombination::Combination,
Q::Hovered | Q::Focused | Q::Pressed } );
setGradient( Q::Panel | Q::TextState, primary08,
{ QskStateCombination::Combination,
Q::Hovered | Q::Focused | Q::Pressed } );
setColor( Q::Text, m_pal.primary, combination );
setColor( Q::Text | Q::Disabled, c1, combination );
setAlignment( Q::Graphic | A::Alignment, Qt::AlignLeft );
setPadding( Q::Graphic, 5 );
setAnimation( Q::Panel | A::Color, qskDuration ); setAnimation( Q::Panel | A::Color, qskDuration );
setAnimation( Q::Panel | A::Metric, qskDuration ); setAnimation( Q::Panel | A::Metric, qskDuration );

View File

@ -12,6 +12,8 @@
// Flat is no state - we need to get rid of it. TODO ... // Flat is no state - we need to get rid of it. TODO ...
QSK_SYSTEM_STATE( QskAbstractButton, Flat, QskAspect::FirstSystemState << 1 ) QSK_SYSTEM_STATE( QskAbstractButton, Flat, QskAspect::FirstSystemState << 1 )
QSK_SYSTEM_STATE( QskAbstractButton, Outlined, QskAspect::FirstSystemState << 2 )
QSK_SYSTEM_STATE( QskAbstractButton, TextState, QskAspect::FirstSystemState << 3 )
QSK_SYSTEM_STATE( QskAbstractButton, Checked, QskAspect::LastSystemState >> 3 ) QSK_SYSTEM_STATE( QskAbstractButton, Checked, QskAspect::LastSystemState >> 3 )
QSK_SYSTEM_STATE( QskAbstractButton, Pressed, QskAspect::LastSystemState >> 2 ) QSK_SYSTEM_STATE( QskAbstractButton, Pressed, QskAspect::LastSystemState >> 2 )

View File

@ -33,7 +33,7 @@ class QSK_EXPORT QskAbstractButton : public QskControl
using Inherited = QskControl; using Inherited = QskControl;
public: public:
QSK_STATES( Flat, Checked, Pressed ) QSK_STATES( Flat, Outlined, TextState, Checked, Pressed )
QskAbstractButton( QQuickItem* parent = nullptr ); QskAbstractButton( QQuickItem* parent = nullptr );
~QskAbstractButton() override; ~QskAbstractButton() override;