diff --git a/abstract_output.h b/abstract_output.h --- a/abstract_output.h +++ b/abstract_output.h @@ -80,6 +80,11 @@ return m_orientation; } + /* + * Current refresh rate in 1/ms + */ + int refreshRate() const; + bool isInternal() const { return m_internal; } diff --git a/abstract_output.cpp b/abstract_output.cpp --- a/abstract_output.cpp +++ b/abstract_output.cpp @@ -65,6 +65,14 @@ return m_physicalSize; } +int AbstractOutput::refreshRate() const +{ + if (!m_waylandOutput) { + return 60000; + } + return m_waylandOutput->refreshRate(); +} + void AbstractOutput::setGlobalPos(const QPoint &pos) { m_globalPos = pos; diff --git a/outputscreens.h b/outputscreens.h --- a/outputscreens.h +++ b/outputscreens.h @@ -42,7 +42,8 @@ QRect geometry(int screen) const override; QSize size(int screen) const override; qreal scale(int screen) const override; - Qt::ScreenOrientation orientation(int screen) const; + float refreshRate(int screen) const override; + Qt::ScreenOrientation orientation(int screen) const override; void updateCount() override; int number(const QPoint &pos) const override; diff --git a/outputscreens.cpp b/outputscreens.cpp --- a/outputscreens.cpp +++ b/outputscreens.cpp @@ -93,6 +93,15 @@ return enOuts.at(screen)->physicalSize(); } +float OutputScreens::refreshRate(int screen) const +{ + const auto enOuts = m_platform->enabledOutputs(); + if (screen >= enOuts.size()) { + return Screens::refreshRate(screen); + } + return enOuts.at(screen)->refreshRate() / 1000.0f; +} + Qt::ScreenOrientation OutputScreens::orientation(int screen) const { const auto enOuts = m_platform->enabledOutputs(); diff --git a/plugins/platforms/drm/drm_output.h b/plugins/platforms/drm/drm_output.h --- a/plugins/platforms/drm/drm_output.h +++ b/plugins/platforms/drm/drm_output.h @@ -67,7 +67,6 @@ QSize pixelSize() const override; - int currentRefreshRate() const; // These values are defined by the kernel enum class DpmsMode { On = DRM_MODE_DPMS_ON, diff --git a/plugins/platforms/drm/drm_output.cpp b/plugins/platforms/drm/drm_output.cpp --- a/plugins/platforms/drm/drm_output.cpp +++ b/plugins/platforms/drm/drm_output.cpp @@ -781,15 +781,6 @@ setWaylandMode(); } -int DrmOutput::currentRefreshRate() const -{ - auto wlOutput = waylandOutput(); - if (!wlOutput) { - return 60000; - } - return wlOutput->refreshRate(); -} - QSize DrmOutput::pixelSize() const { auto orient = orientation(); diff --git a/plugins/platforms/drm/screens_drm.h b/plugins/platforms/drm/screens_drm.h --- a/plugins/platforms/drm/screens_drm.h +++ b/plugins/platforms/drm/screens_drm.h @@ -32,7 +32,6 @@ DrmScreens(DrmBackend *backend, QObject *parent = nullptr); virtual ~DrmScreens(); - float refreshRate(int screen) const override; bool supportsTransformations(int screen) const override; DrmBackend *m_backend; diff --git a/plugins/platforms/drm/screens_drm.cpp b/plugins/platforms/drm/screens_drm.cpp --- a/plugins/platforms/drm/screens_drm.cpp +++ b/plugins/platforms/drm/screens_drm.cpp @@ -34,15 +34,6 @@ DrmScreens::~DrmScreens() = default; -float DrmScreens::refreshRate(int screen) const -{ - const auto enOuts = m_backend->drmEnabledOutputs(); - if (screen >= enOuts.size()) { - return Screens::refreshRate(screen); - } - return enOuts.at(screen)->currentRefreshRate() / 1000.0f; -} - bool DrmScreens::supportsTransformations(int screen) const { const auto enOuts = m_backend->drmEnabledOutputs();