diff --git a/plugins/platforms/hwcomposer/egl_hwcomposer_backend.cpp b/plugins/platforms/hwcomposer/egl_hwcomposer_backend.cpp --- a/plugins/platforms/hwcomposer/egl_hwcomposer_backend.cpp +++ b/plugins/platforms/hwcomposer/egl_hwcomposer_backend.cpp @@ -130,6 +130,10 @@ qCWarning(KWIN_HWCOMPOSER) << "Error occurred while creating context " << error; return false; } + + const QSize overall = m_backend->size(); + glViewport(0, 0, overall.width(), overall.height()); + return true; } diff --git a/plugins/platforms/hwcomposer/hwcomposer_backend.h b/plugins/platforms/hwcomposer/hwcomposer_backend.h --- a/plugins/platforms/hwcomposer/hwcomposer_backend.h +++ b/plugins/platforms/hwcomposer/hwcomposer_backend.h @@ -80,11 +80,11 @@ Outputs outputs() const override; Outputs enabledOutputs() const override; - QSize size() const { - return screenSize(); - } + QSize size() const; QSize screenSize() const override; + int scale() const; + HwcomposerWindow *createSurface(); hwc_composer_device_1_t *device() const { diff --git a/plugins/platforms/hwcomposer/hwcomposer_backend.cpp b/plugins/platforms/hwcomposer/hwcomposer_backend.cpp --- a/plugins/platforms/hwcomposer/hwcomposer_backend.cpp +++ b/plugins/platforms/hwcomposer/hwcomposer_backend.cpp @@ -27,6 +27,8 @@ #include "wayland_server.h" // KWayland #include +// KDE +#include // Qt #include #include @@ -253,14 +255,30 @@ setReady(true); } -QSize HwcomposerBackend::screenSize() const +QSize HwcomposerBackend::size() const { if (m_output) { return m_output->pixelSize(); } return QSize(); } +QSize HwcomposerBackend::screenSize() const +{ + if (m_output) { + return m_output->pixelSize() / m_output->scale(); + } + return QSize(); +} + +int HwcomposerBackend::scale() const + { + if (m_output) { + return m_output->scale(); + } + return 1; +} + void HwcomposerBackend::initLights() { hw_module_t *lightsModule = nullptr; @@ -510,6 +528,9 @@ setInternal(true); setEnabled(true); setDpmsSupported(true); + + const auto outputGroup = kwinApp()->config()->group("HWComposerOutputs").group("0"); + setScale(outputGroup.readEntry("Scale", 1)); setWaylandMode(m_pixelSize, mode.refreshRate); }