16 #define GL_SILENCE_DEPRECATION
18 #import <AppKit/AppKit.h>
34 return NSAppKitVersionNumber >= NSAppKitVersionNumber10_7;
41 @interface ClonkScreenfillingWindow: NSWindow
43 - (BOOL) canBecomeKeyWindow;
46 @implementation ClonkScreenfillingWindow
47 - (BOOL) canBecomeKeyWindow
64 - (void) fadeOut:(CGDisplayFadeReservationToken*)token
66 if (CGAcquireDisplayFadeReservation(15, token) == 0)
67 CGDisplayFade(*token, 0.2, 0.0, 1.0, 0, 0, 0, YES);
70 - (void) fadeIn:(CGDisplayFadeReservationToken)token
72 CGDisplayFade(token, 0.2, 1.0, 0.0, 0, 0, 0, YES);
73 CGReleaseDisplayFadeReservation(token);
83 [
self isFullScreen] ||
84 (
lionAndBeyond() && (
self.window.styleMask & NSWindowStyleMaskFullScreen) == NSWindowStyleMaskFullScreen);
87 - (void) setFullscreen:(BOOL)fullscreen
93 CGDisplayFadeReservationToken token;
94 [
self fadeOut:&token];
98 NSRect fullscreenRect = NSScreen.mainScreen.frame;
99 fullscreenWindow = [[ClonkScreenfillingWindow alloc] initWithContentRect:fullscreenRect styleMask:NSWindowStyleMaskBorderless backing:NSBackingStoreBuffered defer:YES];
100 [fullscreenWindow setLevel:NSMainMenuWindowLevel+1];
101 [fullscreenWindow setOpaque:YES];
102 [fullscreenWindow setHidesOnDeactivate:YES];
103 [fullscreenWindow setContentView:openGLView];
104 [fullscreenWindow setReleasedWhenClosed:YES];
105 [fullscreenWindow setDelegate:self];
106 [
self.window orderOut:self];
107 [fullscreenWindow setInitialFirstResponder:openGLView];
108 [fullscreenWindow makeKeyAndOrderFront:self];
110 [openGLView enableEvents];
119 [fullscreenWindow close];
121 [
self.window setContentView:openGLView];
122 [
self.window orderFront:self];
123 [openGLView setFrame:[
self.window.contentView frame]];
124 [openGLView enableEvents];
125 [
self.window makeKeyAndOrderFront:self];
127 [openGLView display];
135 - (BOOL) windowShouldClose:(
id)sender
137 if (sender ==
self.window &&
self.
stdWindow)
139 [
self.openGLView showCursor];
140 self.stdWindow->Close();
153 - (IBAction) scroll:(
id)sender
163 - (void) windowDidResize:(NSNotification *)notification
177 return self.window.inLiveResize;
180 - (NSRect) windowWillUseStandardFrame:(NSWindow*) window defaultFrame:(NSRect) newFrame
185 - (NSSize)window:(NSWindow *)window willUseFullScreenContentSize:(NSSize)proposedSize
189 CGDisplayPixelsWide(C4OpenGLView.displayID),
190 CGDisplayPixelsHigh(C4OpenGLView.displayID)
196 - (void) windowWillExitFullScreen:(NSNotification *)notification
200 CGAssociateMouseAndMouseCursorPosition(TRUE);
204 - (void) setContentSize:(NSSize)size
206 [
self.window setContentSize:size];
212 @interface NSScroller (ClonkZoom)
213 - (void) setToLandscapeCoordinate:(
float)lc
215 viewportSize:(
int) vs
217 - (float) landscapeCoordinateForSize:(
int) s
218 viewportSize:(
int) vs
221 @implementation NSScroller (ClonkZoom)
222 - (void) setToLandscapeCoordinate:(
float)lc
224 viewportSize:(
int) vs
227 self.doubleValue = (double)lc/((
double)
s - (double)vs/
z);
228 self.knobProportion = (CGFloat)std::min(1.0, (
double)vs/(
s*
z));
231 - (float) landscapeCoordinateForSize:(
int) s
232 viewportSize:(
int) vs
235 return self.doubleValue * ((double)
s - (
double)vs/
z);
241 #if !defined(WITH_QT_EDITOR)
244 if (PlayerLock)
return false;
245 NSScrollView* scrollView = pWindow->objectiveCObject<
C4WindowController>().scrollView;
246 [scrollView.horizontalScroller setToLandscapeCoordinate:GetViewX() size:Landscape.GetWidth() viewportSize:ViewWdt zoom:GetZoom()];
247 [scrollView.verticalScroller setToLandscapeCoordinate:GetViewY() size:Landscape.GetHeight() viewportSize:ViewHgt zoom:GetZoom()];
253 NSScrollView* scrollView = pWindow->objectiveCObject<
C4WindowController>().scrollView;
259 [scrollView.verticalScroller setEnabled:YES];
260 [scrollView.horizontalScroller setEnabled:YES];
261 [scrollView setAutohidesScrollers:NO];
263 ScrollBarsByViewPosition();
270 [scrollView.verticalScroller setEnabled:NO];
271 [scrollView.horizontalScroller setEnabled:NO];
272 [scrollView setAutohidesScrollers:YES];
281 NSScrollView* scrollView = pWindow->objectiveCObject<
C4WindowController>().scrollView;
282 SetViewX([scrollView.horizontalScroller landscapeCoordinateForSize:
Landscape.
GetWidth() viewportSize:ViewWdt zoom:
GetZoom()]);
283 SetViewY([scrollView.verticalScroller landscapeCoordinateForSize:
Landscape.
GetHeight() viewportSize:ViewHgt zoom:
GetZoom()]);
C4Application Application
int32_t GetHeight() const
bool ViewPositionByScrollBars()
bool ScrollBarsByViewPosition()
C4Viewport * GetFirstViewport()
C4AppDelegate * instance()
NSWindow * fullscreenWindow
BOOL isFullScreenConsideringLionFullScreen()
NSScrollView * scrollView
C4OpenGLView * openGLView
NSSize preferredContentSize