FLTK logo

[master] 75016cb - macOS: implement (BOOL)[FLView isOpaque] to improve drawing performance.

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.commit  ]
 
Previous Message ]Next Message ]

[master] 75016cb - macOS: implement (BOOL)[FLView isOpaque] to improve drawing performance. "ManoloFLTK" Sep 30, 2022  
 
commit 75016cb8530c886fad9227b015413da0634aa63a
Author:     ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>
AuthorDate: Fri Sep 30 09:03:54 2022 +0200
Commit:     ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>
CommitDate: Fri Sep 30 09:03:54 2022 +0200

    macOS: implement (BOOL)[FLView isOpaque] to improve drawing performance.

 src/Fl_cocoa.mm | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git src/Fl_cocoa.mm src/Fl_cocoa.mm
index 694e54a..beaba84 100644
--- src/Fl_cocoa.mm
+++ 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?
Direct Link to Message ]
 
     
Previous Message ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.