Commit be09a708 authored by Hugo Pereira Da Costa's avatar Hugo Pereira Da Costa

When an icon is set to a QMenuBar Item, render the icon only, and ignore the...

When an icon is set to a QMenuBar Item, render the icon only, and ignore the text, when set, as this is what qmenubar expects.
BUG: 387539
parent dc19a6bd
......@@ -2692,7 +2692,11 @@ namespace Breeze
//______________________________________________________________
QSize Style::menuBarItemSizeFromContents( const QStyleOption*, const QSize& contentsSize, const QWidget* ) const
{ return expandSize( contentsSize, Metrics::MenuBarItem_MarginWidth, Metrics::MenuBarItem_MarginHeight ); }
{
return expandSize( contentsSize, Metrics::MenuBarItem_MarginWidth, Metrics::MenuBarItem_MarginHeight );
}
//______________________________________________________________
QSize Style::menuItemSizeFromContents( const QStyleOption* option, const QSize& contentsSize, const QWidget* widget ) const
......@@ -4226,7 +4230,7 @@ namespace Breeze
else if( mouseOver && flat ) iconMode = QIcon::Active;
else iconMode = QIcon::Normal;
const QPixmap pixmap = buttonOption->icon.pixmap( iconSize, iconMode, iconState );
const auto pixmap = buttonOption->icon.pixmap( iconSize, iconMode, iconState );
drawItemPixmap( painter, iconRect, Qt::AlignCenter, pixmap );
}
......@@ -4516,7 +4520,7 @@ namespace Breeze
}
//___________________________________________________________________________________
bool Style::drawMenuBarItemControl( const QStyleOption* option, QPainter* painter, const QWidget* ) const
bool Style::drawMenuBarItemControl( const QStyleOption* option, QPainter* painter, const QWidget* widget) const
{
// cast option and check
......@@ -4545,23 +4549,70 @@ namespace Breeze
}
// get text rect
const int textFlags( Qt::AlignCenter|_mnemonics->textFlags() );
const auto textRect = option->fontMetrics.boundingRect( rect, textFlags, menuItemOption->text );
/*
check if item as an icon, in which case only the icon should be rendered
consistently with comment in QMenuBarPrivate::calcActionRects
*/
if( !menuItemOption->icon.isNull() )
{
// icon size is forced to
const auto iconSize = pixelMetric(QStyle::PM_SmallIconSize, nullptr, widget);
const auto iconRect = centerRect( rect, iconSize, iconSize );
// render text
const QPalette::ColorRole role = (useStrongFocus && sunken ) ? QPalette::HighlightedText : QPalette::WindowText;
drawItemText( painter, textRect, textFlags, palette, enabled, menuItemOption->text, role );
// decide icon mode and state
QIcon::Mode iconMode;
QIcon::State iconState;
if( !enabled )
{
iconMode = QIcon::Disabled;
iconState = QIcon::Off;
// render outline
if( !useStrongFocus && ( selected || sunken ) )
{
} else {
QColor outlineColor;
if( sunken ) outlineColor = _helper->focusColor( palette );
else if( selected ) outlineColor = _helper->hoverColor( palette );
if( useStrongFocus && selected ) iconMode = QIcon::Active;
else if( useStrongFocus && sunken ) iconMode = QIcon::Selected;
else iconMode = QIcon::Normal;
_helper->renderFocusLine( painter, textRect, outlineColor );
iconState = sunken ? QIcon::On : QIcon::Off;
}
const auto pixmap = menuItemOption->icon.pixmap( iconSize, iconMode, iconState );
drawItemPixmap( painter, iconRect, Qt::AlignCenter, pixmap );
// render outline
if( !useStrongFocus && ( selected || sunken ) )
{
QColor outlineColor;
if( sunken ) outlineColor = _helper->focusColor( palette );
else if( selected ) outlineColor = _helper->hoverColor( palette );
_helper->renderFocusLine( painter, iconRect, outlineColor );
}
} else {
// get text rect
const int textFlags( Qt::AlignCenter|_mnemonics->textFlags() );
const auto textRect = option->fontMetrics.boundingRect( rect, textFlags, menuItemOption->text );
// render text
const QPalette::ColorRole role = (useStrongFocus && sunken ) ? QPalette::HighlightedText : QPalette::WindowText;
drawItemText( painter, textRect, textFlags, palette, enabled, menuItemOption->text, role );
// render outline
if( !useStrongFocus && ( selected || sunken ) )
{
QColor outlineColor;
if( sunken ) outlineColor = _helper->focusColor( palette );
else if( selected ) outlineColor = _helper->hoverColor( palette );
_helper->renderFocusLine( painter, textRect, outlineColor );
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment