| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- /**
- * PANDA 3D SOFTWARE
- * Copyright (c) Carnegie Mellon University. All rights reserved.
- *
- * All use of this software is subject to the terms of the revised BSD
- * license. You should have received a copy of this license along
- * with this source code in a file named "LICENSE."
- *
- * @file osxGraphicsWindow.h
- */
- #ifndef OSXGRAPHICSWINDOW_H
- #define OSXGRAPHICSWINDOW_H
- #include "pandabase.h"
- #include "graphicsWindow.h"
- #include "buttonHandle.h"
- #include <Carbon/Carbon.h>
- #define __glext_h_
- #include <OpenGL/gl.h>
- #include <AGL/agl.h>
- #define HACK_SCREEN_HASH_CONTEXT true
- OSStatus report_agl_error(const std::string &comment);
- /**
- * An interface to the osx/ system for managing GL windows under X.
- */
- class osxGraphicsWindow : public GraphicsWindow {
- public:
- osxGraphicsWindow(GraphicsEngine *engine, GraphicsPipe *pipe,
- const std::string &name,
- const FrameBufferProperties &fb_prop,
- const WindowProperties &win_prop,
- int flags,
- GraphicsStateGuardian *gsg,
- GraphicsOutput *host);
- virtual ~osxGraphicsWindow();
- virtual bool move_pointer(int device, int x, int y);
- virtual bool begin_frame(FrameMode mode, Thread *current_thread);
- virtual void end_frame(FrameMode mode, Thread *current_thread);
- virtual void begin_flip();
- virtual void end_flip();
- virtual void process_events();
- virtual bool do_reshape_request(int x_origin, int y_origin, bool has_origin,
- int x_size, int y_size);
- virtual void mouse_mode_absolute();
- virtual void mouse_mode_relative();
- virtual void set_properties_now(WindowProperties &properties);
- private:
- void release_system_resources(bool destructing);
- inline void send_key_event(ButtonHandle key, bool down);
- protected:
- virtual void close_window();
- virtual bool open_window();
- private:
- bool os_open_window(WindowProperties &properties);
- // a singleton .. for the events to find the right pipe to push the event
- // into
- public: // do not call direct ..
- OSStatus handle_key_input(EventHandlerCallRef myHandler, EventRef event,
- Boolean keyDown);
- OSStatus handle_text_input(EventHandlerCallRef myHandler, EventRef event);
- OSStatus handle_window_mouse_events(EventHandlerCallRef myHandler, EventRef event);
- ButtonHandle osx_translate_key(UInt32 key, EventRef event);
- static osxGraphicsWindow *get_current_osx_window(WindowRef hint);
- void handle_modifier_delta(UInt32 new_modifiers);
- void handle_button_delta(UInt32 new_buttons);
- void do_resize();
- OSStatus event_handler(EventHandlerCallRef myHandler, EventRef event);
- virtual void user_close_request();
- void system_close_window();
- void system_set_window_foreground(bool foreground);
- void system_point_to_local_point(Point &global_point);
- void local_point_to_system_point(Point &local_point);
- AGLContext get_gsg_context();
- AGLContext get_context();
- OSStatus build_gl(bool full_screen);
- bool set_icon_filename(const Filename &icon_filename);
- void set_pointer_in_window(int x, int y);
- void set_pointer_out_of_window();
- private:
- UInt32 _last_key_modifiers;
- UInt32 _last_buttons;
- WindowRef _osx_window;
- bool _is_fullscreen;
- CGImageRef _pending_icon;
- CGImageRef _current_icon;
- int _ID;
- static osxGraphicsWindow *full_screen_window;
- #ifdef HACK_SCREEN_HASH_CONTEXT
- AGLContext _holder_aglcontext;
- #endif
- CFDictionaryRef _originalMode;
- // True if _properties.get_cursor_hidden() is true.
- bool _cursor_hidden;
- // True if the cursor is actually hidden right now via system calls.
- bool _display_hide_cursor;
- SInt32 _wheel_hdelta;
- SInt32 _wheel_vdelta;
- public:
- static TypeHandle get_class_type() {
- return _type_handle;
- }
- static void init_type() {
- GraphicsWindow::init_type();
- register_type(_type_handle, "osxGraphicsWindow",
- GraphicsWindow::get_class_type());
- }
- virtual TypeHandle get_type() const {
- return get_class_type();
- }
- virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
- private:
- static TypeHandle _type_handle;
- };
- #include "osxGraphicsWindow.I"
- #endif
|