diff --git a/effects.cpp b/effects.cpp --- a/effects.cpp +++ b/effects.cpp @@ -32,7 +32,6 @@ #include "group.h" #include "osd.h" #include "pointer_input.h" -#include "scene_qpainter.h" #include "unmanaged.h" #ifdef KWIN_BUILD_TABBOX #include "tabbox.h" @@ -1328,11 +1327,7 @@ QPainter *EffectsHandlerImpl::scenePainter() { - if (SceneQPainter *s = dynamic_cast(m_scene)) { - return s->painter(); - } else { - return NULL; - } + return m_scene->scenePainter(); } void EffectsHandlerImpl::toggleEffect(const QString& name) diff --git a/scene.h b/scene.h --- a/scene.h +++ b/scene.h @@ -163,6 +163,12 @@ **/ virtual xcb_render_picture_t xrenderBufferPicture() const; + /** + * The QPainter used by a QPainter based compositor scene. + * Default implementation returns @c nullptr; + **/ + virtual QPainter *scenePainter() const; + Q_SIGNALS: void frameRendered(); diff --git a/scene.cpp b/scene.cpp --- a/scene.cpp +++ b/scene.cpp @@ -657,6 +657,11 @@ return XCB_RENDER_PICTURE_NONE; } +QPainter *Scene::scenePainter() const +{ + return nullptr; +} + //**************************************** // Scene::Window //**************************************** diff --git a/scene_qpainter.h b/scene_qpainter.h --- a/scene_qpainter.h +++ b/scene_qpainter.h @@ -123,7 +123,7 @@ return false; } - QPainter *painter(); + QPainter *scenePainter() const override; QPainterBackend *backend() const { return m_backend.data(); @@ -252,7 +252,7 @@ } inline -QPainter* SceneQPainter::painter() +QPainter* SceneQPainter::scenePainter() const { return m_painter.data(); } diff --git a/scene_qpainter.cpp b/scene_qpainter.cpp --- a/scene_qpainter.cpp +++ b/scene_qpainter.cpp @@ -281,7 +281,7 @@ toplevel->resetDamage(); } - QPainter *scenePainter = m_scene->painter(); + QPainter *scenePainter = m_scene->scenePainter(); QPainter *painter = scenePainter; painter->save(); painter->setClipRegion(region); @@ -523,7 +523,7 @@ if (m_effectFrame->geometry().isEmpty()) { return; // Nothing to display } - QPainter *painter = m_scene->painter(); + QPainter *painter = m_scene->scenePainter(); // Render the actual frame