diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6377a15e54..802da3fd93 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -437,6 +437,7 @@ if(HAVE_WAYLAND)
${kwin_KDEINIT_SRCS}
abstract_backend.cpp
backends/fbdev/fb_backend.cpp
+ backends/fbdev/scene_qpainter_fb_backend.cpp
backends/fbdev/screens_fb.cpp
backends/wayland/screens_wayland.cpp
backends/x11/screens_x11windowed.cpp
diff --git a/backends/fbdev/fb_backend.cpp b/backends/fbdev/fb_backend.cpp
index ce4fb4e5b1..4cbbb8d33b 100644
--- a/backends/fbdev/fb_backend.cpp
+++ b/backends/fbdev/fb_backend.cpp
@@ -20,7 +20,7 @@ along with this program. If not, see .
#include "fb_backend.h"
#include "composite.h"
#include "logind.h"
-#include "scene_qpainter.h"
+#include "scene_qpainter_fb_backend.h"
#include "screens_fb.h"
#include "virtual_terminal.h"
// Qt
diff --git a/backends/fbdev/scene_qpainter_fb_backend.cpp b/backends/fbdev/scene_qpainter_fb_backend.cpp
new file mode 100644
index 0000000000..7399bad34c
--- /dev/null
+++ b/backends/fbdev/scene_qpainter_fb_backend.cpp
@@ -0,0 +1,105 @@
+/********************************************************************
+ KWin - the KDE window manager
+ This file is part of the KDE project.
+
+Copyright (C) 2015 Martin Gräßlin
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*********************************************************************/
+#include "scene_qpainter_fb_backend.h"
+#include "fb_backend.h"
+#include "composite.h"
+#include "cursor.h"
+#include "virtual_terminal.h"
+// Qt
+#include
+
+namespace KWin
+{
+FramebufferQPainterBackend::FramebufferQPainterBackend(FramebufferBackend *backend)
+ : QObject()
+ , QPainterBackend()
+ , m_renderBuffer(backend->size(), QImage::Format_RGB32)
+ , m_backend(backend)
+{
+ m_renderBuffer.fill(Qt::black);
+
+ m_backend->map();
+
+ m_backBuffer = QImage((uchar*)backend->mappedMemory(),
+ backend->bytesPerLine() / (backend->bitsPerPixel() / 8),
+ backend->bufferSize() / backend->bytesPerLine(),
+ backend->bytesPerLine(), backend->imageFormat());
+
+ m_backBuffer.fill(Qt::black);
+ connect(VirtualTerminal::self(), &VirtualTerminal::activeChanged, this,
+ [this] (bool active) {
+ if (active) {
+ Compositor::self()->bufferSwapComplete();
+ Compositor::self()->addRepaintFull();
+ } else {
+ Compositor::self()->aboutToSwapBuffers();
+ }
+ }
+ );
+}
+
+FramebufferQPainterBackend::~FramebufferQPainterBackend() = default;
+
+QImage *FramebufferQPainterBackend::buffer()
+{
+ return &m_renderBuffer;
+}
+
+bool FramebufferQPainterBackend::needsFullRepaint() const
+{
+ return false;
+}
+
+void FramebufferQPainterBackend::prepareRenderingFrame()
+{
+}
+
+void FramebufferQPainterBackend::present(int mask, const QRegion &damage)
+{
+ Q_UNUSED(mask)
+ Q_UNUSED(damage)
+ if (!VirtualTerminal::self()->isActive()) {
+ return;
+ }
+ QPainter p(&m_backBuffer);
+ p.drawImage(QPoint(0, 0), m_renderBuffer);
+}
+
+bool FramebufferQPainterBackend::usesOverlayWindow() const
+{
+ 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/backends/fbdev/scene_qpainter_fb_backend.h b/backends/fbdev/scene_qpainter_fb_backend.h
new file mode 100644
index 0000000000..f089533956
--- /dev/null
+++ b/backends/fbdev/scene_qpainter_fb_backend.h
@@ -0,0 +1,52 @@
+/********************************************************************
+ KWin - the KDE window manager
+ This file is part of the KDE project.
+
+Copyright (C) 2015 Martin Gräßlin
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*********************************************************************/
+#ifndef KWIN_SCENE_QPAINTER_FB_BACKEND_H
+#define KWIN_SCENE_QPAINTER_FB_BACKEND_H
+#include "scene_qpainter.h"
+
+#include
+
+namespace KWin
+{
+class FramebufferBackend;
+
+class FramebufferQPainterBackend : public QObject, public QPainterBackend
+{
+ Q_OBJECT
+public:
+ FramebufferQPainterBackend(FramebufferBackend *backend);
+ virtual ~FramebufferQPainterBackend();
+
+ QImage *buffer() override;
+ bool needsFullRepaint() const override;
+ bool usesOverlayWindow() const override;
+ void prepareRenderingFrame() override;
+ void present(int mask, const QRegion &damage) override;
+ void renderCursor(QPainter *painter) override;
+
+private:
+ QImage m_renderBuffer;
+ QImage m_backBuffer;
+ FramebufferBackend *m_backend;
+};
+
+}
+
+#endif
diff --git a/scene_qpainter.cpp b/scene_qpainter.cpp
index dc13b42447..f9e01e08e0 100644
--- a/scene_qpainter.cpp
+++ b/scene_qpainter.cpp
@@ -28,8 +28,6 @@ along with this program. If not, see .
#include "screens.h"
#include "toplevel.h"
#if HAVE_WAYLAND
-#include "backends/fbdev/fb_backend.h"
-#include "virtual_terminal.h"
#include "backends/wayland/wayland_backend.h"
#include "wayland_server.h"
#include "backends/x11/x11windowed_backend.h"
@@ -266,84 +264,6 @@ bool X11WindowedQPainterBackend::usesOverlayWindow() const
return false;
}
-//****************************************
-// FramebufferBackend
-//****************************************
-FramebufferQPainterBackend::FramebufferQPainterBackend(FramebufferBackend *backend)
- : QObject()
- , QPainterBackend()
- , m_renderBuffer(backend->size(), QImage::Format_RGB32)
- , m_backend(backend)
-{
- m_renderBuffer.fill(Qt::black);
-
- m_backend->map();
-
- m_backBuffer = QImage((uchar*)backend->mappedMemory(),
- backend->bytesPerLine() / (backend->bitsPerPixel() / 8),
- backend->bufferSize() / backend->bytesPerLine(),
- backend->bytesPerLine(), backend->imageFormat());
-
- m_backBuffer.fill(Qt::black);
- connect(VirtualTerminal::self(), &VirtualTerminal::activeChanged, this,
- [this] (bool active) {
- if (active) {
- Compositor::self()->bufferSwapComplete();
- Compositor::self()->addRepaintFull();
- } else {
- Compositor::self()->aboutToSwapBuffers();
- }
- }
- );
-}
-
-FramebufferQPainterBackend::~FramebufferQPainterBackend() = default;
-
-QImage *FramebufferQPainterBackend::buffer()
-{
- return &m_renderBuffer;
-}
-
-bool FramebufferQPainterBackend::needsFullRepaint() const
-{
- return false;
-}
-
-void FramebufferQPainterBackend::prepareRenderingFrame()
-{
-}
-
-void FramebufferQPainterBackend::present(int mask, const QRegion &damage)
-{
- Q_UNUSED(mask)
- Q_UNUSED(damage)
- if (!VirtualTerminal::self()->isActive()) {
- return;
- }
- QPainter p(&m_backBuffer);
- p.drawImage(QPoint(0, 0), m_renderBuffer);
-}
-
-bool FramebufferQPainterBackend::usesOverlayWindow() const
-{
- 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();
-}
-
#endif
//****************************************
diff --git a/scene_qpainter.h b/scene_qpainter.h
index d0d762e48b..2908907842 100644
--- a/scene_qpainter.h
+++ b/scene_qpainter.h
@@ -44,7 +44,6 @@ namespace Wayland
{
class WaylandBackend;
}
-class FramebufferBackend;
class X11WindowedBackend;
class QPainterBackend
@@ -167,26 +166,6 @@ private:
X11WindowedBackend *m_backend;
};
-class FramebufferQPainterBackend : public QObject, public QPainterBackend
-{
- Q_OBJECT
-public:
- FramebufferQPainterBackend(FramebufferBackend *backend);
- virtual ~FramebufferQPainterBackend();
-
- QImage *buffer() override;
- bool needsFullRepaint() const override;
- bool usesOverlayWindow() const override;
- void prepareRenderingFrame() override;
- void present(int mask, const QRegion &damage) override;
- void renderCursor(QPainter *painter) override;
-
-private:
- QImage m_renderBuffer;
- QImage m_backBuffer;
- FramebufferBackend *m_backend;
-};
-
#endif
class SceneQPainter : public Scene