Proper screen change handling for devicePixelRatio
We need to make sure that we know which screen we are on, and use the correct devicePixelRatio, depending on the screen. Task-number: QTBUG-45076 Change-Id: Ic56ad4ca8a807d584ce4938b64905ce4dd10f7aa Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>bb10
parent
d425563bac
commit
08f268ba22
|
|
@ -318,6 +318,12 @@ void QXcbWindow::create()
|
|||
// currently no way to implement it for frame-exclusive geometries.
|
||||
QRect rect = window()->geometry();
|
||||
QPlatformWindow::setGeometry(rect);
|
||||
QXcbScreen *currentScreen = xcbScreen();
|
||||
QPlatformScreen *newScreen = screenForGeometry(rect);
|
||||
|
||||
if (newScreen != currentScreen)
|
||||
QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->screen());
|
||||
|
||||
const int dpr = int(devicePixelRatio());
|
||||
|
||||
QSize minimumSize = window()->minimumSize();
|
||||
|
|
@ -582,9 +588,18 @@ void QXcbWindow::setGeometry(const QRect &rect)
|
|||
|
||||
propagateSizeHints();
|
||||
|
||||
const QRect xRect = mapToNative(rect, int(devicePixelRatio()));
|
||||
QXcbScreen *currentScreen = xcbScreen();
|
||||
QPlatformScreen *newScreen = screenForGeometry(rect);
|
||||
if (!newScreen)
|
||||
newScreen = currentScreen;
|
||||
|
||||
const QRect xRect = mapToNative(rect, int(newScreen->devicePixelRatio()));
|
||||
const QRect wmGeometry = windowToWmGeometry(xRect);
|
||||
|
||||
|
||||
if (newScreen != currentScreen)
|
||||
QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->screen());
|
||||
|
||||
if (qt_window_private(window())->positionAutomatic) {
|
||||
const quint32 mask = XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT;
|
||||
const qint32 values[] = {
|
||||
|
|
@ -1858,7 +1873,7 @@ void QXcbWindow::handleConfigureNotifyEvent(const xcb_configure_notify_event_t *
|
|||
if (newScreen != screen()) {
|
||||
if (newScreen)
|
||||
QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->screen());
|
||||
int newDpr = devicePixelRatio();
|
||||
int newDpr = newScreen->devicePixelRatio();
|
||||
if (newDpr != dpr) {
|
||||
QRect newRect = mapGeometryFromNative(nativeRect, newDpr);
|
||||
QPlatformWindow::setGeometry(newRect);
|
||||
|
|
|
|||
Loading…
Reference in New Issue