diff options
Diffstat (limited to 'intern/ghost/intern/GHOST_SystemCocoa.h')
-rw-r--r-- | intern/ghost/intern/GHOST_SystemCocoa.h | 546 |
1 files changed, 271 insertions, 275 deletions
diff --git a/intern/ghost/intern/GHOST_SystemCocoa.h b/intern/ghost/intern/GHOST_SystemCocoa.h index 289b084cc71..9206ef90ee7 100644 --- a/intern/ghost/intern/GHOST_SystemCocoa.h +++ b/intern/ghost/intern/GHOST_SystemCocoa.h @@ -26,12 +26,11 @@ #define __GHOST_SYSTEMCOCOA_H__ #ifndef __APPLE__ -#error Apple OSX only! -#endif // __APPLE__ +# error Apple OSX only! +#endif // __APPLE__ //#define __CARBONSOUND__ - #include "GHOST_System.h" class GHOST_EventCursor; @@ -39,278 +38,275 @@ class GHOST_EventKey; class GHOST_EventWindow; class GHOST_WindowCocoa; - class GHOST_SystemCocoa : public GHOST_System { -public: - /** - * Constructor. - */ - GHOST_SystemCocoa(); - - /** - * Destructor. - */ - ~GHOST_SystemCocoa(); - - /*************************************************************************************** - * Time(r) functionality - ***************************************************************************************/ - - /** - * Returns the system time. - * Returns the number of milliseconds since the start of the system process. - * Based on ANSI clock() routine. - * \return The number of milliseconds. - */ - GHOST_TUns64 getMilliSeconds() const; - - /*************************************************************************************** - * Display/window management functionality - ***************************************************************************************/ - - /** - * Returns the number of displays on this system. - * \return The number of displays. - */ - GHOST_TUns8 getNumDisplays() const; - - /** - * Returns the dimensions of the main display on this system. - * \return The dimension of the main display. - */ - void getMainDisplayDimensions(GHOST_TUns32& width, GHOST_TUns32& height) const; - - /** Returns the combine dimensions of all monitors. - * \return The dimension of the workspace. - */ - void getAllDisplayDimensions(GHOST_TUns32& width, GHOST_TUns32& height) const; - - /** - * Create a new window. - * The new window is added to the list of windows managed. - * Never explicitly delete the window, use disposeWindow() instead. - * \param title The name of the window (displayed in the title bar of the window if the OS supports it). - * \param left The coordinate of the left edge of the window. - * \param top The coordinate of the top edge of the window. - * \param width The width the window. - * \param height The height the window. - * \param state The state of the window when opened. - * \param type The type of drawing context installed in this window. - * \param glSettings: Misc OpenGL settings. - * \param exclusive: Use to show the window ontop and ignore others (used fullscreen). - * \param parentWindow Parent (embedder) window - * \return The new window (or 0 if creation failed). - */ - GHOST_IWindow *createWindow( - const STR_String& title, - GHOST_TInt32 left, - GHOST_TInt32 top, - GHOST_TUns32 width, - GHOST_TUns32 height, - GHOST_TWindowState state, - GHOST_TDrawingContextType type, - GHOST_GLSettings glSettings, - const bool exclusive = false, - const GHOST_TEmbedderWindowID parentWindow = 0 - ); - - /** - * Create a new offscreen context. - * Never explicitly delete the context, use disposeContext() instead. - * \return The new context (or 0 if creation failed). - */ - GHOST_IContext * - createOffscreenContext( - ); - - /** - * Dispose of a context. - * \param context Pointer to the context to be disposed. - * \return Indication of success. - */ - GHOST_TSuccess - disposeContext( - GHOST_IContext *context - ); - - /*************************************************************************************** - * Event management functionality - ***************************************************************************************/ - - /** - * Gets events from the system and stores them in the queue. - * \param waitForEvent Flag to wait for an event (or return immediately). - * \return Indication of the presence of events. - */ - bool processEvents(bool waitForEvent); - - /** - * Handle User request to quit, from Menu bar Quit, and Cmd+Q - * Display alert panel if changes performed since last save - */ - GHOST_TUns8 handleQuitRequest(); - - /** - * Handle Cocoa openFile event - * Display confirmation request panel if changes performed since last save - */ - bool handleOpenDocumentRequest(void *filepathStr); - - /** - * Handles a drag'n'drop destination event. Called by GHOST_WindowCocoa window subclass - * \param eventType The type of drag'n'drop event - * \param draggedObjectType The type object concerned (currently array of file names, string, TIFF image) - * \param mouseX x mouse coordinate (in cocoa base window coordinates) - * \param mouseY y mouse coordinate - * \param window The window on which the event occurred - * \return Indication whether the event was handled. - */ - GHOST_TSuccess handleDraggingEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType, - GHOST_WindowCocoa *window, int mouseX, int mouseY, void *data); - - /*************************************************************************************** - * Cursor management functionality - ***************************************************************************************/ - - /** - * Returns the current location of the cursor (location in screen coordinates) - * \param x The x-coordinate of the cursor. - * \param y The y-coordinate of the cursor. - * \return Indication of success. - */ - GHOST_TSuccess getCursorPosition(GHOST_TInt32& x, GHOST_TInt32& y) const; - - /** - * Updates the location of the cursor (location in screen coordinates). - * \param x The x-coordinate of the cursor. - * \param y The y-coordinate of the cursor. - * \return Indication of success. - */ - GHOST_TSuccess setCursorPosition(GHOST_TInt32 x, GHOST_TInt32 y); - - /*************************************************************************************** - * Access to mouse button and keyboard states. - ***************************************************************************************/ - - /** - * Returns the state of all modifier keys. - * \param keys The state of all modifier keys (true == pressed). - * \return Indication of success. - */ - GHOST_TSuccess getModifierKeys(GHOST_ModifierKeys& keys) const; - - /** - * Returns the state of the mouse buttons (ouside the message queue). - * \param buttons The state of the buttons. - * \return Indication of success. - */ - GHOST_TSuccess getButtons(GHOST_Buttons& buttons) const; - - /** - * Returns Clipboard data - * \param selection Indicate which buffer to return - * \return Returns the selected buffer - */ - GHOST_TUns8 *getClipboard(bool selection) const; - - /** - * Puts buffer to system clipboard - * \param buffer The buffer to be copied - * \param selection Indicates which buffer to copy too, only used on X11 - */ - void putClipboard(GHOST_TInt8 *buffer, bool selection) const; - - /** - * Handles a window event. Called by GHOST_WindowCocoa window delegate - * \param eventType The type of window event - * \param window The window on which the event occurred - * \return Indication whether the event was handled. - */ - GHOST_TSuccess handleWindowEvent(GHOST_TEventType eventType, GHOST_WindowCocoa *window); - - /** - * Handles the Cocoa event telling the application has become active (again) - * \return Indication whether the event was handled. - */ - GHOST_TSuccess handleApplicationBecomeActiveEvent(); - - /** - * External objects should call this when they send an event outside processEvents. - */ - void notifyExternalEventProcessed(); - - /** - * \see GHOST_ISystem - */ - int toggleConsole(int action) { - return 0; - } - - /** - * Handles a tablet event. - * \param eventPtr An NSEvent pointer (casted to void* to enable compilation in standard C++) - * \param eventType The type of the event. - * It needs to be passed separately as it can be either directly in the event type, - * or as a subtype if combined with a mouse button event. - * \return Indication whether the event was handled. - */ - GHOST_TSuccess handleTabletEvent(void *eventPtr, short eventType); - bool handleTabletEvent(void *eventPtr); - - /** - * Handles a mouse event. - * \param eventPtr An NSEvent pointer (casted to void* to enable compilation in standard C++) - * \return Indication whether the event was handled. - */ - GHOST_TSuccess handleMouseEvent(void *eventPtr); - - /** - * Handles a key event. - * \param eventPtr An NSEvent pointer (casted to void* to enable compilation in standard C++) - * \return Indication whether the event was handled. - */ - GHOST_TSuccess handleKeyEvent(void *eventPtr); - - /** - * Informs if the system provides native dialogs (eg. confirm quit) - */ - virtual bool supportsNativeDialogs(void); - -protected: - /** - * Initializes the system. - * For now, it just registers the window class (WNDCLASS). - * \return A success value. - */ - GHOST_TSuccess init(); - - /** - * Performs the actual cursor position update (location in screen coordinates). - * \param x The x-coordinate of the cursor. - * \param y The y-coordinate of the cursor. - * \return Indication of success. - */ - GHOST_TSuccess setMouseCursorPosition(GHOST_TInt32 x, GHOST_TInt32 y); - - /** Start time at initialization. */ - GHOST_TUns64 m_start_time; - - /** Event has been processed directly by Cocoa (or NDOF manager) and has sent a ghost event to be dispatched */ - bool m_outsideLoopEventProcessed; - - /** Raised window is not yet known by the window manager, so delay application become active event handling */ - bool m_needDelayedApplicationBecomeActiveEventProcessing; - - /** State of the modifiers. */ - GHOST_TUns32 m_modifierMask; - - /** Ignores window size messages (when window is dragged). */ - bool m_ignoreWindowSizedMessages; - - /** Temporarily ignore momentum scroll events */ - bool m_ignoreMomentumScroll; - /** Is the scroll wheel event generated by a multitouch trackpad or mouse? */ - bool m_multiTouchScroll; + public: + /** + * Constructor. + */ + GHOST_SystemCocoa(); + + /** + * Destructor. + */ + ~GHOST_SystemCocoa(); + + /*************************************************************************************** + * Time(r) functionality + ***************************************************************************************/ + + /** + * Returns the system time. + * Returns the number of milliseconds since the start of the system process. + * Based on ANSI clock() routine. + * \return The number of milliseconds. + */ + GHOST_TUns64 getMilliSeconds() const; + + /*************************************************************************************** + * Display/window management functionality + ***************************************************************************************/ + + /** + * Returns the number of displays on this system. + * \return The number of displays. + */ + GHOST_TUns8 getNumDisplays() const; + + /** + * Returns the dimensions of the main display on this system. + * \return The dimension of the main display. + */ + void getMainDisplayDimensions(GHOST_TUns32 &width, GHOST_TUns32 &height) const; + + /** Returns the combine dimensions of all monitors. + * \return The dimension of the workspace. + */ + void getAllDisplayDimensions(GHOST_TUns32 &width, GHOST_TUns32 &height) const; + + /** + * Create a new window. + * The new window is added to the list of windows managed. + * Never explicitly delete the window, use disposeWindow() instead. + * \param title The name of the window (displayed in the title bar of the window if the OS supports it). + * \param left The coordinate of the left edge of the window. + * \param top The coordinate of the top edge of the window. + * \param width The width the window. + * \param height The height the window. + * \param state The state of the window when opened. + * \param type The type of drawing context installed in this window. + * \param glSettings: Misc OpenGL settings. + * \param exclusive: Use to show the window ontop and ignore others (used fullscreen). + * \param parentWindow Parent (embedder) window + * \return The new window (or 0 if creation failed). + */ + GHOST_IWindow *createWindow(const STR_String &title, + GHOST_TInt32 left, + GHOST_TInt32 top, + GHOST_TUns32 width, + GHOST_TUns32 height, + GHOST_TWindowState state, + GHOST_TDrawingContextType type, + GHOST_GLSettings glSettings, + const bool exclusive = false, + const GHOST_TEmbedderWindowID parentWindow = 0); + + /** + * Create a new offscreen context. + * Never explicitly delete the context, use disposeContext() instead. + * \return The new context (or 0 if creation failed). + */ + GHOST_IContext *createOffscreenContext(); + + /** + * Dispose of a context. + * \param context Pointer to the context to be disposed. + * \return Indication of success. + */ + GHOST_TSuccess disposeContext(GHOST_IContext *context); + + /*************************************************************************************** + * Event management functionality + ***************************************************************************************/ + + /** + * Gets events from the system and stores them in the queue. + * \param waitForEvent Flag to wait for an event (or return immediately). + * \return Indication of the presence of events. + */ + bool processEvents(bool waitForEvent); + + /** + * Handle User request to quit, from Menu bar Quit, and Cmd+Q + * Display alert panel if changes performed since last save + */ + GHOST_TUns8 handleQuitRequest(); + + /** + * Handle Cocoa openFile event + * Display confirmation request panel if changes performed since last save + */ + bool handleOpenDocumentRequest(void *filepathStr); + + /** + * Handles a drag'n'drop destination event. Called by GHOST_WindowCocoa window subclass + * \param eventType The type of drag'n'drop event + * \param draggedObjectType The type object concerned (currently array of file names, string, TIFF image) + * \param mouseX x mouse coordinate (in cocoa base window coordinates) + * \param mouseY y mouse coordinate + * \param window The window on which the event occurred + * \return Indication whether the event was handled. + */ + GHOST_TSuccess handleDraggingEvent(GHOST_TEventType eventType, + GHOST_TDragnDropTypes draggedObjectType, + GHOST_WindowCocoa *window, + int mouseX, + int mouseY, + void *data); + + /*************************************************************************************** + * Cursor management functionality + ***************************************************************************************/ + + /** + * Returns the current location of the cursor (location in screen coordinates) + * \param x The x-coordinate of the cursor. + * \param y The y-coordinate of the cursor. + * \return Indication of success. + */ + GHOST_TSuccess getCursorPosition(GHOST_TInt32 &x, GHOST_TInt32 &y) const; + + /** + * Updates the location of the cursor (location in screen coordinates). + * \param x The x-coordinate of the cursor. + * \param y The y-coordinate of the cursor. + * \return Indication of success. + */ + GHOST_TSuccess setCursorPosition(GHOST_TInt32 x, GHOST_TInt32 y); + + /*************************************************************************************** + * Access to mouse button and keyboard states. + ***************************************************************************************/ + + /** + * Returns the state of all modifier keys. + * \param keys The state of all modifier keys (true == pressed). + * \return Indication of success. + */ + GHOST_TSuccess getModifierKeys(GHOST_ModifierKeys &keys) const; + + /** + * Returns the state of the mouse buttons (ouside the message queue). + * \param buttons The state of the buttons. + * \return Indication of success. + */ + GHOST_TSuccess getButtons(GHOST_Buttons &buttons) const; + + /** + * Returns Clipboard data + * \param selection Indicate which buffer to return + * \return Returns the selected buffer + */ + GHOST_TUns8 *getClipboard(bool selection) const; + + /** + * Puts buffer to system clipboard + * \param buffer The buffer to be copied + * \param selection Indicates which buffer to copy too, only used on X11 + */ + void putClipboard(GHOST_TInt8 *buffer, bool selection) const; + + /** + * Handles a window event. Called by GHOST_WindowCocoa window delegate + * \param eventType The type of window event + * \param window The window on which the event occurred + * \return Indication whether the event was handled. + */ + GHOST_TSuccess handleWindowEvent(GHOST_TEventType eventType, GHOST_WindowCocoa *window); + + /** + * Handles the Cocoa event telling the application has become active (again) + * \return Indication whether the event was handled. + */ + GHOST_TSuccess handleApplicationBecomeActiveEvent(); + + /** + * External objects should call this when they send an event outside processEvents. + */ + void notifyExternalEventProcessed(); + + /** + * \see GHOST_ISystem + */ + int toggleConsole(int action) + { + return 0; + } + + /** + * Handles a tablet event. + * \param eventPtr An NSEvent pointer (casted to void* to enable compilation in standard C++) + * \param eventType The type of the event. + * It needs to be passed separately as it can be either directly in the event type, + * or as a subtype if combined with a mouse button event. + * \return Indication whether the event was handled. + */ + GHOST_TSuccess handleTabletEvent(void *eventPtr, short eventType); + bool handleTabletEvent(void *eventPtr); + + /** + * Handles a mouse event. + * \param eventPtr An NSEvent pointer (casted to void* to enable compilation in standard C++) + * \return Indication whether the event was handled. + */ + GHOST_TSuccess handleMouseEvent(void *eventPtr); + + /** + * Handles a key event. + * \param eventPtr An NSEvent pointer (casted to void* to enable compilation in standard C++) + * \return Indication whether the event was handled. + */ + GHOST_TSuccess handleKeyEvent(void *eventPtr); + + /** + * Informs if the system provides native dialogs (eg. confirm quit) + */ + virtual bool supportsNativeDialogs(void); + + protected: + /** + * Initializes the system. + * For now, it just registers the window class (WNDCLASS). + * \return A success value. + */ + GHOST_TSuccess init(); + + /** + * Performs the actual cursor position update (location in screen coordinates). + * \param x The x-coordinate of the cursor. + * \param y The y-coordinate of the cursor. + * \return Indication of success. + */ + GHOST_TSuccess setMouseCursorPosition(GHOST_TInt32 x, GHOST_TInt32 y); + + /** Start time at initialization. */ + GHOST_TUns64 m_start_time; + + /** Event has been processed directly by Cocoa (or NDOF manager) and has sent a ghost event to be dispatched */ + bool m_outsideLoopEventProcessed; + + /** Raised window is not yet known by the window manager, so delay application become active event handling */ + bool m_needDelayedApplicationBecomeActiveEventProcessing; + + /** State of the modifiers. */ + GHOST_TUns32 m_modifierMask; + + /** Ignores window size messages (when window is dragged). */ + bool m_ignoreWindowSizedMessages; + + /** Temporarily ignore momentum scroll events */ + bool m_ignoreMomentumScroll; + /** Is the scroll wheel event generated by a multitouch trackpad or mouse? */ + bool m_multiTouchScroll; }; -#endif // __GHOST_SYSTEMCOCOA_H__ +#endif // __GHOST_SYSTEMCOCOA_H__ |