diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2022-09-30 09:03:54 +0200 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2022-09-30 09:03:54 +0200 |
| commit | 75016cb8530c886fad9227b015413da0634aa63a (patch) | |
| tree | 3737894a534a13776c35b8c85871b22da52f818a | |
| parent | 63dcdcec0a3a66b9754f3bcce595f88145c00991 (diff) | |
macOS: implement (BOOL)[FLView isOpaque] to improve drawing performance.
| -rw-r--r-- | src/Fl_cocoa.mm | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index 694e54ae1..beaba84db 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -505,8 +505,9 @@ void Fl_Cocoa_Screen_Driver::breakMacEventLoop() BOOL need_handle; // YES means Fl::handle(FL_KEYBOARD,) is needed after handleEvent processing NSInteger identifier; NSRange selectedRange; -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_14 @public + BOOL is_opaque; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_14 CGContextRef aux_bitmap; // all drawing to view goes there and is finally copied to the CALayer #endif } @@ -684,11 +685,14 @@ void Fl_Cocoa_Screen_Driver::breakMacEventLoop() if (!CGRectEqualToRect(srect, current_clip)) { // if new clip differs from current clip delete r; FLWindow *xid = fl_xid(w); - NSView *view = [xid contentView]; - if (CGRectEqualToRect(srect, full)) r = NULL; - else { + FLView *view = (FLView*)[xid contentView]; + if (CGRectEqualToRect(srect, full)) { + r = NULL; + view->is_opaque = (w->shape() == NULL); + } else { r = new CGRect(srect); if (r->size.width == 0 && r->size.height == 0) r->origin.x = r->origin.y = 0; + view->is_opaque = NO; } d->subRect(r); w->redraw(); @@ -698,7 +702,7 @@ void Fl_Cocoa_Screen_Driver::breakMacEventLoop() [xid orderWindow:NSWindowAbove relativeTo:parent_num]; } #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_14 - if (!views_use_CA || ((FLView*)view)->aux_bitmap) + if (!views_use_CA || view->aux_bitmap) #endif [view display]; // subwindow needs redrawn } @@ -2199,6 +2203,9 @@ static FLTextInputContext* fltextinputcontext_instance = nil; */ @implementation FLView +- (BOOL)isOpaque { + return is_opaque; +} - (BOOL)did_view_resolution_change { #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 if (fl_mac_os_version >= 100700) { // determine whether window is mapped to a retina display @@ -2994,6 +3001,7 @@ Fl_X* Fl_Cocoa_Window_Driver::makeWindow() [cw setContentView:myview]; [myview release]; [cw setLevel:winlevel]; + myview->is_opaque = (w->shape() == NULL); q_set_window_title(cw, w->label(), w->iconlabel()); NSImage *icon = icon_image; // is a window or default icon present? |
