From a8283fe4d9278cee1792587c7c842d3c7b04cf3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Thu, 21 Mar 2013 13:42:05 +0100 Subject: Implement [QNSView isOpaque] Re-use the QCocoaWindow implementation. This gives a small performance boost since NSWindow can skip drawing the background if it knows that the content view will fill with opaque pixels. Change-Id: I4a9a14135d890e9132dd1cb0af5a1c1a769d7e2f Reviewed-by: Gabriel de Dietrich --- src/plugins/platforms/cocoa/qcocoawindow.h | 3 +-- src/plugins/platforms/cocoa/qcocoawindow.mm | 21 ++++++++++----------- src/plugins/platforms/cocoa/qnsview.h | 1 + src/plugins/platforms/cocoa/qnsview.mm | 5 +++++ 4 files changed, 17 insertions(+), 13 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h index fdb3f4672f..c19017166b 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.h +++ b/src/plugins/platforms/cocoa/qcocoawindow.h @@ -109,6 +109,7 @@ public: void raise(); void lower(); bool isExposed() const; + bool isOpaque() const; void propagateSizeHints(); void setOpacity(qreal level); void setMask(const QRegion ®ion); @@ -161,8 +162,6 @@ protected: QCocoaWindow *parentCocoaWindow() const; void syncWindowState(Qt::WindowState newState); - void updateOpaque(); - // private: public: // for QNSView friend class QCocoaBackingStore; diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index a346dc9d4d..f9514f54d5 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -505,6 +505,14 @@ bool QCocoaWindow::isExposed() const return m_isExposed; } +bool QCocoaWindow::isOpaque() const +{ + bool translucent = (window()->format().alphaBufferSize() > 0 + || window()->opacity() < 1 + || (m_contentView && [m_contentView hasMask])); + return !translucent; +} + void QCocoaWindow::propagateSizeHints() { QCocoaAutoReleasePool pool; @@ -543,20 +551,11 @@ void QCocoaWindow::propagateSizeHints() } } -void QCocoaWindow::updateOpaque() -{ - bool translucent = window()->format().alphaBufferSize() > 0 - || window()->opacity() < 1 - || (m_contentView && [m_contentView hasMask]); - [m_nsWindow setOpaque:!translucent]; -} - - void QCocoaWindow::setOpacity(qreal level) { if (m_nsWindow) { [m_nsWindow setAlphaValue:level]; - updateOpaque(); + [m_nsWindow setOpaque: isOpaque()]; } } @@ -566,7 +565,7 @@ void QCocoaWindow::setMask(const QRegion ®ion) [m_nsWindow setBackgroundColor:[NSColor clearColor]]; [m_qtView setMaskRegion:®ion]; - updateOpaque(); + [m_nsWindow setOpaque: isOpaque()]; } bool QCocoaWindow::setKeyboardGrabEnabled(bool grab) diff --git a/src/plugins/platforms/cocoa/qnsview.h b/src/plugins/platforms/cocoa/qnsview.h index 5ccea3c387..e7ea3d8f8d 100644 --- a/src/plugins/platforms/cocoa/qnsview.h +++ b/src/plugins/platforms/cocoa/qnsview.h @@ -88,6 +88,7 @@ QT_END_NAMESPACE - (BOOL)acceptsFirstResponder; - (BOOL)becomeFirstResponder; - (BOOL)hasMask; +- (BOOL)isOpaque; - (void)resetMouseButtons; diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index d937ae4507..a16e6c837a 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -310,6 +310,11 @@ static QTouchDevice *touchDevice = 0; return m_maskData != 0; } +- (BOOL) isOpaque +{ + return m_platformWindow->isOpaque(); +} + - (void) setMaskRegion:(const QRegion *)region { m_shouldInvalidateWindowShadow = true; -- cgit v1.2.3