Mac: Send a window resize event when the window's backing scale factor changes.
The backing scale factor can change when the window moves between retina and non-retina displays. The only other way to detect such a change is to compare the output of SDL_GL_GetDrawableSize or SDL_GetRendererOutputSize every frame, which is less than desirable, especially since the necessary app logic is likely already being executed when a window resize event is received.
parent
be89fa09ef
commit
262e8ef3f0
|
@ -70,6 +70,7 @@ typedef enum
|
||||||
-(void) windowDidDeminiaturize:(NSNotification *) aNotification;
|
-(void) windowDidDeminiaturize:(NSNotification *) aNotification;
|
||||||
-(void) windowDidBecomeKey:(NSNotification *) aNotification;
|
-(void) windowDidBecomeKey:(NSNotification *) aNotification;
|
||||||
-(void) windowDidResignKey:(NSNotification *) aNotification;
|
-(void) windowDidResignKey:(NSNotification *) aNotification;
|
||||||
|
-(void) windowDidChangeBackingProperties:(NSNotification *) aNotification;
|
||||||
-(void) windowWillEnterFullScreen:(NSNotification *) aNotification;
|
-(void) windowWillEnterFullScreen:(NSNotification *) aNotification;
|
||||||
-(void) windowDidEnterFullScreen:(NSNotification *) aNotification;
|
-(void) windowDidEnterFullScreen:(NSNotification *) aNotification;
|
||||||
-(void) windowWillExitFullScreen:(NSNotification *) aNotification;
|
-(void) windowWillExitFullScreen:(NSNotification *) aNotification;
|
||||||
|
|
|
@ -255,6 +255,7 @@ SetWindowStyle(SDL_Window * window, unsigned int style)
|
||||||
[center addObserver:self selector:@selector(windowDidDeminiaturize:) name:NSWindowDidDeminiaturizeNotification object:window];
|
[center addObserver:self selector:@selector(windowDidDeminiaturize:) name:NSWindowDidDeminiaturizeNotification object:window];
|
||||||
[center addObserver:self selector:@selector(windowDidBecomeKey:) name:NSWindowDidBecomeKeyNotification object:window];
|
[center addObserver:self selector:@selector(windowDidBecomeKey:) name:NSWindowDidBecomeKeyNotification object:window];
|
||||||
[center addObserver:self selector:@selector(windowDidResignKey:) name:NSWindowDidResignKeyNotification object:window];
|
[center addObserver:self selector:@selector(windowDidResignKey:) name:NSWindowDidResignKeyNotification object:window];
|
||||||
|
[center addObserver:self selector:@selector(windowDidChangeBackingProperties:) name:NSWindowDidChangeBackingPropertiesNotification object:window];
|
||||||
[center addObserver:self selector:@selector(windowWillEnterFullScreen:) name:NSWindowWillEnterFullScreenNotification object:window];
|
[center addObserver:self selector:@selector(windowWillEnterFullScreen:) name:NSWindowWillEnterFullScreenNotification object:window];
|
||||||
[center addObserver:self selector:@selector(windowDidEnterFullScreen:) name:NSWindowDidEnterFullScreenNotification object:window];
|
[center addObserver:self selector:@selector(windowDidEnterFullScreen:) name:NSWindowDidEnterFullScreenNotification object:window];
|
||||||
[center addObserver:self selector:@selector(windowWillExitFullScreen:) name:NSWindowWillExitFullScreenNotification object:window];
|
[center addObserver:self selector:@selector(windowWillExitFullScreen:) name:NSWindowWillExitFullScreenNotification object:window];
|
||||||
|
@ -385,6 +386,7 @@ SetWindowStyle(SDL_Window * window, unsigned int style)
|
||||||
[center removeObserver:self name:NSWindowDidDeminiaturizeNotification object:window];
|
[center removeObserver:self name:NSWindowDidDeminiaturizeNotification object:window];
|
||||||
[center removeObserver:self name:NSWindowDidBecomeKeyNotification object:window];
|
[center removeObserver:self name:NSWindowDidBecomeKeyNotification object:window];
|
||||||
[center removeObserver:self name:NSWindowDidResignKeyNotification object:window];
|
[center removeObserver:self name:NSWindowDidResignKeyNotification object:window];
|
||||||
|
[center removeObserver:self name:NSWindowDidChangeBackingPropertiesNotification object:window];
|
||||||
[center removeObserver:self name:NSWindowWillEnterFullScreenNotification object:window];
|
[center removeObserver:self name:NSWindowWillEnterFullScreenNotification object:window];
|
||||||
[center removeObserver:self name:NSWindowDidEnterFullScreenNotification object:window];
|
[center removeObserver:self name:NSWindowDidEnterFullScreenNotification object:window];
|
||||||
[center removeObserver:self name:NSWindowWillExitFullScreenNotification object:window];
|
[center removeObserver:self name:NSWindowWillExitFullScreenNotification object:window];
|
||||||
|
@ -584,6 +586,22 @@ SetWindowStyle(SDL_Window * window, unsigned int style)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)windowDidChangeBackingProperties:(NSNotification *)aNotification
|
||||||
|
{
|
||||||
|
NSNumber *oldscale = [[aNotification userInfo] objectForKey:NSBackingPropertyOldScaleFactorKey];
|
||||||
|
|
||||||
|
if (inFullscreenTransition) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([oldscale doubleValue] != [_data->nswindow backingScaleFactor]) {
|
||||||
|
/* Force a resize event when the backing scale factor changes. */
|
||||||
|
_data->window->w = 0;
|
||||||
|
_data->window->h = 0;
|
||||||
|
[self windowDidResize:aNotification];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (void)windowWillEnterFullScreen:(NSNotification *)aNotification
|
- (void)windowWillEnterFullScreen:(NSNotification *)aNotification
|
||||||
{
|
{
|
||||||
SDL_Window *window = _data->window;
|
SDL_Window *window = _data->window;
|
||||||
|
|
Loading…
Reference in New Issue