summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorMorten Johan Sørvig <morten.sorvig@digia.com>2013-03-21 13:42:05 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-03-22 07:16:25 +0100
commita8283fe4d9278cee1792587c7c842d3c7b04cf3d (patch)
tree09ece99f46b5be266c1f2964fd7d12c2e715c71e /src/plugins
parenta87e8f7a1070b357185dbbe69bf0b98a8da247b8 (diff)
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 <gabriel.dedietrich@digia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.h3
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm21
-rw-r--r--src/plugins/platforms/cocoa/qnsview.h1
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm5
4 files changed, 17 insertions, 13 deletions
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 &region);
@@ -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 &region)
[m_nsWindow setBackgroundColor:[NSColor clearColor]];
[m_qtView setMaskRegion:&region];
- 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;