Moved back shadow dimensions to Metrics in breeze.h

cleanup shadow rendering code
fix shadow offsets in MDI windows
wilder-pre-rebase
Hugo Pereira Da Costa 12 years ago
parent 54b498c975
commit 631247fac6
  1. 8
      kstyle/breeze.h
  2. 5
      kstyle/breezemdiwindowshadow.cpp
  3. 3
      kstyle/breezemdiwindowshadow.h
  4. 85
      kstyle/breezeshadowhelper.cpp

@ -157,7 +157,13 @@ namespace Breeze
ItemView_ItemMarginWidth = 4, ItemView_ItemMarginWidth = 4,
// splitter // splitter
Splitter_SplitterWidth = 1 Splitter_SplitterWidth = 1,
// shadow dimensions
Shadow_InternalSize = 10,
Shadow_InternalOffset = 4,
Shadow_Size = (3*Shadow_InternalSize + Shadow_InternalOffset)/2,
Shadow_Overlap = Shadow_Size - Shadow_InternalSize + 2
}; };

@ -30,6 +30,8 @@
#include "breezemdiwindowshadow.h" #include "breezemdiwindowshadow.h"
#include "breezemdiwindowshadow.moc" #include "breezemdiwindowshadow.moc"
#include "breeze.h"
#include <QMdiArea> #include <QMdiArea>
#include <QMdiSubWindow> #include <QMdiSubWindow>
#include <QPainter> #include <QPainter>
@ -44,7 +46,8 @@ namespace Breeze
if( !_widget ) return; if( !_widget ) return;
// get tileSet rect // get tileSet rect
_shadowTilesRect = _widget->frameGeometry().adjusted( -ShadowSize, -ShadowSize, ShadowSize, ShadowSize ); const int shadowSize = Metrics::Shadow_Size - Metrics::Shadow_Overlap;
_shadowTilesRect = _widget->frameGeometry().adjusted( -shadowSize, -shadowSize, shadowSize, shadowSize );
// get parent MDI area's viewport // get parent MDI area's viewport
QWidget *parent( parentWidget() ); QWidget *parent( parentWidget() );

@ -51,9 +51,6 @@ namespace Breeze
public: public:
//* shadow size (hard coded)
enum { ShadowSize = 10 };
//* constructor //* constructor
explicit MdiWindowShadow( QWidget* parent, TileSet shadowTiles ): explicit MdiWindowShadow( QWidget* parent, TileSet shadowTiles ):
QWidget( parent ), QWidget( parent ),

