diff options
author | Akemi <der.richter@gmx.de> | 2017-01-28 16:29:22 +0100 |
---|---|---|
committer | Akemi <der.richter@gmx.de> | 2017-02-02 16:22:27 +0100 |
commit | 6da224b1ddc6f28fe38900b6146f739d3acfb648 (patch) | |
tree | b863684f6076b5be50b30c4e1b22249c2a5e1417 /video/out/cocoa | |
parent | f39a1cb1b0214ee3fb0640e11c1eeea6b3af47eb (diff) |
cocoa: optimise screen event handling
this optimises two things and fix a minor bug.
1. we always updated the display refresh rate on any mode change whether
it was the current screen or not. now we only update the refresh rate
when the mode changed happened on the current screen.
2. the windowDidChangeScreen event doesn't exclusively trigger on screen
changes so we updated the display refresh rate in cases where it wasn't
needed at all. since we manually keep track of the current screen, we
can easily test if the screen really changed.
3. weirdly on initWithContentRect accessing the screen of the window
always returned the main screen instead of the screen the window is
created on. since we already use the window init method with the screen
as argument, overwrite that method instead and use the screen argument.
Diffstat (limited to 'video/out/cocoa')
-rw-r--r-- | video/out/cocoa/window.m | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/video/out/cocoa/window.m b/video/out/cocoa/window.m index aae6582dde..1ff57acde9 100644 --- a/video/out/cocoa/window.m +++ b/video/out/cocoa/window.m @@ -49,20 +49,22 @@ styleMask:(NSUInteger)style_mask backing:(NSBackingStoreType)buffering_type defer:(BOOL)flag + screen:(NSScreen *)screen { if (self = [super initWithContentRect:content_rect styleMask:style_mask backing:buffering_type - defer:flag]) { + defer:flag + screen:screen]) { [self setBackgroundColor:[NSColor blackColor]]; [self setMinSize:NSMakeSize(50,50)]; [self setCollectionBehavior: NSWindowCollectionBehaviorFullScreenPrimary]; - self.targetScreen = [self screen]; - self.currentScreen = [self screen]; + self.targetScreen = screen; + self.currentScreen = screen; _is_animating = 0; _unfs_content_frame = [self convertRectToScreen:[[self contentView] frame]]; - _unfs_screen_frame = [[self screen] frame]; + _unfs_screen_frame = [screen frame]; } return self; } @@ -171,8 +173,10 @@ if (!_is_animating && ![[self currentScreen] isEqual:[self screen]]) { self.previousScreen = [self screen]; } + if (![[self currentScreen] isEqual:[self screen]]) { + [self.adapter windowDidChangeScreen:notification]; + } self.currentScreen = [self screen]; - [self.adapter windowDidChangeScreen:notification]; } - (void)windowDidChangeScreenProfile:(NSNotification *)notification |