summaryrefslogtreecommitdiffstats
path: root/src/core/render_widget_host_view_qt.cpp
diff options
context:
space:
mode:
authorMartin Negyokru <negyokru@inf.u-szeged.hu>2022-08-24 14:42:38 +0200
committerMartin Negyokru <negyokru@inf.u-szeged.hu>2022-09-02 18:15:13 +0200
commitecfa2f0973680332d6ab04adce471f4dd85f1422 (patch)
treefb18d090e5a16f65972b625bff158cf1104abca8 /src/core/render_widget_host_view_qt.cpp
parent945398a4a76245682cd03e45beabd38d766476c3 (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.cpp54
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)