@ -27,6 +27,7 @@
#include "breezeshadowhelper.h" #include "breezeshadowhelper.h"
#include "breezeshadowhelper.moc" #include "breezeshadowhelper.moc"
#include "breeze.h"
#include "breezehelper.h" #include "breezehelper.h"
#include "breezestyleconfigdata.h" #include "breezestyleconfigdata.h"
@ -50,15 +51,6 @@ namespace Breeze
const char* const ShadowHelper::netWMForceShadowPropertyName( "_KDE_NET_WM_FORCE_SHADOW" ); const char* const ShadowHelper::netWMForceShadowPropertyName( "_KDE_NET_WM_FORCE_SHADOW" );
const char* const ShadowHelper::netWMSkipShadowPropertyName( "_KDE_NET_WM_SKIP_SHADOW" ); const char* const ShadowHelper::netWMSkipShadowPropertyName( "_KDE_NET_WM_SKIP_SHADOW" );
// shadow dimensions
enum
{
Shadow_InternalSize = 10,
Shadow_InternalOffset = 4,
Shadow_Size = (3*Shadow_InternalSize + Shadow_InternalOffset)/2,
Shadow_Overlap = Shadow_Size - Shadow_InternalSize + 2
};
//_____________________________________________________ //_____________________________________________________
ShadowHelper::ShadowHelper( QObject* parent, Helper& helper ): ShadowHelper::ShadowHelper( QObject* parent, Helper& helper ):
QObject( parent ), QObject( parent ),
@ -161,7 +153,7 @@ namespace Breeze
const QColor shadowColor( palette.color( QPalette::Shadow ) ); const QColor shadowColor( palette.color( QPalette::Shadow ) );
// create pixmap // create pixmap
QPixmap pixmap = QPixmap( Shadow_Size*2, Shadow_Size*2 ); QPixmap pixmap = QPixmap( Metrics::Shadow_Size*2, Metrics::Shadow_Size*2 );
pixmap.fill( Qt::transparent ); pixmap.fill( Qt::transparent );
// paint // paint
@ -172,9 +164,9 @@ namespace Breeze
switch( StyleConfigData::lightSource() ) switch( StyleConfigData::lightSource() )
{ {
case StyleConfigData::LS_TOP: painter.translate( Shadow_InternalOffset/2, Shadow_InternalOffset ); break; case StyleConfigData::LS_TOP: painter.translate( Metrics::Shadow_InternalOffset/2, Metrics::Shadow_InternalOffset ); break;
case StyleConfigData::LS_TOPLEFT: painter.translate( Shadow_InternalOffset, Shadow_InternalOffset ); break; case StyleConfigData::LS_TOPLEFT: painter.translate( Metrics::Shadow_InternalOffset, Metrics::Shadow_InternalOffset ); break;
case StyleConfigData::LS_TOPRIGHT: painter.translate( 0, Shadow_InternalOffset ); break; case StyleConfigData::LS_TOPRIGHT: painter.translate( 0, Metrics::Shadow_InternalOffset ); break;
} }
auto gradientStopColor = [](QColor color, qreal alpha) { auto gradientStopColor = [](QColor color, qreal alpha) {
@ -182,7 +174,7 @@ namespace Breeze
return color; return color;
}; };
QRadialGradient radialGradient(Shadow_InternalSize, Shadow_InternalSize, Shadow_InternalSize); QRadialGradient radialGradient(Metrics::Shadow_InternalSize, Metrics::Shadow_InternalSize, Metrics::Shadow_InternalSize);
radialGradient.setColorAt(0.0, gradientStopColor( shadowColor, 0.35 ) ); radialGradient.setColorAt(0.0, gradientStopColor( shadowColor, 0.35 ) );
radialGradient.setColorAt(0.25, gradientStopColor( shadowColor, 0.25 ) ); radialGradient.setColorAt(0.25, gradientStopColor( shadowColor, 0.25 ) );
radialGradient.setColorAt(0.5, gradientStopColor( shadowColor, 0.13 ) ); radialGradient.setColorAt(0.5, gradientStopColor( shadowColor, 0.13 ) );
@ -197,46 +189,55 @@ namespace Breeze
linearGradient.setColorAt(1.0, gradientStopColor( shadowColor, 0.0) ); linearGradient.setColorAt(1.0, gradientStopColor( shadowColor, 0.0) );
// topLeft // topLeft
painter.fillRect(QRect(0, 0, Shadow_InternalSize, Shadow_InternalSize), radialGradient); QRect rect( 0, 0, Metrics::Shadow_InternalSize, Metrics::Shadow_InternalSize );
painter.fillRect(rect, radialGradient);
// top // top
linearGradient.setStart(Shadow_InternalSize, Shadow_InternalSize); rect.translate( Metrics::Shadow_InternalSize, 0 );
linearGradient.setFinalStop(Shadow_InternalSize, 0); linearGradient.setStart( rect.bottomLeft() );
painter.fillRect(QRect(Shadow_InternalSize, 0, Shadow_InternalSize, Shadow_InternalSize), linearGradient); linearGradient.setFinalStop( rect.topLeft() );
painter.fillRect( rect, linearGradient );
// topRight // topRight
radialGradient.setCenter(2*Shadow_InternalSize, Shadow_InternalSize); rect.translate( Metrics::Shadow_InternalSize, 0 );
radialGradient.setFocalPoint(2*Shadow_InternalSize, Shadow_InternalSize); radialGradient.setCenter( rect.bottomLeft() );
painter.fillRect(QRect(2*Shadow_InternalSize, 0, Shadow_InternalSize, Shadow_InternalSize), radialGradient); radialGradient.setFocalPoint( rect.bottomLeft() );
painter.fillRect( rect, radialGradient );
// left // right
linearGradient.setStart(Shadow_InternalSize, Shadow_InternalSize); rect.translate( 0, Metrics::Shadow_InternalSize );
linearGradient.setFinalStop(0, Shadow_InternalSize); linearGradient.setStart( rect.topLeft() );
painter.fillRect(QRect(0, Shadow_InternalSize, Shadow_InternalSize, Shadow_InternalSize), linearGradient); linearGradient.setFinalStop( rect.topRight() );
painter.fillRect( rect, linearGradient);
// bottom left // bottom right
radialGradient.setCenter(Shadow_InternalSize, 2*Shadow_InternalSize); rect.translate( 0, Metrics::Shadow_InternalSize );
radialGradient.setFocalPoint(Shadow_InternalSize, 2*Shadow_InternalSize); radialGradient.setCenter( rect.topLeft() );
painter.fillRect(QRect(0, 2*Shadow_InternalSize, Shadow_InternalSize, Shadow_InternalSize), radialGradient); radialGradient.setFocalPoint( rect.topLeft() );
painter.fillRect( rect, radialGradient );
// bottom // bottom
linearGradient.setStart(Shadow_InternalSize, 2*Shadow_InternalSize); rect.translate( -Metrics::Shadow_InternalSize, 0 );
linearGradient.setFinalStop(Shadow_InternalSize, 3*Shadow_InternalSize); linearGradient.setStart( rect.topLeft() );
painter.fillRect(QRect(Shadow_InternalSize, 2*Shadow_InternalSize, Shadow_InternalSize, Shadow_InternalSize), linearGradient); linearGradient.setFinalStop( rect.bottomLeft() );
painter.fillRect( rect, linearGradient);
// bottom right // bottom left
radialGradient.setCenter(2*Shadow_InternalSize, 2*Shadow_InternalSize); rect.translate( -Metrics::Shadow_InternalSize, 0 );
radialGradient.setFocalPoint(2*Shadow_InternalSize, 2*Shadow_InternalSize); radialGradient.setCenter( rect.topRight() );
painter.fillRect(QRect(2*Shadow_InternalSize, 2*Shadow_InternalSize, Shadow_InternalSize, Shadow_InternalSize), radialGradient); radialGradient.setFocalPoint( rect.topRight() );
painter.fillRect( rect, radialGradient );
// left
rect.translate( 0, -Metrics::Shadow_InternalSize );
linearGradient.setStart( rect.topRight() );
linearGradient.setFinalStop( rect.topLeft() );
painter.fillRect( rect, linearGradient);
// right
linearGradient.setStart(2*Shadow_InternalSize, Shadow_InternalSize);
linearGradient.setFinalStop(3*Shadow_InternalSize, Shadow_InternalSize);
painter.fillRect(QRect(2*Shadow_InternalSize, Shadow_InternalSize, Shadow_InternalSize, Shadow_InternalSize), linearGradient);
painter.end(); painter.end();
// create tiles from pixmap // create tiles from pixmap
_shadowTiles = TileSet( pixmap, Shadow_Size, Shadow_Size, Shadow_Size, Shadow_Size, Shadow_Size, Shadow_Size, 1, 1 ); _shadowTiles = TileSet( pixmap, Metrics::Shadow_Size, Metrics::Shadow_Size, Metrics::Shadow_Size, Metrics::Shadow_Size, Metrics::Shadow_Size, Metrics::Shadow_Size, 1, 1 );
} }
@ -462,7 +463,7 @@ namespace Breeze
*/ */
// also need to decrement default size further due to extra hard coded round corner // also need to decrement default size further due to extra hard coded round corner
int size = Shadow_Size - Shadow_Overlap; int size = Metrics::Shadow_Size - Metrics::Shadow_Overlap;
if( isToolTip( widget ) ) if( isToolTip( widget ) )
{ {
if( widget->inherits( "QBalloonTip" ) ) if( widget->inherits( "QBalloonTip" ) )

Loading…
Cancel
Save