diff options
author | Martin Negyokru <negyokru@inf.u-szeged.hu> | 2022-08-24 14:42:38 +0200 |
---|---|---|
committer | Martin Negyokru <negyokru@inf.u-szeged.hu> | 2022-09-02 18:15:13 +0200 |
commit | ecfa2f0973680332d6ab04adce471f4dd85f1422 (patch) | |
tree | fb18d090e5a16f65972b625bff158cf1104abca8 /src/core/render_widget_host_view_qt.cpp | |
parent | 945398a4a76245682cd03e45beabd38d766476c3 (diff) |
Fix wrong scaling
Use inherited screen_infos_ in RenderWidgetHostViewQt.
Handle multiple screens.
Fixes: QTBUG-105955
Fixes: QTBUG-105960
Pick-to: 6.4
Change-Id: I6e5d04e29ff1e8bb9936cc3103960f27895904d6
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/core/render_widget_host_view_qt.cpp')
-rw-r--r-- | src/core/render_widget_host_view_qt.cpp | 54 |
1 files changed, 30 insertions, 24 deletions
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index 2de141bba..dfbbe72e7 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -92,16 +92,27 @@ static inline ui::GestureProvider::Config QtGestureProviderConfig() { extern display::Display toDisplayDisplay(int id, const QScreen *screen); -static display::ScreenInfo screenInfoFromQScreen(QScreen *screen) +static display::ScreenInfos screenInfosFromQtForUpdate(QScreen *currentScreen) { - display::ScreenInfo r; - if (!screen) - screen = qApp->primaryScreen(); - if (screen) - display::DisplayUtil::DisplayToScreenInfo(&r, toDisplayDisplay(0, screen)); - else - r.device_scale_factor = qGuiApp->devicePixelRatio(); - return r; + display::ScreenInfo screenInfo; + const auto &screens = qApp->screens(); + if (screens.isEmpty()) { + screenInfo.device_scale_factor = qGuiApp->devicePixelRatio(); + return display::ScreenInfos(screenInfo); + } + + Q_ASSERT(qApp->primaryScreen() == screens.first()); + display::ScreenInfos result; + for (int i = 0; i < screens.length(); ++i) { + display::DisplayUtil::DisplayToScreenInfo(&screenInfo, toDisplayDisplay(i, screens.at(i))); + result.screen_infos.push_back(screenInfo); + if (currentScreen == screens.at(i)) + result.current_display_id = i; + } + + Q_ASSERT(result.current_display_id != display::kInvalidDisplayId); + + return result; } // An minimal override to support progressing flings @@ -641,17 +652,6 @@ void RenderWidgetHostViewQt::UpdateTooltip(const std::u16string &tooltip_text) m_adapterClient->setToolTip(toQt(tooltip_text)); } -display::ScreenInfo RenderWidgetHostViewQt::GetScreenInfo() const -{ - return m_screenInfo; -} - -display::ScreenInfos RenderWidgetHostViewQt::GetScreenInfos() const -{ - // FIXME: Return more than the current screen. - return display::ScreenInfos(GetScreenInfo()); -} - gfx::Rect RenderWidgetHostViewQt::GetBoundsInRootWindow() { return toGfx(delegateClient()->windowRectInDips()); @@ -856,11 +856,17 @@ bool RenderWidgetHostViewQt::isPopup() const bool RenderWidgetHostViewQt::updateScreenInfo() { - display::ScreenInfo oldScreenInfo = m_screenInfo; - QScreen *screen = m_delegate->Window() ? m_delegate->Window()->screen() : nullptr; - m_screenInfo = screenInfoFromQScreen(screen); - return (m_screenInfo != oldScreenInfo); + QWindow *window = m_delegate->Window(); + if (!window) + return false; + + display::ScreenInfos newScreenInfos = screenInfosFromQtForUpdate(window->screen()); + if (screen_infos_ == newScreenInfos) + return false; + + screen_infos_ = std::move(newScreenInfos); + return true; } void RenderWidgetHostViewQt::handleWheelEvent(QWheelEvent *event) |