|
|
9da807d |
From 09215824f075813f9f09bbf840d1c367e9a3981e Mon Sep 17 00:00:00 2001
|
|
|
faff1df |
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
|
|
|
faff1df |
Date: Sat, 29 Jan 2022 21:59:33 +0200
|
|
|
9da807d |
Subject: [PATCH 05/31] Make sure QQuickWidget and its offscreen window's
|
|
|
faff1df |
screens are always in sync
|
|
|
faff1df |
|
|
|
faff1df |
By default, the offscreen window is placed on the primary screen.
|
|
|
faff1df |
However, if the parent widget argument is passed to the QQuickWidget's
|
|
|
faff1df |
constructor, then QQuickWidget's and the offscreen window's screens can
|
|
|
faff1df |
be different and that can create rendering issues, e.g. blurry text if
|
|
|
faff1df |
the primary screen and QQuickWidget's screen have different scale
|
|
|
faff1df |
factors.
|
|
|
faff1df |
|
|
|
faff1df |
Change-Id: I10c62b5635664f943b11828773f14017f198a770
|
|
|
faff1df |
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
|
|
faff1df |
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
faff1df |
(cherry picked from commit a2a2734bffa1459639b31fb3f4f83873ba44ab5c)
|
|
|
faff1df |
---
|
|
|
faff1df |
src/quickwidgets/qquickwidget.cpp | 26 +++++++++++---------------
|
|
|
faff1df |
1 file changed, 11 insertions(+), 15 deletions(-)
|
|
|
faff1df |
|
|
|
faff1df |
diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp
|
|
|
0134d56 |
index cf021d9a7c..c791f209cf 100644
|
|
|
faff1df |
--- a/src/quickwidgets/qquickwidget.cpp
|
|
|
faff1df |
+++ b/src/quickwidgets/qquickwidget.cpp
|
|
|
faff1df |
@@ -106,6 +106,7 @@ void QQuickWidgetPrivate::init(QQmlEngine* e)
|
|
|
faff1df |
|
|
|
faff1df |
renderControl = new QQuickWidgetRenderControl(q);
|
|
|
faff1df |
offscreenWindow = new QQuickWindow(*new QQuickOffcreenWindowPrivate(),renderControl);
|
|
|
faff1df |
+ offscreenWindow->setScreen(q->screen());
|
|
|
faff1df |
offscreenWindow->setTitle(QString::fromLatin1("Offscreen"));
|
|
|
faff1df |
offscreenWindow->setObjectName(QString::fromLatin1("QQuickOffScreenWindow"));
|
|
|
faff1df |
// Do not call create() on offscreenWindow.
|
|
|
faff1df |
@@ -901,9 +902,7 @@ void QQuickWidgetPrivate::createContext()
|
|
|
faff1df |
|
|
|
faff1df |
context = new QOpenGLContext;
|
|
|
faff1df |
context->setFormat(offscreenWindow->requestedFormat());
|
|
|
faff1df |
- const QWindow *win = q->window()->windowHandle();
|
|
|
faff1df |
- if (win && win->screen())
|
|
|
faff1df |
- context->setScreen(win->screen());
|
|
|
faff1df |
+ context->setScreen(q->screen());
|
|
|
faff1df |
QOpenGLContext *shareContext = qt_gl_global_share_context();
|
|
|
faff1df |
if (!shareContext)
|
|
|
faff1df |
shareContext = QWidgetPrivate::get(q->window())->shareContext();
|
|
|
0134d56 |
@@ -1527,19 +1526,16 @@ bool QQuickWidget::event(QEvent *e)
|
|
|
faff1df |
d->handleWindowChange();
|
|
|
faff1df |
break;
|
|
|
faff1df |
|
|
|
faff1df |
- case QEvent::ScreenChangeInternal:
|
|
|
faff1df |
- if (QWindow *window = this->window()->windowHandle()) {
|
|
|
faff1df |
- QScreen *newScreen = window->screen();
|
|
|
faff1df |
-
|
|
|
faff1df |
- if (d->offscreenWindow)
|
|
|
faff1df |
- d->offscreenWindow->setScreen(newScreen);
|
|
|
faff1df |
- if (d->offscreenSurface)
|
|
|
faff1df |
- d->offscreenSurface->setScreen(newScreen);
|
|
|
faff1df |
+ case QEvent::ScreenChangeInternal: {
|
|
|
faff1df |
+ QScreen *newScreen = screen();
|
|
|
faff1df |
+ if (d->offscreenWindow)
|
|
|
faff1df |
+ d->offscreenWindow->setScreen(newScreen);
|
|
|
faff1df |
+ if (d->offscreenSurface)
|
|
|
faff1df |
+ d->offscreenSurface->setScreen(newScreen);
|
|
|
faff1df |
#if QT_CONFIG(opengl)
|
|
|
faff1df |
- if (d->context)
|
|
|
faff1df |
- d->context->setScreen(newScreen);
|
|
|
faff1df |
+ if (d->context)
|
|
|
faff1df |
+ d->context->setScreen(newScreen);
|
|
|
faff1df |
#endif
|
|
|
faff1df |
- }
|
|
|
faff1df |
|
|
|
faff1df |
if (d->useSoftwareRenderer
|
|
|
faff1df |
#if QT_CONFIG(opengl)
|
|
|
0134d56 |
@@ -1552,7 +1548,7 @@ bool QQuickWidget::event(QEvent *e)
|
|
|
faff1df |
d->render(true);
|
|
|
faff1df |
}
|
|
|
faff1df |
break;
|
|
|
faff1df |
-
|
|
|
faff1df |
+ }
|
|
|
faff1df |
case QEvent::Show:
|
|
|
faff1df |
case QEvent::Move:
|
|
|
faff1df |
d->updatePosition();
|
|
|
faff1df |
--
|
|
|
9da807d |
2.43.0
|
|
|
faff1df |
|