diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/kernel/qhighdpiscaling_p.h | 16 | ||||
-rw-r--r-- | src/gui/kernel/qplatformwindow.cpp | 8 | ||||
-rw-r--r-- | src/gui/kernel/qwindow.cpp | 10 | ||||
-rw-r--r-- | src/gui/kernel/qwindowsysteminterface.cpp | 8 |
4 files changed, 26 insertions, 16 deletions
diff --git a/src/gui/kernel/qhighdpiscaling_p.h b/src/gui/kernel/qhighdpiscaling_p.h index c0aac7e646..f7cf4792f2 100644 --- a/src/gui/kernel/qhighdpiscaling_p.h +++ b/src/gui/kernel/qhighdpiscaling_p.h @@ -279,6 +279,22 @@ T toNativeGlobalPosition(const T &value, const C *context) return scale(value, so.factor, so.origin); } +template <typename T, typename C> +T fromNativeWindowGeometry(const T &value, const C *context) +{ + QHighDpiScaling::ScaleAndOrigin so = QHighDpiScaling::scaleAndOrigin(context); + QPoint effectiveOrigin = (context && context->isTopLevel()) ? so.origin : QPoint(0,0); + return scale(value, qreal(1) / so.factor, effectiveOrigin); +} + +template <typename T, typename C> +T toNativeWindowGeometry(const T &value, const C *context) +{ + QHighDpiScaling::ScaleAndOrigin so = QHighDpiScaling::scaleAndOrigin(context); + QPoint effectiveOrigin = (context && context->isTopLevel()) ? so.origin : QPoint(0,0); + return scale(value, so.factor, effectiveOrigin); +} + template <typename T> inline T fromNative(const T &value, qreal scaleFactor, QPoint origin = QPoint(0, 0)) { diff --git a/src/gui/kernel/qplatformwindow.cpp b/src/gui/kernel/qplatformwindow.cpp index 4b7d7f5b7e..f9e984c9cb 100644 --- a/src/gui/kernel/qplatformwindow.cpp +++ b/src/gui/kernel/qplatformwindow.cpp @@ -849,7 +849,7 @@ QSize QPlatformWindow::windowSizeIncrement() const */ QRect QPlatformWindow::windowGeometry() const { - return QHighDpi::toNativePixels(window()->geometry(), window()); + return QHighDpi::toNativeWindowGeometry(window()->geometry(), window()); } /*! @@ -857,7 +857,7 @@ QRect QPlatformWindow::windowGeometry() const */ QRect QPlatformWindow::windowFrameGeometry() const { - return QHighDpi::toNativePixels(window()->frameGeometry(), window()); + return QHighDpi::toNativeWindowGeometry(window()->frameGeometry(), window()); } /*! @@ -868,10 +868,10 @@ QRect QPlatformWindow::windowFrameGeometry() const QRectF QPlatformWindow::closestAcceptableGeometry(const QWindow *qWindow, const QRectF &nativeRect) { - const QRectF rectF = QHighDpi::fromNativePixels(nativeRect, qWindow); + const QRectF rectF = QHighDpi::fromNativeWindowGeometry(nativeRect, qWindow); const QRectF correctedGeometryF = qt_window_private(const_cast<QWindow *>(qWindow))->closestAcceptableGeometry(rectF); return !correctedGeometryF.isEmpty() && rectF != correctedGeometryF - ? QHighDpi::toNativePixels(correctedGeometryF, qWindow) : nativeRect; + ? QHighDpi::toNativeWindowGeometry(correctedGeometryF, qWindow) : nativeRect; } QRectF QPlatformWindow::windowClosestAcceptableGeometry(const QRectF &nativeRect) const diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index be1e3532fd..867e658be5 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -1784,9 +1784,7 @@ QRect QWindow::geometry() const Q_D(const QWindow); if (d->platformWindow) { const auto nativeGeometry = d->platformWindow->geometry(); - return isTopLevel() - ? QHighDpi::fromNativePixels(nativeGeometry, this) - : QHighDpi::fromNativeLocalPosition(nativeGeometry, this); + return QHighDpi::fromNativeWindowGeometry(nativeGeometry, this); } return d->geometry; } @@ -1816,7 +1814,7 @@ QRect QWindow::frameGeometry() const Q_D(const QWindow); if (d->platformWindow) { QMargins m = frameMargins(); - return QHighDpi::fromNativePixels(d->platformWindow->geometry(), this).adjusted(-m.left(), -m.top(), m.right(), m.bottom()); + return QHighDpi::fromNativeWindowGeometry(d->platformWindow->geometry(), this).adjusted(-m.left(), -m.top(), m.right(), m.bottom()); } return d->geometry; } @@ -1833,7 +1831,7 @@ QPoint QWindow::framePosition() const Q_D(const QWindow); if (d->platformWindow) { QMargins margins = frameMargins(); - return QHighDpi::fromNativePixels(d->platformWindow->geometry().topLeft(), this) - QPoint(margins.left(), margins.top()); + return QHighDpi::fromNativeWindowGeometry(d->platformWindow->geometry().topLeft(), this) - QPoint(margins.left(), margins.top()); } return d->geometry.topLeft(); } @@ -1851,7 +1849,7 @@ void QWindow::setFramePosition(const QPoint &point) d->positionPolicy = QWindowPrivate::WindowFrameInclusive; d->positionAutomatic = false; if (d->platformWindow) { - d->platformWindow->setGeometry(QHighDpi::toNativePixels(QRect(point, size()), this)); + d->platformWindow->setGeometry(QHighDpi::toNativeWindowGeometry(QRect(point, size()), this)); } else { d->geometry.moveTopLeft(point); } diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index b32d9d9926..14c071b4d9 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -300,18 +300,14 @@ QWindowSystemInterfacePrivate::GeometryChangeEvent::GeometryChangeEvent(QWindow { if (const QPlatformWindow *pw = window->handle()) { const auto nativeGeometry = pw->QPlatformWindow::geometry(); - requestedGeometry = window->isTopLevel() - ? QHighDpi::fromNativePixels(nativeGeometry, window) - : QHighDpi::fromNativeLocalPosition(nativeGeometry, window); + requestedGeometry = QHighDpi::fromNativeWindowGeometry(nativeGeometry, window); } } QT_DEFINE_QPA_EVENT_HANDLER(void, handleGeometryChange, QWindow *window, const QRect &newRect) { Q_ASSERT(window); - const auto newRectDi = window->isTopLevel() - ? QHighDpi::fromNativePixels(newRect, window) - : QHighDpi::fromNativeLocalPosition(newRect, window); + const auto newRectDi = QHighDpi::fromNativeWindowGeometry(newRect, window); auto e = new QWindowSystemInterfacePrivate::GeometryChangeEvent(window, newRectDi); if (window->handle()) { // Persist the new geometry so that QWindow::geometry() can be queried in the resize event |