qt6-bb10/tests/auto/widgets/kernel
Tor Arne Vestbø eb4cb71925 widgets: Use per-surface-format RHI support and compositor
The RHI support and compositor in QPlatformBackingStore were
tied to the surface format of the top level window owning
the backing store.

This meant that inserting an RHI-enabled widget (QRhiWidget,
QOpenGLWidget, QQuickWidget, QWebEngineView) into the widget
hierarchy required recreating the top level window with a
matching surface format that could support the RHI composition.

It also meant that we could not have two RHI enabled widgets
with different surface format requirements (Metal and OpenGL
for example) in the same top level widget hierarchy.

The recreation of the window had various visual side effects,
such as temporarily switching out of full screen state, or the
widget rendering a frame of black, as well as more serious
problems such as not correctly restoring the window geometry.

In addition, if client code had pulled out the winId() of the
window, and did not invalidate these references on window
destruction via QEvent::WinIdChange or QEvent::PlatformSurface,
the client would reference stale window handles. Although
this is a programming error (QWidget::winId() specifically
mentions this requirement), we should avoid recreation if
we can.

We were already supporting flushing the backingstore to
individual native child widgets, but always did so via a
single RHI managed by the platform backingstore. By
expanding QPlatformBackingStore to keep one set of RHI
support and compositor per surface format, we can refine
the logic in QWidget and QWidgetRepaintManager to not
require recreating the top level. Native child widgets
are then flushed independently, including any RHI textures
and raster content that overlaps with the widget.

We still assume that a single RHI support and compositor
can be be used for multiple windows, as long as those
windows have the same surface format. In the future, if
needed, we can refine this to use one set per surface
format e.g.

Fixes: QTBUG-119221
Fixes: QTBUG-121181
Fixes: QTBUG-120096
Task-number: QTBUG-115652
Task-number: QTBUG-108344
Task-number: QTBUG-113557
Task-number: QTBUG-119309
Change-Id: I2635ed3d20c2fb76eab3b8130007dd656a0b93e5
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2024-06-01 00:24:34 +02:00
..
qaction tst_QAction::disableShortcutsWithBlockedWidgets remove setActiveWindow 2024-04-30 18:30:16 +02:00
qactiongroup Change license for tests files 2024-02-04 09:56:42 +01:00
qapplication ColorScheme: make QStyleHints::colorScheme writable for applications 2024-05-10 01:15:12 +02:00
qboxlayout Remove extra semi-colons 2024-02-06 20:17:18 +09:00
qformlayout Change license for tests files 2024-02-04 09:56:42 +01:00
qgesturerecognizer Change license for tests files 2024-02-04 09:56:42 +01:00
qgridlayout Change license for tests files 2024-02-04 09:56:42 +01:00
qlayout QLayout: Consume ChildRemoved event, when layout is disabled 2024-04-10 19:01:06 +00:00
qshortcut tst_QShortcut::duplicatedShortcutOverride() remove setActiveWindow() 2024-04-26 17:37:57 +02:00
qsizepolicy Change license for tests files 2024-02-04 09:56:42 +01:00
qstackedlayout tst_QStackedLayout::keepFocusAfterSetCurrent() remove setActiveWindow() 2024-05-06 16:29:02 +02:00
qtooltip tst_QTooltip::qtbug64550_stylesheet() remove setActiveWindow() 2024-04-26 18:19:37 +02:00
qwidget Widgets focus abstraction: Fix re-parenting 2024-05-23 01:12:32 +02:00
qwidget_window Move popup management from QApplication to QGuiApplication 2024-05-31 10:40:31 -07:00
qwidgetaction Change license for tests files 2024-02-04 09:56:42 +01:00
qwidgetmetatype Change license for tests files 2024-02-04 09:56:42 +01:00
qwidgetrepaintmanager widgets: Use per-surface-format RHI support and compositor 2024-06-01 00:24:34 +02:00
qwidgetsvariant Change license for tests files 2024-02-04 09:56:42 +01:00
qwindowcontainer Set focus to the window container when contained window gains focus 2024-04-22 16:01:01 +02:00
CMakeLists.txt tests: Remove remains of qmake conversion from CMakeLists.txt files 2023-02-17 21:56:49 +01:00