00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef OSXGRAPHICSWINDOW_H
00013 #define OSXGRAPHICSWINDOW_H
00014
00015 #include "pandabase.h"
00016 #include "graphicsWindow.h"
00017 #include "buttonHandle.h"
00018
00019 #include <Carbon/Carbon.h>
00020
00021 #define __glext_h_
00022 #include <OpenGL/gl.h>
00023 #include <AGL/agl.h>
00024
00025 #define HACK_SCREEN_HASH_CONTEXT true
00026 OSStatus report_agl_error(const string &comment);
00027
00028
00029
00030
00031
00032
00033 class osxGraphicsWindow : public GraphicsWindow {
00034 public:
00035 osxGraphicsWindow(GraphicsEngine *engine, GraphicsPipe *pipe,
00036 const string &name,
00037 const FrameBufferProperties &fb_prop,
00038 const WindowProperties &win_prop,
00039 int flags,
00040 GraphicsStateGuardian *gsg,
00041 GraphicsOutput *host);
00042 virtual ~osxGraphicsWindow();
00043
00044 virtual bool move_pointer(int device, int x, int y);
00045
00046 virtual bool begin_frame(FrameMode mode, Thread *current_thread);
00047 virtual void end_frame(FrameMode mode, Thread *current_thread);
00048 virtual void begin_flip();
00049 virtual void end_flip();
00050 virtual void process_events();
00051
00052 virtual bool do_reshape_request(int x_origin, int y_origin, bool has_origin,
00053 int x_size, int y_size);
00054
00055 virtual void mouse_mode_absolute();
00056 virtual void mouse_mode_relative();
00057
00058 virtual void set_properties_now(WindowProperties &properties);
00059
00060 private:
00061 void release_system_resources(bool destructing);
00062 inline void send_key_event(ButtonHandle key, bool down);
00063
00064 protected:
00065 virtual void close_window();
00066 virtual bool open_window();
00067
00068 private:
00069 bool os_open_window(WindowProperties &properties);
00070
00071
00072
00073
00074
00075 public:
00076 OSStatus handle_key_input(EventHandlerCallRef myHandler, EventRef event,
00077 Boolean keyDown);
00078 OSStatus handle_text_input(EventHandlerCallRef myHandler, EventRef event);
00079 OSStatus handle_window_mouse_events(EventHandlerCallRef myHandler, EventRef event);
00080 ButtonHandle osx_translate_key(UInt32 key, EventRef event);
00081 static osxGraphicsWindow *get_current_osx_window(WindowRef hint);
00082
00083 void handle_modifier_delta(UInt32 new_modifiers);
00084 void handle_button_delta(UInt32 new_buttons);
00085 void do_resize();
00086
00087 OSStatus event_handler(EventHandlerCallRef myHandler, EventRef event);
00088
00089 virtual void user_close_request();
00090 void system_close_window();
00091 void system_set_window_foreground(bool foreground);
00092 void system_point_to_local_point(Point &global_point);
00093 void local_point_to_system_point(Point &local_point);
00094 AGLContext get_gsg_context();
00095 AGLContext get_context();
00096 OSStatus build_gl(bool full_screen);
00097 bool set_icon_filename(const Filename &icon_filename);
00098
00099 void set_pointer_in_window(int x, int y);
00100 void set_pointer_out_of_window();
00101
00102 private:
00103 UInt32 _last_key_modifiers;
00104 UInt32 _last_buttons;
00105 WindowRef _osx_window;
00106 bool _is_fullscreen;
00107
00108 CGImageRef _pending_icon;
00109 CGImageRef _current_icon;
00110
00111 int _ID;
00112 static osxGraphicsWindow *full_screen_window;
00113
00114 #ifdef HACK_SCREEN_HASH_CONTEXT
00115 AGLContext _holder_aglcontext;
00116 #endif
00117 CFDictionaryRef _originalMode;
00118
00119
00120 bool _cursor_hidden;
00121
00122
00123 bool _display_hide_cursor;
00124
00125 SInt32 _wheel_hdelta;
00126 SInt32 _wheel_vdelta;
00127
00128 public:
00129 static TypeHandle get_class_type() {
00130 return _type_handle;
00131 }
00132 static void init_type() {
00133 GraphicsWindow::init_type();
00134 register_type(_type_handle, "osxGraphicsWindow",
00135 GraphicsWindow::get_class_type());
00136 }
00137 virtual TypeHandle get_type() const {
00138 return get_class_type();
00139 }
00140 virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
00141
00142 private:
00143 static TypeHandle _type_handle;
00144 };
00145
00146 #include "osxGraphicsWindow.I"
00147
00148 #endif
00149