diff --git a/abstract_wayland_output.h b/abstract_wayland_output.h --- a/abstract_wayland_output.h +++ b/abstract_wayland_output.h @@ -65,9 +65,8 @@ } virtual QSize pixelSize() const = 0; - qreal scale() const override { - return m_scale; - } + qreal scale() const override; + /** * The geometry of this output in global compositor co-ordinates (i.e scaled) */ @@ -125,9 +124,7 @@ return m_waylandOutputDevice; } - QPoint globalPos() const { - return m_globalPos; - } + QPoint globalPos() const; QSize rawPhysicalSize() const { return m_physicalSize; @@ -169,8 +166,6 @@ KWayland::Server::OutputInterface::DpmsMode m_dpms = KWayland::Server::OutputInterface::DpmsMode::On; - QPoint m_globalPos; - qreal m_scale = 1; QSize m_physicalSize; Qt::ScreenOrientation m_orientation = Qt::PrimaryOrientation; bool m_internal = false; diff --git a/abstract_wayland_output.cpp b/abstract_wayland_output.cpp --- a/abstract_wayland_output.cpp +++ b/abstract_wayland_output.cpp @@ -54,7 +54,12 @@ QRect AbstractWaylandOutput::geometry() const { - return QRect(m_globalPos, pixelSize() / scale()); + // TODO: This is inefficient on current KWayland since + // we loop over modes. +// const QSize size = m_waylandOutputDevice->pixelSize(); + const QSize size = pixelSize(); + + return QRect(globalPos(), size / scale()); } QSize AbstractWaylandOutput::physicalSize() const @@ -70,9 +75,13 @@ return m_waylandOutput->refreshRate(); } +QPoint AbstractWaylandOutput::globalPos() const +{ + return m_waylandOutputDevice->globalPosition(); +} + void AbstractWaylandOutput::setGlobalPos(const QPoint &pos) { - m_globalPos = pos; m_waylandOutputDevice->setGlobalPosition(pos); if (m_waylandOutput) { @@ -84,9 +93,13 @@ } } +qreal AbstractWaylandOutput::scale() const +{ + return m_waylandOutputDevice->scaleF(); +} + void AbstractWaylandOutput::setScale(qreal scale) { - m_scale = scale; m_waylandOutputDevice->setScaleF(scale); if (m_waylandOutput) { @@ -99,7 +112,7 @@ m_waylandOutput->setScale(std::ceil(scale)); } if (m_xdgOutput) { - m_xdgOutput->setLogicalSize(pixelSize() / m_scale); + m_xdgOutput->setLogicalSize(pixelSize() / scale); m_xdgOutput->done(); } } @@ -172,7 +185,7 @@ } m_xdgOutput = waylandServer()->xdgOutputManager()->createXdgOutput(m_waylandOutput, m_waylandOutput); m_xdgOutput->setLogicalSize(pixelSize() / scale()); - m_xdgOutput->setLogicalPosition(m_globalPos); + m_xdgOutput->setLogicalPosition(globalPos()); m_xdgOutput->done(); }