From 8dd15fd9554e096a71443d3e370473978ef96e49 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Fri, 3 Oct 2014 14:14:09 +0200 Subject: [PATCH] QMacStyle: Add optional block parameter to drawNSViewInRect() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In some cases we want to do something different than just calling - [NSView drawRect:]. Change-Id: I7db704daa39611f33f270b0192c4301de62ec1bf Reviewed-by: Morten Johan Sørvig --- src/widgets/styles/qmacstyle_mac.mm | 7 +++++-- src/widgets/styles/qmacstyle_mac_p_p.h | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm index 9347a6ea90..6990cb6fe8 100644 --- a/src/widgets/styles/qmacstyle_mac.mm +++ b/src/widgets/styles/qmacstyle_mac.mm @@ -1888,7 +1888,7 @@ NSView *QMacStylePrivate::cocoaControl(QCocoaWidget widget, QPoint *offset) cons return bv; } -void QMacStylePrivate::drawNSViewInRect(NSView *view, const QRect &qtRect, QPainter *p) const +void QMacStylePrivate::drawNSViewInRect(NSView *view, const QRect &qtRect, QPainter *p, QCocoaDrawRectBlock drawRectBlock) const { QMacCGContext ctx(p); CGContextSaveGState(ctx); @@ -1901,7 +1901,10 @@ void QMacStylePrivate::drawNSViewInRect(NSView *view, const QRect &qtRect, QPain [backingStoreNSView addSubview:view]; view.frame = rect; - [view drawRect:rect]; + if (drawRectBlock) + drawRectBlock(rect, (CGContextRef)ctx); + else + [view drawRect:rect]; [view removeFromSuperviewWithoutNeedingDisplay]; [NSGraphicsContext restoreGraphicsState]; diff --git a/src/widgets/styles/qmacstyle_mac_p_p.h b/src/widgets/styles/qmacstyle_mac_p_p.h index b6267c43e6..1c5e7b5c45 100644 --- a/src/widgets/styles/qmacstyle_mac_p_p.h +++ b/src/widgets/styles/qmacstyle_mac_p_p.h @@ -132,6 +132,8 @@ enum QCocoaWidgetKind { typedef QPair QCocoaWidget; +typedef void (^QCocoaDrawRectBlock)(NSRect, CGContextRef); + #define SIZE(large, small, mini) \ (controlSize == QAquaSizeLarge ? (large) : controlSize == QAquaSizeSmall ? (small) : (mini)) @@ -201,7 +203,7 @@ public: NSView *cocoaControl(QCocoaWidget widget, QPoint *offset) const; - void drawNSViewInRect(NSView *view, const QRect &rect, QPainter *p) const; + void drawNSViewInRect(NSView *view, const QRect &rect, QPainter *p, QCocoaDrawRectBlock drawRectBlock = nil) const; void resolveCurrentNSView(QWindow *window); public: