From c05e190afd9b5c7da1bb946befbd9c0bc73ddf6c Mon Sep 17 00:00:00 2001 From: Hugo Pereira Da Costa Date: Thu, 25 Sep 2014 11:43:01 +0200 Subject: [PATCH] added Side argument to renderSidePanel properly deal with right to left layout --- kstyle/breezehelper.cpp | 46 ++++++++++++++++++++++++++++++++++------- kstyle/breezehelper.h | 2 +- kstyle/breezestyle.cpp | 4 +++- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/kstyle/breezehelper.cpp b/kstyle/breezehelper.cpp index 3d1c2be3..0c0183fe 100644 --- a/kstyle/breezehelper.cpp +++ b/kstyle/breezehelper.cpp @@ -474,21 +474,51 @@ namespace Breeze } //______________________________________________________________________________ - void Helper::renderSidePanelFrame( QPainter* painter, const QRect& rect, const QColor& outline ) const + void Helper::renderSidePanelFrame( QPainter* painter, const QRect& rect, const QColor& outline, Side side ) const { - painter->setRenderHint( QPainter::Antialiasing ); + // check color + if( !outline.isValid() ) return; - QRectF frameRect( rect.adjusted( 1, 2, -1, -2 ) ); + // adjust rect + QRectF frameRect( rect.adjusted( 1, 1, -1, -1 ) ); + frameRect.adjust( 0.5, 0.5, -0.5, -0.5 ); - // set pen - if( outline.isValid() ) + // setup painter + painter->setRenderHint( QPainter::Antialiasing ); + painter->setPen( outline ); + + // render + switch( side ) { + default: + case SideLeft: + frameRect.adjust( 0, 1, 0, -1 ); + painter->drawLine( frameRect.topRight(), frameRect.bottomRight() ); + break; - painter->setPen( outline ); - frameRect.adjust( 0.5, 0.5, -0.5, -0.5 ); + case SideTop: + frameRect.adjust( 1, 0, -1, 0 ); + painter->drawLine( frameRect.topLeft(), frameRect.topRight() ); + break; - painter->drawLine( frameRect.topRight(), frameRect.bottomRight() ); + case SideRight: + frameRect.adjust( 0, 1, 0, -1 ); + painter->drawLine( frameRect.topLeft(), frameRect.bottomLeft() ); + break; + + case SideBottom: + frameRect.adjust( 1, 0, -1, 0 ); + painter->drawLine( frameRect.bottomLeft(), frameRect.bottomRight() ); + break; + + case AllSides: + { + qreal radius( frameRadius() ); + radius -= 1.0; + painter->drawRoundedRect( frameRect, radius, radius ); + break; + } } diff --git a/kstyle/breezehelper.h b/kstyle/breezehelper.h index 32148ae7..c5de4024 100644 --- a/kstyle/breezehelper.h +++ b/kstyle/breezehelper.h @@ -161,7 +161,7 @@ namespace Breeze void renderFrame( QPainter*, const QRect&, const QColor& color, const QColor& outline = QColor() ) const; //* side panel frame - void renderSidePanelFrame( QPainter*, const QRect&, const QColor& outline = QColor() ) const; + void renderSidePanelFrame( QPainter*, const QRect&, const QColor& outline, Side ) const; //* menu frame void renderMenuFrame( QPainter*, const QRect&, const QColor& color, const QColor& outline, bool roundCorners = true ) const; diff --git a/kstyle/breezestyle.cpp b/kstyle/breezestyle.cpp index 19760d45..6b6b9194 100644 --- a/kstyle/breezestyle.cpp +++ b/kstyle/breezestyle.cpp @@ -2604,7 +2604,9 @@ namespace Breeze { const QColor outline( _helper->sidePanelOutlineColor( palette, hasFocus, opacity, mode ) ); - _helper->renderSidePanelFrame( painter, rect, outline ); + const bool reverseLayout( option->direction == Qt::RightToLeft ); + const Side side( reverseLayout ? SideRight : SideLeft ); + _helper->renderSidePanelFrame( painter, rect, outline, side ); } else {