diff --git a/kstyle/breeze.h b/kstyle/breeze.h --- a/kstyle/breeze.h +++ b/kstyle/breeze.h @@ -67,7 +67,10 @@ // menu items Menu_FrameWidth = 0, - MenuItem_MarginWidth = 3, + MenuItem_MarginLeft = 20, + MenuItem_MarginRight = 6, + MenuItem_MarginTop = 3, + MenuItem_MarginBottom = 3, MenuItem_ItemSpacing = 4, MenuItem_AcceleratorSpace = 16, MenuButton_IndicatorWidth = 20, diff --git a/kstyle/breezestyle.h b/kstyle/breezestyle.h --- a/kstyle/breezestyle.h +++ b/kstyle/breezestyle.h @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -416,14 +417,22 @@ QRect insideMargin( const QRect& r, int marginWidth, int marginHeight ) const { return r.adjusted( marginWidth, marginHeight, -marginWidth, -marginHeight ); } + //* adjust rect based on provided margins + QRect insideMargin( const QRect& r, const QMargins& margins ) const + { return r - margins; } + //* expand size based on margins QSize expandSize( const QSize& size, int margin ) const { return expandSize( size, margin, margin ); } //* expand size based on margins QSize expandSize( const QSize& size, int marginWidth, int marginHeight ) const { return size + 2*QSize( marginWidth, marginHeight ); } + //* expand size based on margins + QSize expandSize( const QSize& size, const QMargins& margins ) const + { return size + QSize(margins.left() + margins.right(), margins.top() + margins.bottom()); } + //* returns true for vertical tabs bool isVerticalTab( const QStyleOptionTab* option ) const { return isVerticalTab( option->shape ); } diff --git a/kstyle/breezestyle.cpp b/kstyle/breezestyle.cpp --- a/kstyle/breezestyle.cpp +++ b/kstyle/breezestyle.cpp @@ -2750,17 +2750,32 @@ size.setHeight( qMax( size.height(), int(Metrics::MenuButton_IndicatorWidth) ) ); size.setHeight( qMax( size.height(), int(Metrics::CheckBox_Size) ) ); size.setHeight( qMax( size.height(), iconWidth ) ); - return expandSize( size, Metrics::MenuItem_MarginWidth ); + + QMargins margins( + menuItemOption->menuHasCheckableItems + ? Metrics::MenuItem_ItemSpacing + : Metrics::MenuItem_MarginLeft, + Metrics::MenuItem_MarginTop, + Metrics::MenuItem_MarginRight, + Metrics::MenuItem_MarginBottom + ); + return expandSize( size, margins ); } case QStyleOptionMenuItem::Separator: { if( menuItemOption->text.isEmpty() && menuItemOption->icon.isNull() ) { + QMargins margins( + Metrics::MenuItem_MarginLeft, + Metrics::MenuItem_MarginTop, + Metrics::MenuItem_MarginRight, + Metrics::MenuItem_MarginBottom + ); - return expandSize( QSize(0,1), Metrics::MenuItem_MarginWidth ); + return expandSize( QSize(0,1), margins ); } else { @@ -4693,7 +4708,15 @@ } // get rect available for contents - auto contentsRect( insideMargin( rect, Metrics::MenuItem_MarginWidth ) ); + QMargins margins( + menuItemOption->menuHasCheckableItems + ? Metrics::MenuItem_ItemSpacing + : Metrics::MenuItem_MarginLeft, + Metrics::MenuItem_MarginTop, + Metrics::MenuItem_MarginRight, + Metrics::MenuItem_MarginBottom + ); + auto contentsRect( insideMargin( rect, margins ) ); // define relevant rectangles // checkbox @@ -6663,12 +6686,18 @@ // render a separator at the bottom const auto& palette( option->palette ); const auto color( _helper->separatorColor( palette ) ); - _helper->renderSeparator( painter, QRect( option->rect.bottomLeft()-QPoint( 0, Metrics::MenuItem_MarginWidth), QSize( option->rect.width(), 1 ) ), color ); + _helper->renderSeparator( painter, QRect( option->rect.bottomLeft()-QPoint( 0, Metrics::MenuItem_MarginTop), QSize( option->rect.width(), 1 ) ), color ); // render text in the center of the rect // icon is discarded on purpose + QMargins margins( + Metrics::MenuItem_MarginLeft, + Metrics::MenuItem_MarginTop, + Metrics::MenuItem_MarginRight, + Metrics::MenuItem_MarginBottom + ); + const auto contentsRect = insideMargin( option->rect, margins ); painter->setFont( option->font ); - const auto contentsRect = insideMargin( option->rect, Metrics::MenuItem_MarginWidth ); drawItemText( painter, contentsRect, Qt::AlignCenter, palette, true, option->text, QPalette::WindowText ); }