Cleanup: remove redundant doxygen \file argument
[blender.git] / intern / ghost / intern / GHOST_System.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file \ingroup GHOST
21  * Declaration of GHOST_System class.
22  */
23
24 #ifndef __GHOST_SYSTEM_H__
25 #define __GHOST_SYSTEM_H__
26
27 #include "GHOST_ISystem.h"
28
29 #include "GHOST_Debug.h"
30 #include "GHOST_Buttons.h"
31 #include "GHOST_ModifierKeys.h"
32 #include "GHOST_EventManager.h"
33 #ifdef GHOST_DEBUG
34 #include "GHOST_EventPrinter.h"
35 #endif // GHOST_DEBUG
36
37 class GHOST_DisplayManager;
38 class GHOST_Event;
39 class GHOST_TimerManager;
40 class GHOST_Window;
41 class GHOST_WindowManager;
42 #ifdef WITH_INPUT_NDOF
43 class GHOST_NDOFManager;
44 #endif
45
46 /**
47  * Implementation of platform independent functionality of the GHOST_ISystem
48  * interface.
49  * GHOST_System is an abstract class because not all methods of GHOST_ISystem
50  * are implemented.
51  * \see GHOST_ISystem.
52  */
53 class GHOST_System : public GHOST_ISystem
54 {
55 protected:
56         /**
57          * Constructor.
58          * Protected default constructor to force use of static createSystem member.
59          */
60         GHOST_System();
61
62         /**
63          * Destructor.
64          * Protected default constructor to force use of static dispose member.
65          */
66         virtual ~GHOST_System();
67
68 public:
69         /***************************************************************************************
70          * Time(r) functionality
71          ***************************************************************************************/
72
73         /**
74          * Returns the system time.
75          * Returns the number of milliseconds since the start of the system process.
76          * Based on ANSI clock() routine.
77          * \return The number of milliseconds.
78          */
79         virtual GHOST_TUns64 getMilliSeconds() const;
80
81         /**
82          * Installs a timer.
83          * Note that, on most operating systems, messages need to be processed in order
84          * for the timer callbacks to be invoked.
85          * \param delay         The time to wait for the first call to the timerProc (in milliseconds)
86          * \param interval      The interval between calls to the timerProc
87          * \param timerProc     The callback invoked when the interval expires,
88          * \param userData      Placeholder for user data.
89          * \return A timer task (0 if timer task installation failed).
90          */
91         GHOST_ITimerTask *installTimer(GHOST_TUns64 delay,
92                                                GHOST_TUns64 interval,
93                                                GHOST_TimerProcPtr timerProc,
94                                                GHOST_TUserDataPtr userData = NULL);
95
96         /**
97          * Removes a timer.
98          * \param timerTask Timer task to be removed.
99          * \return Indication of success.
100          */
101         GHOST_TSuccess removeTimer(GHOST_ITimerTask *timerTask);
102
103         /***************************************************************************************
104          * Display/window management functionality
105          ***************************************************************************************/
106
107         /**
108          * Inherited from GHOST_ISystem but left pure virtual
109          *
110          * virtual      GHOST_TUns8 getNumDisplays() const = 0;
111          * virtual void getMainDisplayDimensions(...) const = 0;
112          * virtual GHOST_IWindow* createWindow(..)
113          */
114
115         /**
116          * Dispose a window.
117          * \param       window Pointer to the window to be disposed.
118          * \return      Indication of success.
119          */
120         GHOST_TSuccess disposeWindow(GHOST_IWindow *window);
121
122         /**
123          * Returns whether a window is valid.
124          * \param       window Pointer to the window to be checked.
125          * \return      Indication of validity.
126          */
127         bool validWindow(GHOST_IWindow *window);
128
129         /**
130          * Begins full screen mode.
131          * \param setting       The new setting of the display.
132          * \param window        Window displayed in full screen.
133          * \param stereoVisual  Stereo visual for quad buffered stereo.
134          * This window is invalid after full screen has been ended.
135          * \return      Indication of success.
136          */
137         GHOST_TSuccess beginFullScreen(const GHOST_DisplaySetting& setting, GHOST_IWindow **window,
138                                        const bool stereoVisual, const bool alphaBackground, const GHOST_TUns16 numOfAASamples = 0);
139
140         /**
141          * Updates the resolution while in fullscreen mode.
142          * \param setting       The new setting of the display.
143          * \param window        Window displayed in full screen.
144          *
145          * \return      Indication of success.
146          */
147         GHOST_TSuccess updateFullScreen(const GHOST_DisplaySetting& setting, GHOST_IWindow **window);
148
149         /**
150          * Ends full screen mode.
151          * \return      Indication of success.
152          */
153         GHOST_TSuccess endFullScreen(void);
154
155         /**
156          * Returns current full screen mode status.
157          * \return The current status.
158          */
159         bool getFullScreen(void);
160
161
162         /**
163          * Native pixel size support (MacBook 'retina').
164          * \return The pixel size in float.
165          */
166         bool useNativePixel(void);
167         bool m_nativePixel;
168
169         /**
170          * Focus window after opening, or put them in the background.
171          */
172         void useWindowFocus(const bool use_focus);
173         bool m_windowFocus;
174
175         /***************************************************************************************
176          * Event management functionality
177          ***************************************************************************************/
178
179         /**
180          * Inherited from GHOST_ISystem but left pure virtual
181          *
182          * virtual bool processEvents(bool waitForEvent) = 0;
183          */
184
185
186
187         /**
188          * Dispatches all the events on the stack.
189          * The event stack will be empty afterwards.
190          */
191         void dispatchEvents();
192
193         /**
194          * Adds the given event consumer to our list.
195          * \param consumer The event consumer to add.
196          * \return Indication of success.
197          */
198         GHOST_TSuccess addEventConsumer(GHOST_IEventConsumer *consumer);
199
200         /**
201          * Remove the given event consumer to our list.
202          * \param consumer The event consumer to remove.
203          * \return Indication of success.
204          */
205         GHOST_TSuccess removeEventConsumer(GHOST_IEventConsumer *consumer);
206
207         /***************************************************************************************
208          * Cursor management functionality
209          ***************************************************************************************/
210
211         /**
212          * Inherited from GHOST_ISystem but left pure virtual
213          * <pre>
214          * GHOST_TSuccess getCursorPosition(GHOST_TInt32& x, GHOST_TInt32& y) const = 0;
215          * GHOST_TSuccess setCursorPosition(GHOST_TInt32 x, GHOST_TInt32 y)
216          * </pre>
217          */
218
219         /***************************************************************************************
220          * Access to mouse button and keyboard states.
221          ***************************************************************************************/
222
223         /**
224          * Returns the state of a modifier key (ouside the message queue).
225          * \param mask          The modifier key state to retrieve.
226          * \param isDown        The state of a modifier key (true == pressed).
227          * \return                      Indication of success.
228          */
229         GHOST_TSuccess getModifierKeyState(GHOST_TModifierKeyMask mask, bool& isDown) const;
230
231         /**
232          * Returns the state of a mouse button (ouside the message queue).
233          * \param mask          The button state to retrieve.
234          * \param isDown        Button state.
235          * \return                      Indication of success.
236          */
237         GHOST_TSuccess getButtonState(GHOST_TButtonMask mask, bool& isDown) const;
238
239         /**
240          * Set which tablet API to use. Only affects Windows, other platforms have a single API.
241          * \param api Enum indicating which API to use.
242          */
243         void setTabletAPI(GHOST_TTabletAPI api);
244
245         /**
246          * Test if given tablet API should be used by event handling.
247          */
248         bool useTabletAPI(GHOST_TTabletAPI api) const;
249
250 #ifdef WITH_INPUT_NDOF
251         /***************************************************************************************
252          * Access to 3D mouse.
253          ***************************************************************************************/
254
255         /**
256          * Sets 3D mouse deadzone
257          * \param deadzone: Deadzone of the 3D mouse (both for rotation and pan) relative to full range
258          */
259         void setNDOFDeadZone(float deadzone);
260 #endif
261
262         /***************************************************************************************
263          * Other (internal) functionality.
264          ***************************************************************************************/
265
266         /**
267          * Pushes an event on the stack.
268          * To dispatch it, call dispatchEvent() or dispatchEvents().
269          * Do not delete the event!
270          * \param event The event to push on the stack.
271          */
272         GHOST_TSuccess pushEvent(GHOST_IEvent *event);
273
274         /**
275          * \return The timer manager.
276          */
277         inline GHOST_TimerManager *getTimerManager() const;
278
279         /**
280          * \return A pointer to our event manager.
281          */
282         inline GHOST_EventManager *getEventManager() const;
283
284         /**
285          * \return A pointer to our window manager.
286          */
287         inline GHOST_WindowManager *getWindowManager() const;
288
289 #ifdef WITH_INPUT_NDOF
290         /**
291          * \return A pointer to our n-degree of freedom manager.
292          */
293         inline GHOST_NDOFManager *getNDOFManager() const;
294 #endif
295
296         /**
297          * Returns the state of all modifier keys.
298          * \param keys  The state of all modifier keys (true == pressed).
299          * \return              Indication of success.
300          */
301         virtual GHOST_TSuccess getModifierKeys(GHOST_ModifierKeys& keys) const = 0;
302
303         /**
304          * Returns the state of the mouse buttons (ouside the message queue).
305          * \param buttons       The state of the buttons.
306          * \return                      Indication of success.
307          */
308         virtual GHOST_TSuccess getButtons(GHOST_Buttons& buttons) const = 0;
309
310         /**
311          * Returns the selection buffer
312          * \param selection             Only used on X11
313          * \return              Returns the clipboard data
314          *
315          */
316         virtual GHOST_TUns8 *getClipboard(bool selection) const = 0;
317
318         /**
319          * Put data to the Clipboard
320          * \param buffer                The buffer to copy to the clipboard
321          * \param selection     The clipboard to copy too only used on X11
322          */
323         virtual void putClipboard(GHOST_TInt8 *buffer, bool selection) const = 0;
324
325         /**
326          * Confirms quitting he program when there is just one window left open
327          * in the application
328          */
329         virtual int confirmQuit(GHOST_IWindow *window) const;
330
331         /**
332          * Informs if the system provides native dialogs (eg. confirm quit)
333          */
334         virtual bool supportsNativeDialogs(void);
335
336
337 protected:
338         /**
339          * Initialize the system.
340          * \return Indication of success.
341          */
342         virtual GHOST_TSuccess init();
343
344         /**
345          * Shut the system down.
346          * \return Indication of success.
347          */
348         virtual GHOST_TSuccess exit();
349
350         /**
351          * Creates a fullscreen window.
352          * \param window The window created.
353          * \return Indication of success.
354          */
355         GHOST_TSuccess createFullScreenWindow(GHOST_Window **window, const GHOST_DisplaySetting &settings,
356                                               const bool stereoVisual, const bool alphaBackground = 0, const GHOST_TUns16 numOfAASamples = 0);
357
358         /** The display manager (platform dependent). */
359         GHOST_DisplayManager *m_displayManager;
360
361         /** The timer manager. */
362         GHOST_TimerManager *m_timerManager;
363
364         /** The window manager. */
365         GHOST_WindowManager *m_windowManager;
366
367         /** The event manager. */
368         GHOST_EventManager *m_eventManager;
369
370 #ifdef WITH_INPUT_NDOF
371         /** The N-degree of freedom device manager */
372         GHOST_NDOFManager *m_ndofManager;
373 #endif
374
375         /** Prints all the events. */
376 #ifdef GHOST_DEBUG
377         GHOST_EventPrinter *m_eventPrinter;
378 #endif // GHOST_DEBUG
379
380         /** Settings of the display before the display went fullscreen. */
381         GHOST_DisplaySetting m_preFullScreenSetting;
382
383         /** Which tablet API to use. */
384         GHOST_TTabletAPI m_tabletAPI;
385 };
386
387 inline GHOST_TimerManager *GHOST_System::getTimerManager() const
388 {
389         return m_timerManager;
390 }
391
392 inline GHOST_EventManager *GHOST_System::getEventManager() const
393 {
394         return m_eventManager;
395 }
396
397 inline GHOST_WindowManager *GHOST_System::getWindowManager() const
398 {
399         return m_windowManager;
400 }
401
402 #ifdef WITH_INPUT_NDOF
403 inline GHOST_NDOFManager *GHOST_System::getNDOFManager() const
404 {
405         return m_ndofManager;
406 }
407 #endif
408
409 #endif // __GHOST_SYSTEM_H__