# cocoa_v.h

Go to the documentation of this file.

    00001 /* $Id: cocoa_v.h 26024 2013-11-17 13:35:48Z rubidium $ */
    00002
    00003 /*
    00004  * This file is part of OpenTTD.
    00005  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
    00006  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    00007  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
    00008  */
    00009
    00012 #ifndef VIDEO_COCOA_H
    00013 #define VIDEO_COCOA_H
    00014
    00015 #include "../video_driver.hpp"
    00016
    00017 class VideoDriver_Cocoa: public VideoDriver {
    00018 public:
    00019   /* virtual */ const char *Start(const char * const *param);
    00020
    00022   /* virtual */ void Stop();
    00023
    00030   /* virtual */ void MakeDirty(int left, int top, int width, int height);
    00031
    00033   /* virtual */ void MainLoop();
    00034
    00040   /* virtual */ bool ChangeResolution(int w, int h);
    00041
    00046   /* virtual */ bool ToggleFullscreen(bool fullscreen);
    00047
    00051   /* virtual */ bool AfterBlitterChange();
    00052
    00056   /* virtual */ void EditBoxLostFocus();
    00057
    00061   /* virtual */ const char *GetName() const { return "cocoa"; }
    00062 };
    00063
    00064 class FVideoDriver_Cocoa: public VideoDriverFactory<FVideoDriver_Cocoa> {
    00065 public:
    00066   static const int priority = 10;
    00067   /* virtual */ const char *GetName() { return "cocoa"; }
    00068   /* virtual */ const char *GetDescription() { return "Cocoa Video Driver"; }
    00069   /* virtual */ Driver *CreateInstance() { return new VideoDriver_Cocoa(); }
    00070 };
    00071
    00072
    00078 class CocoaSubdriver {
    00079 public:
    00080   int device_width;
    00081   int device_height;
    00082   int device_depth;
    00083
    00084   int window_width;
    00085   int window_height;
    00086   int window_pitch;
    00087
    00088   int buffer_depth;
    00089   void *pixel_buffer;
    00090   void *window_buffer;
    00091   id window;
    00092
    00093 # define MAX_DIRTY_RECTS 100
    00094   Rect dirty_rects[MAX_DIRTY_RECTS];
    00095   int num_dirty_rects;
    00096   uint32 palette[256];
    00097
    00098   bool active;
    00099   bool setup;
    00100
    00101   id cocoaview;
    00102
    00103   /* Separate driver vars for Quarz
    00104    * Needed here in order to avoid much code duplication */
    00105   CGContextRef cgcontext;
    00106
    00107   /* Driver methods */
    00109   virtual ~CocoaSubdriver() {}
    00110
    00114   virtual void Draw(bool force_update = false) = 0;
    00115
    00122   virtual void MakeDirty(int left, int top, int width, int height) = 0;
    00123
    00125   virtual void UpdatePalette(uint first_color, uint num_colors) = 0;
    00126
    00127   virtual uint ListModes(OTTD_Point *modes, uint max_modes) = 0;
    00128
    00134   virtual bool ChangeResolution(int w, int h, int bpp) = 0;
    00135
    00139   virtual bool IsFullscreen() = 0;
    00140
    00144   virtual bool ToggleFullscreen() { return false; };
    00145
    00149   virtual int GetWidth() = 0;
    00150
    00154   virtual int GetHeight() = 0;
    00155
    00159   virtual void *GetPixelBuffer() = 0;
    00160
    00165   virtual CGPoint PrivateLocalToCG(NSPoint *p) = 0;
    00166
    00171   virtual NSPoint GetMouseLocation(NSEvent *event) = 0;
    00172
    00177   virtual bool MouseIsInsideView(NSPoint *pt) = 0;
    00178
    00182   virtual bool IsActive() = 0;
    00183
    00185   virtual void SetPortAlphaOpaque() { return; };
    00186
    00190   virtual bool WindowResized() { return false; };
    00191 };
    00192
    00193 extern CocoaSubdriver *_cocoa_subdriver;
    00194
    00195 CocoaSubdriver *QZ_CreateFullscreenSubdriver(int width, int height, int bpp);
    00196
    00197 #ifdef ENABLE_COCOA_QUICKDRAW
    00198 CocoaSubdriver *QZ_CreateWindowQuickdrawSubdriver(int width, int height, int bpp);
    00199 #endif
    00200
    00201 #ifdef ENABLE_COCOA_QUARTZ
    00202 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
    00203 CocoaSubdriver *QZ_CreateWindowQuartzSubdriver(int width, int height, int bpp);
    00204 #endif
    00205 #endif
    00206
    00207 void QZ_GameSizeChanged();
    00208
    00209 void QZ_GameLoop();
    00210
    00211 uint QZ_ListModes(OTTD_Point *modes, uint max_modes, CGDirectDisplayID display_id, int display_depth);
    00212
    00214 @interface NSCursor (OTTD_QuickdrawCursor)
    00215 + (NSCursor *) clearCocoaCursor;
    00216 @end
    00217
    00219 @interface OTTD_CocoaWindow : NSWindow {
    00220   CocoaSubdriver *driver;
    00221 }
    00222
    00223 - (void)setDriver:(CocoaSubdriver*)drv;
    00224
    00225 - (void)miniaturize:(id)sender;
    00226 - (void)display;
    00227 - (void)setFrame:(NSRect)frameRect display:(BOOL)flag;
    00228 - (void)appDidHide:(NSNotification*)note;
    00229 - (void)appWillUnhide:(NSNotification*)note;
    00230 - (void)appDidUnhide:(NSNotification*)note;
    00231 - (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag;
    00232 @end
    00233
    00235 @interface OTTD_CocoaView : NSView
    00236 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
    00237 # if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4
    00238     <NSTextInputClient, NSTextInput>
    00239 # else
    00240     <NSTextInputClient>
    00241 # endif /* MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 */
    00242 #else
    00243   <NSTextInput>
    00244 #endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 */
    00245 {
    00246   CocoaSubdriver *driver;
    00247   NSTrackingRectTag trackingtag;
    00248 }
    00249 - (void)setDriver:(CocoaSubdriver*)drv;
    00250 - (void)drawRect:(NSRect)rect;
    00251 - (BOOL)isOpaque;
    00252 - (BOOL)acceptsFirstResponder;
    00253 - (BOOL)becomeFirstResponder;
    00254 - (void)setTrackingRect;
    00255 - (void)clearTrackingRect;
    00256 - (void)resetCursorRects;
    00257 - (void)viewWillMoveToWindow:(NSWindow *)win;
    00258 - (void)viewDidMoveToWindow;
    00259 - (void)mouseEntered:(NSEvent *)theEvent;
    00260 - (void)mouseExited:(NSEvent *)theEvent;
    00261 @end
    00262
    00264 @interface OTTD_CocoaWindowDelegate : NSObject {
    00265   CocoaSubdriver *driver;
    00266 }
    00267
    00268 - (void)setDriver:(CocoaSubdriver*)drv;
    00269
    00270 - (BOOL)windowShouldClose:(id)sender;
    00271 - (void)windowDidEnterFullScreen:(NSNotification *)aNotification;
    00272 @end
    00273
    00274
    00275 #endif /* VIDEO_COCOA_H */