From 1828caad33d78eb501aeda28534c6fe0a3162037 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 11 Jul 2017 18:19:08 +0200 Subject: [PATCH] macOS: Send expose event with individual rects instead of bounding rect MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I914521e1dfecb0157a8b9e1c9d9a86ca45e0826e Reviewed-by: Morten Johan Sørvig Reviewed-by: Tor Arne Vestbø --- src/plugins/platforms/cocoa/qnsview.mm | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index 2efbb85c88..73d308213d 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -428,11 +428,19 @@ static QTouchDevice *touchDevice = 0; - (void)drawRect:(NSRect)dirtyRect { + Q_UNUSED(dirtyRect); + if (!m_platformWindow) return; - qCDebug(lcQpaCocoaWindow) << "[QNSView drawRect:]" << m_platformWindow->window() - << QRectF::fromCGRect(NSRectToCGRect(dirtyRect)); + QRegion exposedRegion; + const NSRect *dirtyRects; + NSInteger numDirtyRects; + [self getRectsBeingDrawn:&dirtyRects count:&numDirtyRects]; + for (int i = 0; i < numDirtyRects; ++i) + exposedRegion += QRectF::fromCGRect(dirtyRects[i]).toRect(); + + qCDebug(lcQpaCocoaWindow) << "[QNSView drawRect:]" << m_platformWindow->window() << exposedRegion; #ifndef QT_NO_OPENGL if (m_glContext && m_shouldSetGLContextinDrawRect) { @@ -441,7 +449,7 @@ static QTouchDevice *touchDevice = 0; } #endif - m_platformWindow->handleExposeEvent(QRectF::fromCGRect(dirtyRect).toRect()); + m_platformWindow->handleExposeEvent(exposedRegion); } // Draws the backing store content to the QNSView using Core Graphics.