push button: Support more alignments of icon and text

This commit is contained in:
Peter Hartmann 2023-01-21 14:45:59 +01:00 committed by uwerat
parent f98af6d298
commit 03e24d5fea
4 changed files with 53 additions and 4 deletions

View File

@ -561,10 +561,8 @@ void Editor::setupPushButton()
setStrutSize( Q::Panel, -1, 40_dp );
setSpacing( Q::Panel, 8_dp );
setPadding( Q::Panel, { 24_dp, 0, 24_dp, 0 } );
setBoxShape( Q::Panel, 100, Qt::RelativeSize );
setAlignment( Q::Graphic, Qt::AlignCenter );
setStrutSize( Q::Graphic, 18_dp, 18_dp );
setPadding( Q::Graphic, { 0, 0, 8_dp, 0 } );
setGraphicRole( Q::Graphic, QskMaterial3Skin::GraphicRoleOnPrimary );
@ -572,8 +570,6 @@ void Editor::setupPushButton()
setFontRole( Q::Text, QskMaterial3Skin::M3LabelLarge );
setPadding( Q::Text, 0 );
setAlignment( Q::Text, Qt::AlignCenter );
// normal buttons (i.e. Filled):
setGradient( Q::Panel, m_pal.primary );

View File

@ -37,6 +37,9 @@ namespace
setGraphicTextElements( button,
QskPushButton::Text, button->text(),
QskPushButton::Graphic, button->graphic().defaultSize() );
const auto alignment = button->alignmentHint( QskPushButton::Panel, Qt::AlignCenter );
setFixedContent( QskPushButton::Text, Qt::Horizontal, alignment );
}
};
}

View File

@ -407,6 +407,54 @@ void QskSubcontrolLayoutEngine::setGraphicTextElements( const QskSkinnable* skin
}
}
void QskSubcontrolLayoutEngine::setFixedContent( QskAspect::Subcontrol subcontrol, Qt::Orientation orientation, Qt::Alignment alignment )
{
if( auto* e = element( subcontrol ) )
{
e->setSizePolicy( QskSizePolicy::Fixed, e->sizePolicy().verticalPolicy() );
}
Qt::Edges extraSpacing;
switch( orientation )
{
case Qt::Horizontal:
extraSpacing |= ( extraSpacingAt() & ( Qt::TopEdge | Qt::BottomEdge ) );
if( alignment & Qt::AlignLeft )
{
extraSpacing |= Qt::RightEdge;
}
else if( alignment & Qt::AlignRight )
{
extraSpacing |= Qt::LeftEdge;
}
else if( alignment & Qt::AlignHCenter )
{
extraSpacing |= Qt::LeftEdge | Qt::RightEdge;
}
break;
case Qt::Vertical:
extraSpacing |= ( extraSpacingAt() & ( Qt::LeftEdge | Qt::RightEdge ) );
if( alignment & Qt::AlignTop )
{
extraSpacing |= Qt::BottomEdge;
}
else if( alignment & Qt::AlignBottom )
{
extraSpacing |= Qt::TopEdge;
}
else if( alignment & Qt::AlignVCenter )
{
extraSpacing |= Qt::TopEdge | Qt::BottomEdge;
}
break;
}
setExtraSpacingAt( extraSpacing );
}
void QskSubcontrolLayoutEngine::addElement( LayoutElement* element )
{
m_data->elements += element;

View File

@ -127,6 +127,8 @@ class QskSubcontrolLayoutEngine : public QskLayoutEngine2D
QskAspect::Subcontrol, const QString& text,
QskAspect::Subcontrol, const QSizeF& graphicSize );
void setFixedContent( QskAspect::Subcontrol, Qt::Orientation, Qt::Alignment );
QRectF subControlRect( QskAspect::Subcontrol ) const;
private: