diff --git a/plugins/platforms/fbdev/scene_qpainter_fb_backend.h b/plugins/platforms/fbdev/scene_qpainter_fb_backend.h --- a/plugins/platforms/fbdev/scene_qpainter_fb_backend.h +++ b/plugins/platforms/fbdev/scene_qpainter_fb_backend.h @@ -39,7 +39,6 @@ bool usesOverlayWindow() const override; void prepareRenderingFrame() override; void present(int mask, const QRegion &damage) override; - void renderCursor(QPainter *painter) override; private: QImage m_renderBuffer; diff --git a/plugins/platforms/fbdev/scene_qpainter_fb_backend.cpp b/plugins/platforms/fbdev/scene_qpainter_fb_backend.cpp --- a/plugins/platforms/fbdev/scene_qpainter_fb_backend.cpp +++ b/plugins/platforms/fbdev/scene_qpainter_fb_backend.cpp @@ -87,19 +87,4 @@ return false; } -void FramebufferQPainterBackend::renderCursor(QPainter *painter) -{ - if (!m_backend->usesSoftwareCursor()) { - return; - } - const QImage img = m_backend->softwareCursor(); - if (img.isNull()) { - return; - } - const QPoint cursorPos = Cursor::pos(); - const QPoint hotspot = m_backend->softwareCursorHotspot(); - painter->drawImage(cursorPos - hotspot, img); - m_backend->markCursorAsRendered(); -} - } diff --git a/plugins/platforms/virtual/scene_qpainter_virtual_backend.h b/plugins/platforms/virtual/scene_qpainter_virtual_backend.h --- a/plugins/platforms/virtual/scene_qpainter_virtual_backend.h +++ b/plugins/platforms/virtual/scene_qpainter_virtual_backend.h @@ -42,7 +42,6 @@ void prepareRenderingFrame() override; void present(int mask, const QRegion &damage) override; void screenGeometryChanged(const QSize &size) override; - void renderCursor(QPainter *painter) override; private: QImage m_backBuffer; diff --git a/plugins/platforms/virtual/scene_qpainter_virtual_backend.cpp b/plugins/platforms/virtual/scene_qpainter_virtual_backend.cpp --- a/plugins/platforms/virtual/scene_qpainter_virtual_backend.cpp +++ b/plugins/platforms/virtual/scene_qpainter_virtual_backend.cpp @@ -70,19 +70,4 @@ return false; } -void VirtualQPainterBackend::renderCursor(QPainter *painter) -{ - if (!m_backend->usesSoftwareCursor()) { - return; - } - const QImage img = m_backend->softwareCursor(); - if (img.isNull()) { - return; - } - const QPoint cursorPos = Cursor::pos(); - const QPoint hotspot = m_backend->softwareCursorHotspot(); - painter->drawImage(cursorPos - hotspot, img); - m_backend->markCursorAsRendered(); -} - } diff --git a/scene_qpainter.h b/scene_qpainter.h --- a/scene_qpainter.h +++ b/scene_qpainter.h @@ -80,7 +80,6 @@ **/ virtual QImage *bufferForScreen(int screenId); virtual bool needsFullRepaint() const = 0; - virtual void renderCursor(QPainter *painter); /** * Whether the rendering needs to be split per screen. * Default implementation returns @c false. @@ -130,6 +129,7 @@ private: explicit SceneQPainter(QPainterBackend *backend, QObject *parent = nullptr); + void paintCursor(); QScopedPointer m_backend; QScopedPointer m_painter; class Window; diff --git a/scene_qpainter.cpp b/scene_qpainter.cpp --- a/scene_qpainter.cpp +++ b/scene_qpainter.cpp @@ -73,11 +73,6 @@ m_failed = true; } -void QPainterBackend::renderCursor(QPainter *painter) -{ - Q_UNUSED(painter) -} - bool QPainterBackend::perScreenRendering() const { return false; @@ -163,7 +158,7 @@ QRegion updateRegion, validRegion; paintScreen(&mask, damage.intersected(geometry), QRegion(), &updateRegion, &validRegion); overallUpdate = overallUpdate.united(updateRegion); - m_backend->renderCursor(m_painter.data()); + paintCursor(); m_painter->restore(); m_painter->end(); @@ -181,7 +176,7 @@ QRegion updateRegion, validRegion; paintScreen(&mask, damage, QRegion(), &updateRegion, &validRegion); - m_backend->renderCursor(m_painter.data()); + paintCursor(); m_backend->showOverlay(); m_painter->end(); @@ -200,6 +195,21 @@ m_painter->drawRects(region.rects()); } +void SceneQPainter::paintCursor() +{ + if (!kwinApp()->platform()->usesSoftwareCursor()) { + return; + } + const QImage img = kwinApp()->platform()->softwareCursor(); + if (img.isNull()) { + return; + } + const QPoint cursorPos = Cursor::pos(); + const QPoint hotspot = kwinApp()->platform()->softwareCursorHotspot(); + m_painter->drawImage(cursorPos - hotspot, img); + kwinApp()->platform()->markCursorAsRendered(); +} + Scene::Window *SceneQPainter::createWindow(Toplevel *toplevel) { return new SceneQPainter::Window(this, toplevel);