# cocoa_v.h

Go to the documentation of this file.

    00001 /* $Id$ */
    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 <AvailabilityMacros.h>
    00016
    00017 #include "../video_driver.hpp"
    00018
    00019 class VideoDriver_Cocoa: public VideoDriver {
    00020 public:
    00021   /* virtual */ const char *Start(const char * const *param);
    00022
    00023   /* virtual */ void Stop();
    00024
    00025   /* virtual */ void MakeDirty(int left, int top, int width, int height);
    00026
    00027   /* virtual */ void MainLoop();
    00028
    00029   /* virtual */ bool ChangeResolution(int w, int h);
    00030
    00031   /* virtual */ bool ToggleFullscreen(bool fullscreen);
    00032
    00033   /* virtual */ const char *GetName() const { return "cocoa"; }
    00034 };
    00035
    00036 class FVideoDriver_Cocoa: public VideoDriverFactory<FVideoDriver_Cocoa> {
    00037 public:
    00038   static const int priority = 10;
    00039   /* virtual */ const char *GetName() { return "cocoa"; }
    00040   /* virtual */ const char *GetDescription() { return "Cocoa Video Driver"; }
    00041   /* virtual */ Driver *CreateInstance() { return new VideoDriver_Cocoa(); }
    00042 };
    00043
    00044
    00050 class CocoaSubdriver {
    00051 public:
    00052   int device_width;
    00053   int device_height;
    00054   int device_depth;
    00055
    00056   int window_width;
    00057   int window_height;
    00058   int window_pitch;
    00059
    00060   int buffer_depth;
    00061   void *pixel_buffer;   // used for direct pixel access
    00062   void *window_buffer;  // has colour translation from palette to screen
    00063   id window;            // pointer to window object
    00064
    00065 # define MAX_DIRTY_RECTS 100
    00066   Rect dirty_rects[MAX_DIRTY_RECTS];
    00067   int num_dirty_rects;
    00068   uint32 palette[256];
    00069
    00070   bool active;
    00071   bool setup;
    00072
    00073   id cocoaview;         // pointer to view object
    00074
    00075   /* Separate driver vars for Quarz
    00076    * Needed here in order to avoid much code duplication */
    00077   CGContextRef cgcontext;
    00078
    00079   /* Driver methods */
    00080   virtual ~CocoaSubdriver() {}
    00081
    00082   virtual void Draw(bool force_update = false) = 0;
    00083   virtual void MakeDirty(int left, int top, int width, int height) = 0;
    00084   virtual void UpdatePalette(uint first_color, uint num_colors) = 0;
    00085
    00086   virtual uint ListModes(OTTD_Point *modes, uint max_modes) = 0;
    00087
    00088   virtual bool ChangeResolution(int w, int h) = 0;
    00089
    00090   virtual bool IsFullscreen() = 0;
    00091   virtual int GetWidth() = 0;
    00092   virtual int GetHeight() = 0;
    00093   virtual void *GetPixelBuffer() = 0;
    00094
    00095   /* Convert local coordinate to window server (CoreGraphics) coordinate */
    00096   virtual CGPoint PrivateLocalToCG(NSPoint *p) = 0;
    00097
    00098   virtual NSPoint GetMouseLocation(NSEvent *event) = 0;
    00099   virtual bool MouseIsInsideView(NSPoint *pt) = 0;
    00100
    00101   virtual bool IsActive() = 0;
    00102
    00103   virtual void SetPortAlphaOpaque() { return; };
    00104   virtual bool WindowResized() { return false; };
    00105 };
    00106
    00107 extern CocoaSubdriver *_cocoa_subdriver;
    00108
    00109 CocoaSubdriver *QZ_CreateFullscreenSubdriver(int width, int height, int bpp);
    00110
    00111 #ifdef ENABLE_COCOA_QUICKDRAW
    00112 CocoaSubdriver *QZ_CreateWindowQuickdrawSubdriver(int width, int height, int bpp);
    00113 #endif
    00114
    00115 #ifdef ENABLE_COCOA_QUARTZ
    00116 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
    00117 CocoaSubdriver *QZ_CreateWindowQuartzSubdriver(int width, int height, int bpp);
    00118 #endif
    00119 #endif
    00120
    00121 void QZ_GameSizeChanged();
    00122
    00123 void QZ_GameLoop();
    00124
    00125 uint QZ_ListModes(OTTD_Point *modes, uint max_modes, CGDirectDisplayID display_id, int display_depth);
    00126
    00128 @interface NSCursor (OTTD_QuickdrawCursor)
    00129 + (NSCursor *) clearCocoaCursor;
    00130 @end
    00131
    00133 @interface OTTD_CocoaWindow : NSWindow {
    00134   CocoaSubdriver *driver;
    00135 }
    00136
    00137 - (void)setDriver:(CocoaSubdriver*)drv;
    00138
    00139 - (void)miniaturize:(id)sender;
    00140 - (void)display;
    00141 - (void)setFrame:(NSRect)frameRect display:(BOOL)flag;
    00142 - (void)appDidHide:(NSNotification*)note;
    00143 - (void)appWillUnhide:(NSNotification*)note;
    00144 - (void)appDidUnhide:(NSNotification*)note;
    00145 - (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag;
    00146 @end
    00147
    00149 @interface OTTD_CocoaView : NSView {
    00150   CocoaSubdriver *driver;
    00151   NSTrackingRectTag trackingtag;
    00152 }
    00153 - (void)setDriver:(CocoaSubdriver*)drv;
    00154 - (void)drawRect:(NSRect)rect;
    00155 - (BOOL)isOpaque;
    00156 - (BOOL)acceptsFirstResponder;
    00157 - (BOOL)becomeFirstResponder;
    00158 - (void)setTrackingRect;
    00159 - (void)clearTrackingRect;
    00160 - (void)resetCursorRects;
    00161 - (void)viewWillMoveToWindow:(NSWindow *)win;
    00162 - (void)viewDidMoveToWindow;
    00163 - (void)mouseEntered:(NSEvent *)theEvent;
    00164 - (void)mouseExited:(NSEvent *)theEvent;
    00165 @end
    00166
    00168 @interface OTTD_CocoaWindowDelegate : NSObject {
    00169   CocoaSubdriver *driver;
    00170 }
    00171
    00172 - (void)setDriver:(CocoaSubdriver*)drv;
    00173
    00174 - (BOOL)windowShouldClose:(id)sender;
    00175 @end
    00176
    00177
    00178 #endif /* VIDEO_COCOA_H */