diff options
author | Morten Johan Sørvig <morten.sorvig@qt.io> | 2017-06-02 11:37:53 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2017-07-09 10:02:53 +0000 |
commit | 0e0034d93a88d1871bfea813cbe48a4deeafb7dd (patch) | |
tree | eff5d825820205039897ca22b2ede14866c77d7c /src/plugins/platforms/cocoa/qcocoawindow.mm | |
parent | 6be94e8f6d95091944e1a752362eb92e566de390 (diff) |
macOS: Simplify QCocoaWindow::handleGeometryChange
There are really only two cases here, where the difference
is the coordinate system of the window position.
1) Child QWindow and embedded QWindow:
The position is relative to parent view/window origin.
2) Top-level QWindow:
The position is relative to screen origin.
Change-Id: I867133a5adbbf3a690f574aec06b70c2bc64ad95
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoawindow.mm')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.mm | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index af9f6da37c..3d8d4d35be 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -1043,19 +1043,18 @@ void QCocoaWindow::handleGeometryChange() if (m_inSetStyleMask && !m_view.window) return; + const bool isEmbedded = m_viewIsToBeEmbedded || m_viewIsEmbedded; + QRect newGeometry; + if (isContentView() && !isEmbedded) { + // Content views are positioned at (0, 0) in the window, so we resolve via the window + CGRect contentRect = [m_view.window contentRectForFrameRect:m_view.window.frame]; - if (isContentView()) { - // Top level window, get window rect and flip y - NSRect rect = m_view.frame; - NSRect windowRect = m_view.window.frame; - newGeometry = QRect(windowRect.origin.x, qt_mac_flipYCoordinate(windowRect.origin.y + rect.size.height), rect.size.width, rect.size.height); - } else if (m_viewIsToBeEmbedded) { - // Embedded child window, use the frame rect ### merge with case below - newGeometry = QRectF::fromCGRect(NSRectToCGRect(m_view.bounds)).toRect(); + // The result above is in native screen coordinates, so remap to the Qt coordinate system + newGeometry = QCocoaScreen::primaryScreen()->mapFromNative(QRectF::fromCGRect(contentRect)).toRect(); } else { - // Child window, use the frame rect - newGeometry = QRectF::fromCGRect(NSRectToCGRect(m_view.frame)).toRect(); + // QNSView has isFlipped set, so no need to remap the geometry + newGeometry = QRectF::fromCGRect(m_view.frame).toRect(); } qCDebug(lcQpaCocoaWindow) << "QCocoaWindow::handleGeometryChange" << window() |