diff --git a/app/gl_macos.m b/app/gl_macos.m index e545391d..3f95ac0f 100644 --- a/app/gl_macos.m +++ b/app/gl_macos.m @@ -7,7 +7,7 @@ #include #include "_cgo_export.h" -CALayer *gio_layerFactory(void) { +CALayer *gio_layerFactory(BOOL presentWithTrans) { @autoreleasepool { return [CALayer layer]; } diff --git a/app/metal_macos.go b/app/metal_macos.go index 4fe7586c..15d60b08 100644 --- a/app/metal_macos.go +++ b/app/metal_macos.go @@ -12,12 +12,12 @@ package app #import #include -CALayer *gio_layerFactory(void) { +CALayer *gio_layerFactory(BOOL presentWithTrans) { @autoreleasepool { CAMetalLayer *l = [CAMetalLayer layer]; l.autoresizingMask = kCALayerHeightSizable|kCALayerWidthSizable; l.needsDisplayOnBoundsChange = YES; - l.presentsWithTransaction = YES; + l.presentsWithTransaction = presentWithTrans; return l; } } diff --git a/app/os_macos.go b/app/os_macos.go index 1da5083f..a1142c86 100644 --- a/app/os_macos.go +++ b/app/os_macos.go @@ -40,7 +40,7 @@ import ( #define MOUSE_SCROLL 4 __attribute__ ((visibility ("hidden"))) void gio_main(void); -__attribute__ ((visibility ("hidden"))) CFTypeRef gio_createView(void); +__attribute__ ((visibility ("hidden"))) CFTypeRef gio_createView(int presentWithTrans); __attribute__ ((visibility ("hidden"))) CFTypeRef gio_createWindow(CFTypeRef viewRef, CGFloat width, CGFloat height, CGFloat minWidth, CGFloat minHeight, CGFloat maxWidth, CGFloat maxHeight); __attribute__ ((visibility ("hidden"))) void gio_viewSetHandle(CFTypeRef viewRef, uintptr_t handle); @@ -925,7 +925,9 @@ func newWindow(win *callbacks, options []Option) { w.loop = newEventLoop(w.w, w.wakeup) win.SetDriver(w) res <- struct{}{} - if err := w.init(); err != nil { + var cnf Config + cnf.apply(unit.Metric{}, options) + if err := w.init(cnf.CustomRenderer); err != nil { w.ProcessEvent(DestroyEvent{Err: err}) return } @@ -946,8 +948,12 @@ func newWindow(win *callbacks, options []Option) { <-res } -func (w *window) init() error { - view := C.gio_createView() +func (w *window) init(customRenderer bool) error { + presentWithTrans := 1 + if customRenderer { + presentWithTrans = 0 + } + view := C.gio_createView(C.int(presentWithTrans)) if view == 0 { return errors.New("newOSWindow: failed to create view") } diff --git a/app/os_macos.m b/app/os_macos.m index 01b42978..b1940321 100644 --- a/app/os_macos.m +++ b/app/os_macos.m @@ -6,7 +6,7 @@ #include "_cgo_export.h" -__attribute__ ((visibility ("hidden"))) CALayer *gio_layerFactory(void); +__attribute__ ((visibility ("hidden"))) CALayer *gio_layerFactory(BOOL presentWithTrans); @interface GioAppDelegate : NSObject @end @@ -16,6 +16,7 @@ __attribute__ ((visibility ("hidden"))) CALayer *gio_layerFactory(void); @interface GioView : NSView @property uintptr_t handle; +@property BOOL presentWithTrans; @end @implementation GioWindowDelegate @@ -88,7 +89,7 @@ static void handleMouse(GioView *view, NSEvent *event, int typ, CGFloat dx, CGFl gio_onDraw(self.handle); } - (CALayer *)makeBackingLayer { - CALayer *layer = gio_layerFactory(); + CALayer *layer = gio_layerFactory(self.presentWithTrans); layer.delegate = self; return layer; } @@ -392,10 +393,11 @@ CFTypeRef gio_createWindow(CFTypeRef viewRef, CGFloat width, CGFloat height, CGF } } -CFTypeRef gio_createView(void) { +CFTypeRef gio_createView(int presentWithTrans) { @autoreleasepool { NSRect frame = NSMakeRect(0, 0, 0, 0); GioView* view = [[GioView alloc] initWithFrame:frame]; + view.presentWithTrans = presentWithTrans ? YES : NO; view.wantsLayer = YES; view.layerContentsRedrawPolicy = NSViewLayerContentsRedrawDuringViewResize;