From d509d96b83a9f52e7d44b75cd1cb223441777ce7 Mon Sep 17 00:00:00 2001 From: Hugo Pereira Da Costa Date: Thu, 21 Aug 2014 11:44:51 +0200 Subject: [PATCH] properly adjust arrow color for toolbuttons --- kstyle/breezestyle.cpp | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/kstyle/breezestyle.cpp b/kstyle/breezestyle.cpp index 4d24121b..d9f5af11 100644 --- a/kstyle/breezestyle.cpp +++ b/kstyle/breezestyle.cpp @@ -2837,8 +2837,9 @@ namespace Breeze bool mouseOver( enabled && ( state & State_MouseOver ) ); bool hasFocus( enabled && ( state & State_HasFocus ) ); - // detect buttons in tabbar, for which special rendering is needed + // detect special buttons const bool inTabBar( widget && qobject_cast( widget->parentWidget() ) ); + const bool inToolButton( qstyleoption_cast( option ) ); // get animation state /* there is no need to update the engine since this was already done when rendering the frame */ @@ -2847,9 +2848,19 @@ namespace Breeze // color QColor color; - if( mouseOver ) color = _helper->hoverColor( palette ); + if( mouseOver && !inToolButton ) color = _helper->hoverColor( palette ); else if( inTabBar && hasFocus ) color = _helper->arrowColor( palette, mouseOver, hasFocus, opacity, mode ); - else color = palette.color( QPalette::WindowText ); + else if( inToolButton ) { + + QPalette::ColorRole colorRole; + const bool sunken( ( state & State_On ) || ( state & State_Sunken ) ); + const bool flat( state & State_AutoRaise ); + if( flat ) colorRole = (sunken&&!mouseOver) ? QPalette::HighlightedText: QPalette::WindowText; + else colorRole = (hasFocus&&!mouseOver) ? QPalette::HighlightedText:QPalette::ButtonText; + + color = palette.color( colorRole ); + + } else color = palette.color( QPalette::WindowText ); // render _helper->renderArrow( painter, rect, color, orientation ); @@ -3897,8 +3908,8 @@ namespace Breeze { QPalette::ColorRole textRole( QPalette::ButtonText ); - if( flat ) textRole = (sunken&&!mouseOver) ? QPalette::HighlightedText: QPalette::Text; - else if( hasFocus ) textRole = QPalette::HighlightedText; + if( flat ) textRole = (sunken&&!mouseOver) ? QPalette::HighlightedText: QPalette::WindowText; + else if( hasFocus&&!mouseOver ) textRole = QPalette::HighlightedText; painter->setFont(toolButtonOption->font); drawItemText( painter, textRect, textFlags, palette, enabled, toolButtonOption->text, textRole ); @@ -5165,7 +5176,6 @@ namespace Breeze // need to alter palette for focused buttons const State& state( option->state ); const bool enabled( state & State_Enabled ); - const bool sunken( ( state & State_On ) || ( state & State_Sunken ) ); const bool mouseOver( enabled && (option->state & State_MouseOver) ); const bool hasFocus( enabled && (option->state & State_HasFocus) ); const bool autoRaise( state & State_AutoRaise ); @@ -5198,19 +5208,15 @@ namespace Breeze // arrow if( toolButtonOption->subControls & SC_ToolButtonMenu ) { - copy.rect = menuRect; - if( !autoRaise ) - { drawPrimitive( PE_IndicatorButtonDropDown, ©, painter, widget ); } - if( !( autoRaise && ( toolButtonOption->activeSubControls & SC_ToolButtonMenu ) ) ) - { copy.state &= ~State_MouseOver; } + copy.rect = menuRect; + if( !autoRaise ) drawPrimitive( PE_IndicatorButtonDropDown, ©, painter, widget ); drawPrimitive( PE_IndicatorArrowDown, ©, painter, widget ); } else if( hasInlineIndicator ) { copy.rect = menuRect; - copy.state &= ~State_MouseOver; drawPrimitive( PE_IndicatorArrowDown, ©, painter, widget ); } @@ -5246,10 +5252,6 @@ namespace Breeze contentsRect = visualRect( option, contentsRect ); } - // adjust state - if( toolButtonOption->features & QStyleOptionToolButton::Arrow ) - { copy.state &= ~State_MouseOver; } - } copy.rect = contentsRect;