Panda3D
cocoaGraphicsWindow.h
Go to the documentation of this file.
1 /**
2  * PANDA 3D SOFTWARE
3  * Copyright (c) Carnegie Mellon University. All rights reserved.
4  *
5  * All use of this software is subject to the terms of the revised BSD
6  * license. You should have received a copy of this license along
7  * with this source code in a file named "LICENSE."
8  *
9  * @file cocoaGraphicsWindow.h
10  * @author rdb
11  * @date 2012-05-14
12  */
13 
14 #ifndef COCOAGRAPHICSWINDOW_H
15 #define COCOAGRAPHICSWINDOW_H
16 
17 #include "pandabase.h"
18 
19 #include "cocoaGraphicsPipe.h"
20 #include "graphicsWindow.h"
21 
22 #import <AppKit/NSEvent.h>
23 #import <AppKit/NSView.h>
24 #import <AppKit/NSWindow.h>
25 
26 #import <CoreVideo/CoreVideo.h>
27 
28 /**
29  * An interface to the Cocoa system for managing OpenGL windows under Mac OS
30  * X.
31  */
33 public:
35  const std::string &name,
36  const FrameBufferProperties &fb_prop,
37  const WindowProperties &win_prop,
38  int flags,
40  GraphicsOutput *host);
41  virtual ~CocoaGraphicsWindow();
42 
43  virtual bool move_pointer(int device, int x, int y);
44  virtual bool begin_frame(FrameMode mode, Thread *current_thread);
45  virtual void end_frame(FrameMode mode, Thread *current_thread);
46  virtual void end_flip();
47 
48  virtual void process_events();
49  virtual void set_properties_now(WindowProperties &properties);
50 
51  void handle_move_event();
52  void handle_resize_event();
53  void handle_minimize_event(bool minimized);
54  void handle_foreground_event(bool foreground);
55  bool handle_close_request();
56  void handle_close_event();
57  void handle_key_event(NSEvent *event);
58  void handle_mouse_button_event(int button, bool down);
59  void handle_mouse_moved_event(bool in_window, double x, double y, bool absolute);
60  void handle_wheel_event(double x, double y);
61  virtual ButtonMap *get_keyboard_map() const;
62 
63  INLINE NSWindow *get_nswindow() const;
64  INLINE NSView *get_nsview() const;
65 
66 protected:
67  virtual void close_window();
68  virtual bool open_window();
69 
70 #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
71  CGDisplayModeRef find_display_mode(int width, int height);
72  bool do_switch_fullscreen(CGDisplayModeRef mode);
73 #else
74  CFDictionaryRef find_display_mode(int width, int height);
75  bool do_switch_fullscreen(CFDictionaryRef mode);
76 #endif
77 
78  virtual void mouse_mode_absolute();
79  virtual void mouse_mode_relative();
80 
81 private:
82  NSImage *load_image(const Filename &filename);
83 
84  void handle_modifier(NSUInteger modifierFlags, NSUInteger mask, ButtonHandle button);
85  ButtonHandle map_key(unsigned short c) const;
86  ButtonHandle map_raw_key(unsigned short keycode) const;
87 
88 private:
89  NSWindow *_window;
90  NSView *_view;
91  NSUInteger _modifier_keys;
92  UInt32 _dead_key_state;
93  CGDirectDisplayID _display;
94  PT(GraphicsWindowInputDevice) _input;
95  bool _mouse_hidden;
96  bool _context_needs_update;
97  bool _vsync_enabled = false;
98 
99 #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
100  CGDisplayModeRef _fullscreen_mode;
101  CGDisplayModeRef _windowed_mode;
102 #else
103  CFDictionaryRef _fullscreen_mode;
104  CFDictionaryRef _windowed_mode;
105 #endif
106 
108  IconImages _images;
109 
110 public:
111  // Just so CocoaPandaView can access it.
112  NSCursor *_cursor;
113 
114 public:
115  static TypeHandle get_class_type() {
116  return _type_handle;
117  }
118  static void init_type() {
119  GraphicsWindow::init_type();
120  register_type(_type_handle, "CocoaGraphicsWindow",
121  GraphicsWindow::get_class_type());
122  }
123  virtual TypeHandle get_type() const {
124  return get_class_type();
125  }
126  virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
127 
128 private:
129  static TypeHandle _type_handle;
130 };
131 
132 #include "cocoaGraphicsWindow.I"
133 
134 #endif
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
virtual void end_frame(FrameMode mode, Thread *current_thread)
This function will be called within the draw thread after rendering is completed for a given frame.
virtual void end_flip()
This function will be called within the draw thread after begin_flip() has been called on all windows...
void register_type(TypeHandle &type_handle, const std::string &name)
This inline function is just a convenient way to call TypeRegistry::register_type(),...
Definition: register_type.I:22
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
virtual bool begin_frame(FrameMode mode, Thread *current_thread)
This function will be called within the draw thread before beginning rendering for a given frame.
A window, fullscreen or on a desktop, into which a graphics device sends its output for interactive d...
A ButtonHandle represents a single button from any device, including keyboard buttons and mouse butto...
Definition: buttonHandle.h:26
virtual void set_properties_now(WindowProperties &properties)
Applies the requested set of properties to the window, if possible, for instance to request a change ...
A container for the various kinds of properties we might ask to have on a graphics window before we o...
NSView * get_nsview() const
Returns a pointer to the underlying NSView.
virtual bool move_pointer(int device, int x, int y)
Forces the pointer to the indicated position within the window, if possible.
The name of a file, such as a texture file or an Egg file.
Definition: filename.h:39
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
An object to create GraphicsOutputs that share a particular 3-D API.
Definition: graphicsPipe.h:52
This is a virtual input device that represents the keyboard and mouse pair that is associated with a ...
NSWindow * get_nswindow() const
Returns a pointer to the underlying NSWindow.
virtual void process_events()
Do whatever processing is necessary to ensure that the window responds to user events.
This is a base class for the various different classes that represent the result of a frame of render...
A thread; that is, a lightweight process.
Definition: thread.h:46
Encapsulates all the communication with a particular instance of a given rendering backend.
virtual ButtonMap * get_keyboard_map() const
Returns a ButtonMap containing the association between raw buttons and virtual buttons.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This class is the main interface to controlling the render process.
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81
A container for the various kinds of properties we might ask to have on a graphics frameBuffer before...
This class represents a map containing all of the buttons of a (keyboard) device, though it can also ...
Definition: buttonMap.h:30
An interface to the Cocoa system for managing OpenGL windows under Mac OS X.