From 4c9758f1af604e571054856017afd71bd17c9f82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Mon, 4 Mar 2019 22:23:20 +0100 Subject: QHighDpi: Simplify top-level window handling code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduce origin(QWindow *), which returns the point around which coordinates should be scaled: the screen origin for top-level windows, and (0, 0) for child windows. The code paths for top-level and child windows can then be combined. Change-Id: I6b9cdbd9e7c2d9406e9137e325c4eb5c79e3ac9a Reviewed-by: Friedemann Kleint Reviewed-by: Tor Arne Vestbø --- src/gui/kernel/qhighdpiscaling.cpp | 8 +++++ src/gui/kernel/qhighdpiscaling_p.h | 61 +++++++++++++------------------------- 2 files changed, 29 insertions(+), 40 deletions(-) diff --git a/src/gui/kernel/qhighdpiscaling.cpp b/src/gui/kernel/qhighdpiscaling.cpp index 4b85973e92..4f8e9a3817 100644 --- a/src/gui/kernel/qhighdpiscaling.cpp +++ b/src/gui/kernel/qhighdpiscaling.cpp @@ -492,5 +492,13 @@ QPoint QHighDpiScaling::origin(const QPlatformScreen *platformScreen) return platformScreen->geometry().topLeft(); } +QPoint QHighDpiScaling::origin(const QWindow *window) +{ + if (window && window->isTopLevel() && window->screen()) + return window->screen()->geometry().topLeft(); + + return QPoint(0, 0); +} + #endif //QT_NO_HIGHDPISCALING QT_END_NAMESPACE diff --git a/src/gui/kernel/qhighdpiscaling_p.h b/src/gui/kernel/qhighdpiscaling_p.h index 28cf7de75b..ca35f60457 100644 --- a/src/gui/kernel/qhighdpiscaling_p.h +++ b/src/gui/kernel/qhighdpiscaling_p.h @@ -83,6 +83,7 @@ public: static qreal factor(const QPlatformScreen *platformScreen); static QPoint origin(const QScreen *screen); static QPoint origin(const QPlatformScreen *platformScreen); + static QPoint origin(const QWindow *window); static QPoint mapPositionToNative(const QPoint &pos, const QPlatformScreen *platformScreen); static QPoint mapPositionFromNative(const QPoint &pos, const QPlatformScreen *platformScreen); static QPoint mapPositionToGlobal(const QPoint &pos, const QPoint &windowGlobalPosition, const QWindow *window); @@ -237,12 +238,10 @@ inline QRect toNativePixels(const QRect &pointRect, const QScreen *screen) inline QRect fromNativePixels(const QRect &pixelRect, const QWindow *window) { - if (window && window->isTopLevel() && window->screen()) { - return fromNativePixels(pixelRect, window->screen()); - } else { - const qreal scaleFactor = QHighDpiScaling::factor(window); - return QRect(pixelRect.topLeft() / scaleFactor, fromNative(pixelRect.size(), scaleFactor)); - } + const qreal scaleFactor = QHighDpiScaling::factor(window); + const QPoint origin = QHighDpiScaling::origin(window); + return QRect(fromNative(pixelRect.topLeft(), scaleFactor, origin), + fromNative(pixelRect.size(), scaleFactor)); } inline QRectF toNativePixels(const QRectF &pointRect, const QScreen *screen) @@ -255,12 +254,10 @@ inline QRectF toNativePixels(const QRectF &pointRect, const QScreen *screen) inline QRect toNativePixels(const QRect &pointRect, const QWindow *window) { - if (window && window->isTopLevel() && window->screen()) { - return toNativePixels(pointRect, window->screen()); - } else { - const qreal scaleFactor = QHighDpiScaling::factor(window); - return QRect(pointRect.topLeft() * scaleFactor, toNative(pointRect.size(), scaleFactor)); - } + const qreal scaleFactor = QHighDpiScaling::factor(window); + const QPoint origin = QHighDpiScaling::origin(window); + return QRect(toNative(pointRect.topLeft(), scaleFactor, origin), + toNative(pointRect.size(), scaleFactor)); } inline QRectF fromNativePixels(const QRectF &pixelRect, const QScreen *screen) @@ -273,22 +270,18 @@ inline QRectF fromNativePixels(const QRectF &pixelRect, const QScreen *screen) inline QRectF fromNativePixels(const QRectF &pixelRect, const QWindow *window) { - if (window && window->isTopLevel() && window->screen()) { - return fromNativePixels(pixelRect, window->screen()); - } else { - const qreal scaleFactor = QHighDpiScaling::factor(window); - return QRectF(pixelRect.topLeft() / scaleFactor, pixelRect.size() / scaleFactor); - } + const qreal scaleFactor = QHighDpiScaling::factor(window); + const QPoint origin = QHighDpiScaling::origin(window); + return QRectF(fromNative(pixelRect.topLeft(), scaleFactor, origin), + fromNative(pixelRect.size(), scaleFactor)); } inline QRectF toNativePixels(const QRectF &pointRect, const QWindow *window) { - if (window && window->isTopLevel() && window->screen()) { - return toNativePixels(pointRect, window->screen()); - } else { - const qreal scaleFactor = QHighDpiScaling::factor(window); - return QRectF(pointRect.topLeft() * scaleFactor, pointRect.size() * scaleFactor); - } + const qreal scaleFactor = QHighDpiScaling::factor(window); + const QPoint origin = QHighDpiScaling::origin(window); + return QRectF(toNative(pointRect.topLeft(), scaleFactor, origin), + toNative(pointRect.size(), scaleFactor)); } inline QSize fromNativePixels(const QSize &pixelSize, const QWindow *window) @@ -318,10 +311,7 @@ inline QPoint fromNativePixels(const QPoint &pixelPoint, const QScreen *screen) inline QPoint fromNativePixels(const QPoint &pixelPoint, const QWindow *window) { - if (window && window->isTopLevel() && window->screen()) - return fromNativePixels(pixelPoint, window->screen()); - else - return pixelPoint / QHighDpiScaling::factor(window); + return fromNative(pixelPoint, QHighDpiScaling::factor(window), QHighDpiScaling::origin(window)); } inline QPoint toNativePixels(const QPoint &pointPoint, const QScreen *screen) @@ -331,10 +321,7 @@ inline QPoint toNativePixels(const QPoint &pointPoint, const QScreen *screen) inline QPoint toNativePixels(const QPoint &pointPoint, const QWindow *window) { - if (window && window->isTopLevel() && window->screen()) - return toNativePixels(pointPoint, window->screen()); - else - return pointPoint * QHighDpiScaling::factor(window); + return toNative(pointPoint, QHighDpiScaling::factor(window), QHighDpiScaling::origin(window)); } inline QPointF fromNativePixels(const QPointF &pixelPoint, const QScreen *screen) @@ -344,10 +331,7 @@ inline QPointF fromNativePixels(const QPointF &pixelPoint, const QScreen *screen inline QPointF fromNativePixels(const QPointF &pixelPoint, const QWindow *window) { - if (window && window->isTopLevel() && window->screen()) - return fromNativePixels(pixelPoint, window->screen()); - else - return pixelPoint / QHighDpiScaling::factor(window); + return fromNative(pixelPoint, QHighDpiScaling::factor(window), QHighDpiScaling::origin(window)); } inline QPointF toNativePixels(const QPointF &pointPoint, const QScreen *screen) @@ -357,10 +341,7 @@ inline QPointF toNativePixels(const QPointF &pointPoint, const QScreen *screen) inline QPointF toNativePixels(const QPointF &pointPoint, const QWindow *window) { - if (window && window->isTopLevel() && window->screen()) - return toNativePixels(pointPoint, window->screen()); - else - return pointPoint * QHighDpiScaling::factor(window); + return toNative(pointPoint, QHighDpiScaling::factor(window), QHighDpiScaling::origin(window)); } inline QMargins fromNativePixels(const QMargins &pixelMargins, const QWindow *window) -- cgit v1.2.3