From d4e16c838ab2cccd97ad6e24fc290239666eaaac Mon Sep 17 00:00:00 2001 From: Pocket7878 Date: Sat, 17 Nov 2018 21:22:42 +0900 Subject: devdraw: handle windowDidResize on macOS (#212) This supports non-live window resize. --- src/cmd/devdraw/cocoa-screen-metal.m | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/cmd/devdraw') diff --git a/src/cmd/devdraw/cocoa-screen-metal.m b/src/cmd/devdraw/cocoa-screen-metal.m index 09b34635..959df59b 100644 --- a/src/cmd/devdraw/cocoa-screen-metal.m +++ b/src/cmd/devdraw/cocoa-screen-metal.m @@ -342,6 +342,13 @@ struct Cursors { return YES; } +- (void)windowDidResize:(NSNotification *)notification +{ + if(![myContent inLiveResize] && img) { + resizeimg(); + } +} + - (void)windowDidBecomeKey:(id)arg { [myContent sendmouse:0]; @@ -1112,7 +1119,6 @@ resizewindow(Rectangle r) s = [myContent convertSizeFromBacking:NSMakeSize(Dx(r), Dy(r))]; [win setContentSize:s]; - resizeimg(); }); } -- cgit v1.2.3 From e995a0c101863688d5f14649ae3de45a7c43789c Mon Sep 17 00:00:00 2001 From: Xiao-Yong Date: Wed, 19 Jun 2019 13:32:57 -0500 Subject: devdraw: cocoa metal screen adds a delayed update (#270) The immediate display of the screen sometimes miss the update from the CPU side memory. No obvious synchronization mechanism is available. In order to make sure the screen updates properly, we set needsDisplay again after 16ms delay to ensure a second screen update. --- src/cmd/devdraw/cocoa-screen-metal.m | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/cmd/devdraw') diff --git a/src/cmd/devdraw/cocoa-screen-metal.m b/src/cmd/devdraw/cocoa-screen-metal.m index 959df59b..984ede03 100644 --- a/src/cmd/devdraw/cocoa-screen-metal.m +++ b/src/cmd/devdraw/cocoa-screen-metal.m @@ -212,12 +212,19 @@ threadmain(int argc, char **argv) + (void)callsetNeedsDisplayInRect:(NSValue *)v { NSRect r; + dispatch_time_t time; r = [v rectValue]; LOG(@"callsetNeedsDisplayInRect(%g, %g, %g, %g)", r.origin.x, r.origin.y, r.size.width, r.size.height); r = [win convertRectFromBacking:r]; LOG(@"setNeedsDisplayInRect(%g, %g, %g, %g)", r.origin.x, r.origin.y, r.size.width, r.size.height); [layer setNeedsDisplayInRect:r]; + + time = dispatch_time(DISPATCH_TIME_NOW, 16 * NSEC_PER_MSEC); + dispatch_after(time, dispatch_get_main_queue(), ^(void){ + [layer setNeedsDisplayInRect:r]; + }); + [myContent enlargeLastInputRect:r]; } -- cgit v1.2.3