diff --git a/src/video/cocoa/cocoa_v.h b/src/video/cocoa/cocoa_v.h index 2d789d89e4..e81125b5bc 100644 --- a/src/video/cocoa/cocoa_v.h +++ b/src/video/cocoa/cocoa_v.h @@ -124,4 +124,15 @@ void QZ_HideMouse(); uint QZ_ListModes(OTTD_Point *modes, uint max_modes, CGDirectDisplayID display_id, int display_depth); +/** Delegate for our NSWindow to send ask for quit on close */ +@interface OTTD_CocoaWindowDelegate : NSObject { + CocoaSubdriver *driver; +} + +- (void)setDriver:(CocoaSubdriver*)drv; + +- (BOOL)windowShouldClose:(id)sender; +@end + + #endif /* VIDEO_COCOA_H */ diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm index 793e1b206a..756c86bfba 100644 --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -407,4 +407,40 @@ void cocoaReleaseAutoreleasePool() [ _ottd_autorelease_pool release ]; } +@implementation OTTD_CocoaWindowDelegate +/** Initialize the video driver */ +- (void)setDriver:(CocoaSubdriver*)drv +{ + driver = drv; +} +/** Handle closure requests */ +- (BOOL)windowShouldClose:(id)sender +{ + HandleExitGameRequest(); + + return NO; +} +/** Handle key acceptance */ +- (void)windowDidBecomeKey:(NSNotification*)aNotification +{ + driver->active = true; +} +/** Resign key acceptance */ +- (void)windowDidResignKey:(NSNotification*)aNotification +{ + driver->active = false; +} +/** Handle becoming main window */ +- (void)windowDidBecomeMain:(NSNotification*)aNotification +{ + driver->active = true; +} +/** Resign being main window */ +- (void)windowDidResignMain:(NSNotification*)aNotification +{ + driver->active = false; +} + +@end + #endif /* WITH_COCOA */ diff --git a/src/video/cocoa/wnd_quartz.mm b/src/video/cocoa/wnd_quartz.mm index b9a84160f3..50712cf9d6 100644 --- a/src/video/cocoa/wnd_quartz.mm +++ b/src/video/cocoa/wnd_quartz.mm @@ -62,16 +62,6 @@ class WindowQuartzSubdriver; - (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag; @end -/* Delegate for our NSWindow to send ask for quit on close */ -@interface OTTD_QuartzWindowDelegate : NSObject { - WindowQuartzSubdriver *driver; -} - -- (void)setDriver:(WindowQuartzSubdriver*)drv; - -- (BOOL)windowShouldClose:(id)sender; -@end - /* Subclass of NSView to fix Quartz rendering */ @interface OTTD_QuartzView : NSView { WindowQuartzSubdriver *driver; @@ -243,42 +233,6 @@ static CGColorSpaceRef QZ_GetCorrectColorSpace() @end -@implementation OTTD_QuartzWindowDelegate - -- (void)setDriver:(WindowQuartzSubdriver*)drv -{ - driver = drv; -} - -- (BOOL)windowShouldClose:(id)sender -{ - HandleExitGameRequest(); - - return NO; -} - -- (void)windowDidBecomeKey:(NSNotification*)aNotification -{ - driver->active = true; -} - -- (void)windowDidResignKey:(NSNotification*)aNotification -{ - driver->active = false; -} - -- (void)windowDidBecomeMain:(NSNotification*)aNotification -{ - driver->active = true; -} - -- (void)windowDidResignMain:(NSNotification*)aNotification -{ - driver->active = false; -} - -@end - @implementation OTTD_QuartzView - (void)setDriver:(WindowQuartzSubdriver*)drv @@ -400,7 +354,7 @@ bool WindowQuartzSubdriver::SetVideoMode(int width, int height) /* Check if we should recreate the window */ if (this->window == nil) { - OTTD_QuartzWindowDelegate *delegate; + OTTD_CocoaWindowDelegate *delegate; /* Set the window style */ unsigned int style = NSTitledWindowMask; @@ -436,7 +390,7 @@ bool WindowQuartzSubdriver::SetVideoMode(int width, int height) [ this->window useOptimizedDrawing:YES ]; - delegate = [ [ OTTD_QuartzWindowDelegate alloc ] init ]; + delegate = [ [ OTTD_CocoaWindowDelegate alloc ] init ]; [ delegate setDriver:this ]; [ this->window setDelegate:[ delegate autorelease ] ]; } else { diff --git a/src/video/cocoa/wnd_quickdraw.mm b/src/video/cocoa/wnd_quickdraw.mm index de38e26c0b..0e5340a629 100644 --- a/src/video/cocoa/wnd_quickdraw.mm +++ b/src/video/cocoa/wnd_quickdraw.mm @@ -62,16 +62,6 @@ class WindowQuickdrawSubdriver; - (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag; @end -/* Delegate for our NSWindow to send ask for quit on close */ -@interface OTTD_QuickdrawWindowDelegate : NSObject { - WindowQuickdrawSubdriver *driver; -} - -- (void)setDriver:(WindowQuickdrawSubdriver*)drv; - -- (BOOL)windowShouldClose:(id)sender; -@end - class WindowQuickdrawSubdriver: public CocoaSubdriver { private: /** @@ -236,42 +226,6 @@ public: @end -@implementation OTTD_QuickdrawWindowDelegate -- (void)setDriver:(WindowQuickdrawSubdriver*)drv -{ - driver = drv; -} - -- (BOOL)windowShouldClose:(id)sender -{ - HandleExitGameRequest(); - - return NO; -} - -- (void)windowDidBecomeKey:(NSNotification*)aNotification -{ - driver->active = true; -} - -- (void)windowDidResignKey:(NSNotification*)aNotification -{ - driver->active = false; -} - -- (void)windowDidBecomeMain:(NSNotification*)aNotification -{ - driver->active = true; -} - -- (void)windowDidResignMain:(NSNotification*)aNotification -{ - driver->active = false; -} - -@end - - static const int _resize_icon_width = 16; static const int _resize_icon_height = 16; @@ -329,7 +283,7 @@ bool WindowQuickdrawSubdriver::SetVideoMode(int width, int height) /* Check if we should recreate the window */ if (this->window == nil) { - OTTD_QuickdrawWindowDelegate *delegate; + OTTD_CocoaWindowDelegate *delegate; /* Set the window style */ unsigned int style = NSTitledWindowMask; @@ -360,7 +314,7 @@ bool WindowQuickdrawSubdriver::SetVideoMode(int width, int height) [ this->window setAcceptsMouseMovedEvents:YES ]; [ this->window setViewsNeedDisplay:NO ]; - delegate = [ [ OTTD_QuickdrawWindowDelegate alloc ] init ]; + delegate = [ [ OTTD_CocoaWindowDelegate alloc ] init ]; [ delegate setDriver:this ]; [ this->window setDelegate: [ delegate autorelease ] ]; } else {