From 732f77960694d38fae7b287cd4857e32641034e8 Mon Sep 17 00:00:00 2001 From: Joshua Root Date: Fri, 3 Jan 2025 04:19:51 +1100 Subject: [PATCH] windowWillStartLiveResize: legacy OS compatibility fix (cherry picked from commit d58f0268277413994ca365637c17e9dcb6f3b2f3) --- src/video/cocoa/SDL_cocoawindow.h | 1 + src/video/cocoa/SDL_cocoawindow.m | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/video/cocoa/SDL_cocoawindow.h b/src/video/cocoa/SDL_cocoawindow.h index 2f9324617a..7ef0bc0364 100644 --- a/src/video/cocoa/SDL_cocoawindow.h +++ b/src/video/cocoa/SDL_cocoawindow.h @@ -78,6 +78,7 @@ typedef enum /* Window delegate functionality */ -(BOOL) windowShouldClose:(id) sender; -(void) windowDidExpose:(NSNotification *) aNotification; +-(void) onLiveResizeTimerFire:(id) sender; -(void) windowWillStartLiveResize:(NSNotification *)aNotification; -(void) windowDidEndLiveResize:(NSNotification *)aNotification; -(void) windowDidMove:(NSNotification *) aNotification; diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index 0dc638390a..19e5aae306 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -743,16 +743,26 @@ static NSCursor *Cocoa_GetDesiredCursor(void) SDL_SendWindowEvent(_data.window, SDL_WINDOWEVENT_EXPOSED, 0, 0); } +- (void)onLiveResizeTimerFire:(id)sender +{ + SDL_OnWindowLiveResizeUpdate(_data.window); +} + - (void)windowWillStartLiveResize:(NSNotification *)aNotification { // We'll try to maintain 60 FPS during live resizing const NSTimeInterval interval = 1.0 / 60.0; + + NSMethodSignature *invocationSig = [Cocoa_WindowListener + instanceMethodSignatureForSelector:@selector(onLiveResizeTimerFire:)]; + NSInvocation *invocation = [NSInvocation + invocationWithMethodSignature:invocationSig]; + [invocation setTarget:self]; + [invocation setSelector:@selector(onLiveResizeTimerFire:)]; + liveResizeTimer = [NSTimer scheduledTimerWithTimeInterval:interval - repeats:TRUE - block:^(NSTimer *unusedTimer) - { - SDL_OnWindowLiveResizeUpdate(_data.window); - }]; + invocation:invocation + repeats:TRUE]; [[NSRunLoop currentRunLoop] addTimer:liveResizeTimer forMode:NSRunLoopCommonModes]; }