From 211bbc95bada4e8041ac84664c490cfd8c218f17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Tue, 23 Oct 2007 12:40:03 +0000 Subject: [PATCH] Consistently decide whether shadow will be painted for a window. svn path=/trunk/KDE/kdebase/workspace/; revision=728484 --- effects/shadow.cpp | 17 ++++++++++++++--- effects/shadow.h | 1 + scene.cpp | 2 ++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/effects/shadow.cpp b/effects/shadow.cpp index 42f3fad3d2..d69f41cb29 100644 --- a/effects/shadow.cpp +++ b/effects/shadow.cpp @@ -40,16 +40,20 @@ QRect ShadowEffect::shadowRectangle(const QRect& windowRectangle) const return windowRectangle.adjusted( shadowXOffset - shadowGrow, shadowYOffset - shadowGrow, shadowXOffset + shadowGrow, shadowYOffset + shadowGrow); } + void ShadowEffect::prePaintWindow( EffectWindow* w, WindowPrePaintData& data, int time ) { - data.mask |= PAINT_WINDOW_TRANSLUCENT; - data.paint |= QRegion( shadowRectangle( ( QRegion( w->geometry()) & data.paint ).boundingRect() )); + if( useShadow( w )) + { + data.mask |= PAINT_WINDOW_TRANSLUCENT; + data.paint |= QRegion( shadowRectangle( ( QRegion( w->geometry()) & data.paint ).boundingRect() )); + } effects->prePaintWindow( w, data, time ); } void ShadowEffect::paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data ) { - if( !w->isDeleted() && !w->isDesktop() && !w->isDock() ) + if( useShadow( w )) drawShadow( w, mask, region, data ); effects->paintWindow( w, mask, region, data ); } @@ -61,10 +65,17 @@ void ShadowEffect::postPaintWindow( EffectWindow* w ) QRect ShadowEffect::transformWindowDamage( EffectWindow* w, const QRect& r ) { + if( !useShadow( w )) + return effects->transformWindowDamage( w, r ); QRect r2 = r | shadowRectangle( r ); return effects->transformWindowDamage( w, r2 ); } +bool ShadowEffect::useShadow( EffectWindow* w ) const + { + return !w->isDeleted() && !w->isDesktop() && !w->isDock(); + } + void ShadowEffect::addQuadVertices(QVector& verts, float x1, float y1, float x2, float y2) const { verts << x1 << y1; diff --git a/effects/shadow.h b/effects/shadow.h index be5f4ac8f4..ee1f8c9529 100644 --- a/effects/shadow.h +++ b/effects/shadow.h @@ -33,6 +33,7 @@ class ShadowEffect void addQuadVertices(QVector& verts, float x1, float y1, float x2, float y2) const; // transforms window rect -> shadow rect QRect shadowRectangle(const QRect& windowRectangle) const; + bool useShadow( EffectWindow* w ) const; int shadowXOffset, shadowYOffset; double shadowOpacity; diff --git a/scene.cpp b/scene.cpp index af9c85f2b3..ffc7d20c15 100644 --- a/scene.cpp +++ b/scene.cpp @@ -227,6 +227,8 @@ void Scene::paintSimpleScreen( int orig_mask, QRegion region ) if( !w->isPaintingEnabled()) continue; data.paint -= allclips; // make sure to avoid already clipped areas + // no painting outside visible screen (and no transformations) + data.paint &= QRect( 0, 0, displayWidth(), displayHeight()); if( data.paint.isEmpty()) // completely clipped continue; if( data.paint != region ) // prepaint added area to draw