Description
Super task for work related to the new QtGui APIs in Qt 5, as well as making the QtWidgets module run on top of the new QtGui layers, and the necessary API refactors / additions needed in Qt Lighthouse.
Short overview:
QWindow now becomes the core window abstraction, representing a surface or window in the windowing system. QWindow is backed by QPlatformWindow which is implemented in the Lighthouse plugins. QWidget instead of talking directly to the windowing system sits on top of QWindow (though we might explore the option for QWidget to speak directly to QPlatformWindow to prevent cluttering the QWindow API). QWindow can be raster or OpenGL based, depending on the surface type (QWindow::SurfaceType). QSurfaceFormat describes the format of the window, primarily for the OpenGL use case, but also for raster when wanting to create a window with an alpha buffer to support translucent backgrounds. QWindow can be accessed via QWidget::windowHandle().
QGuiGLContext, backed by QPlatformGLContext, represents a GL context which can be created independently from QWindow, also based on a QSurfaceFormat. QGuiGLContext can be made current on a QSurface, which is the sub-classed by QWindow, and potentially also an offscreen surface class in the future. A single QGuiGLContext can be current on multiple QSurfaces at different times. QGuiGLContext can be accessed via QGLContext::contextHandle().
QBackingStore, backed by QPlatformBackingStore, is used to paint to a raster based QWindow. It has a back buffer and supports partial updates to that back buffer via the QPainter API, as well as flushing the back buffer to the window itself.
The Windows, Cocoa, and X11 backends of Qt 4.x will be replaced by Lighthouse plugins. XCB is used instead of Xlib for the X11 plugin.