From 30eb55863c5ff5e5f69aa94c8d5793f62c3ad941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Wed, 8 Aug 2007 14:42:06 +0000 Subject: [PATCH] Make WindowPaintData ctor require an EffectWindow argument, which is used to fill it in. Makes thumbnails work again. svn path=/trunk/KDE/kdebase/workspace/; revision=697961 --- effects.cpp | 20 +++++--------------- effects.h | 26 ++++++++++++++++++++++++++ effects/boxswitch.cpp | 2 +- effects/demo_taskbarthumbnail.cpp | 2 +- effects/test_thumbnail.cpp | 2 +- effects/thumbnailaside.cpp | 2 +- lib/kwineffects.cpp | 5 +++-- lib/kwineffects.h | 5 ++++- scene.cpp | 3 +-- 9 files changed, 43 insertions(+), 24 deletions(-) diff --git a/effects.cpp b/effects.cpp index 545b6541d0..b9d0daa01d 100644 --- a/effects.cpp +++ b/effects.cpp @@ -877,16 +877,6 @@ void EffectWindowImpl::unrefWindow() abort(); // TODO } -const Toplevel* EffectWindowImpl::window() const - { - return toplevel; - } - -Toplevel* EffectWindowImpl::window() - { - return toplevel; - } - void EffectWindowImpl::setWindow( Toplevel* w ) { toplevel = w; @@ -897,11 +887,6 @@ void EffectWindowImpl::setSceneWindow( Scene::Window* w ) sw = w; } -Scene::Window* EffectWindowImpl::sceneWindow() - { - return sw; - } - int EffectWindowImpl::x() const { return toplevel->x(); @@ -1097,6 +1082,11 @@ void EffectWindowImpl::setShader(GLShader* shader) abort(); // TODO } +WindowQuadList EffectWindowImpl::buildQuads() const + { + return sceneWindow()->buildQuads(); + } + EffectWindow* effectWindow( Toplevel* w ) { EffectWindowImpl* ret = w->effectWindow(); diff --git a/effects.h b/effects.h index b28016fa1a..ab4d5a4ec7 100644 --- a/effects.h +++ b/effects.h @@ -191,12 +191,14 @@ class EffectWindowImpl : public EffectWindow virtual EffectWindowList mainWindows() const; virtual void setShader(GLShader* shader); + virtual WindowQuadList buildQuads() const; const Toplevel* window() const; Toplevel* window(); void setWindow( Toplevel* w ); // internal void setSceneWindow( Scene::Window* w ); // internal + const Scene::Window* sceneWindow() const; // internal Scene::Window* sceneWindow(); // internal private: Toplevel* toplevel; @@ -230,6 +232,30 @@ EffectWindowGroupImpl::EffectWindowGroupImpl( Group* g ) EffectWindow* effectWindow( Toplevel* w ); EffectWindow* effectWindow( Scene::Window* w ); +inline +const Scene::Window* EffectWindowImpl::sceneWindow() const + { + return sw; + } + +inline +Scene::Window* EffectWindowImpl::sceneWindow() + { + return sw; + } + +inline +const Toplevel* EffectWindowImpl::window() const + { + return toplevel; + } + +inline +Toplevel* EffectWindowImpl::window() + { + return toplevel; + } + } // namespace diff --git a/effects/boxswitch.cpp b/effects/boxswitch.cpp index aa3f9a7667..d7ab72b384 100644 --- a/effects/boxswitch.cpp +++ b/effects/boxswitch.cpp @@ -500,7 +500,7 @@ void BoxSwitchEffect::paintWindowThumbnail( EffectWindow* w ) { if( !windows.contains( w )) return; - WindowPaintData data; + WindowPaintData data( w ); setPositionTransformations( data, windows[ w ]->thumbnail, w, diff --git a/effects/demo_taskbarthumbnail.cpp b/effects/demo_taskbarthumbnail.cpp index afa8d1012f..e1f2155a63 100644 --- a/effects/demo_taskbarthumbnail.cpp +++ b/effects/demo_taskbarthumbnail.cpp @@ -56,7 +56,7 @@ void TaskbarThumbnailEffect::postPaintScreen() foreach( EffectWindow* w, mThumbnails ) { QRect thumb = getThumbnailPosition( w, &space); - WindowPaintData thumbdata; + WindowPaintData thumbdata( w ); thumbdata.xTranslate = thumb.x() - w->x(); thumbdata.yTranslate = thumb.y() - w->y(); thumbdata.xScale = thumb.width() / (float)w->width(); diff --git a/effects/test_thumbnail.cpp b/effects/test_thumbnail.cpp index 2a8836890d..db74bff210 100644 --- a/effects/test_thumbnail.cpp +++ b/effects/test_thumbnail.cpp @@ -32,7 +32,7 @@ void TestThumbnailEffect::paintScreen( int mask, QRegion region, ScreenPaintData effects->paintScreen( mask, region, data ); if( active_window != NULL && region.contains( thumbnailRect())) { - WindowPaintData data; + WindowPaintData data( active_window ); QRect region; setPositionTransformations( data, region, active_window, thumbnailRect(), Qt::KeepAspectRatio ); effects->drawWindow( active_window, diff --git a/effects/thumbnailaside.cpp b/effects/thumbnailaside.cpp index 87625d3258..53f72a4e93 100644 --- a/effects/thumbnailaside.cpp +++ b/effects/thumbnailaside.cpp @@ -38,7 +38,7 @@ void ThumbnailAsideEffect::paintScreen( int mask, QRegion region, ScreenPaintDat { if( region.contains( d.rect )) { - WindowPaintData data; + WindowPaintData data( d.window ); data.opacity = opacity; QRect region; setPositionTransformations( data, region, d.window, d.rect, Qt::KeepAspectRatio ); diff --git a/lib/kwineffects.cpp b/lib/kwineffects.cpp index 7ba07c392a..643f7ab344 100644 --- a/lib/kwineffects.cpp +++ b/lib/kwineffects.cpp @@ -35,8 +35,8 @@ void WindowPrePaintData::setTransformed() } -WindowPaintData::WindowPaintData() - : opacity( 1.0 ) +WindowPaintData::WindowPaintData( EffectWindow* w ) + : opacity( w->opacity()) , contents_opacity( 1.0 ) , decoration_opacity( 1.0 ) , xScale( 1 ) @@ -46,6 +46,7 @@ WindowPaintData::WindowPaintData() , saturation( 1 ) , brightness( 1 ) { + quads = w->buildQuads(); } ScreenPaintData::ScreenPaintData() diff --git a/lib/kwineffects.h b/lib/kwineffects.h index e52fa2b06a..d8b5e70e83 100644 --- a/lib/kwineffects.h +++ b/lib/kwineffects.h @@ -346,6 +346,9 @@ class KWIN_EXPORT EffectWindow virtual EffectWindowList mainWindows() const = 0; virtual void setShader(GLShader* shader) = 0; + + // TODO internal? + virtual WindowQuadList buildQuads() const = 0; }; class KWIN_EXPORT EffectWindowGroup @@ -450,7 +453,7 @@ class KWIN_EXPORT WindowPrePaintData class KWIN_EXPORT WindowPaintData { public: - WindowPaintData(); + WindowPaintData( EffectWindow* w ); /** * Window opacity, in range 0 = transparent to 1 = fully opaque * Opacity for contents is opacity*contents_opacity, the same diff --git a/scene.cpp b/scene.cpp index d061a8ce2b..4331779f80 100644 --- a/scene.cpp +++ b/scene.cpp @@ -267,8 +267,7 @@ void Scene::paintSimpleScreen( int orig_mask, QRegion region ) void Scene::paintWindow( Window* w, int mask, QRegion region, WindowQuadList quads ) { - WindowPaintData data; - data.opacity = w->window()->opacity(); + WindowPaintData data( w->window()->effectWindow()); data.quads = quads; w->prepareForPainting(); effects->paintWindow( effectWindow( w ), mask, region, data );