ClangFormat: apply to source, most of intern
[blender.git] / intern / ghost / GHOST_Types.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
21  * \ingroup GHOST
22  */
23
24 #ifndef __GHOST_TYPES_H__
25 #define __GHOST_TYPES_H__
26
27 #ifdef WITH_CXX_GUARDEDALLOC
28 #  include "MEM_guardedalloc.h"
29 #endif
30
31 #if defined(WITH_CXX_GUARDEDALLOC) && defined(__cplusplus)
32 #  define GHOST_DECLARE_HANDLE(name) \
33     typedef struct name##__ { \
34       int unused; \
35       MEM_CXX_CLASS_ALLOC_FUNCS(#name) \
36     } * name
37 #else
38 #  define GHOST_DECLARE_HANDLE(name) \
39     typedef struct name##__ { \
40       int unused; \
41     } * name
42 #endif
43
44 typedef char GHOST_TInt8;
45 typedef unsigned char GHOST_TUns8;
46 typedef short GHOST_TInt16;
47 typedef unsigned short GHOST_TUns16;
48 typedef int GHOST_TInt32;
49 typedef unsigned int GHOST_TUns32;
50
51 typedef struct {
52   GHOST_TUns16 numOfAASamples;
53   int flags;
54 } GHOST_GLSettings;
55
56 typedef enum {
57   GHOST_glStereoVisual = (1 << 0),
58   GHOST_glDebugContext = (1 << 1),
59   GHOST_glAlphaBackground = (1 << 2),
60 } GHOST_GLFlags;
61
62 #ifdef _MSC_VER
63 typedef __int64 GHOST_TInt64;
64 typedef unsigned __int64 GHOST_TUns64;
65 #else
66 typedef long long GHOST_TInt64;
67 typedef unsigned long long GHOST_TUns64;
68 #endif
69
70 typedef void *GHOST_TUserDataPtr;
71
72 typedef enum { GHOST_kFailure = 0, GHOST_kSuccess } GHOST_TSuccess;
73
74 /* Xtilt and Ytilt represent how much the pen is tilted away from
75  * vertically upright in either the X or Y direction, with X and Y the
76  * axes of the tablet surface.
77  * In other words, Xtilt and Ytilt are components of a vector created by projecting
78  * the pen's angle in 3D space vertically downwards on to the XY plane
79  * --Matt
80  */
81 typedef enum {
82   GHOST_kTabletModeNone = 0,
83   GHOST_kTabletModeStylus,
84   GHOST_kTabletModeEraser
85 } GHOST_TTabletMode;
86
87 typedef enum {
88   GHOST_kTabletAutomatic = 0,
89   GHOST_kTabletNative,
90   GHOST_kTabletWintab,
91 } GHOST_TTabletAPI;
92
93 typedef struct GHOST_TabletData {
94   GHOST_TTabletMode Active; /* 0=None, 1=Stylus, 2=Eraser */
95   float Pressure;           /* range 0.0 (not touching) to 1.0 (full pressure) */
96   float Xtilt; /* range 0.0 (upright) to 1.0 (tilted fully against the tablet surface) */
97   float Ytilt; /* as above */
98 } GHOST_TabletData;
99
100 typedef enum {
101   GHOST_kNotVisible = 0,
102   GHOST_kPartiallyVisible,
103   GHOST_kFullyVisible
104 } GHOST_TVisibility;
105
106 typedef enum { GHOST_kFireTimeNever = 0xFFFFFFFF } GHOST_TFireTimeConstant;
107
108 typedef enum {
109   GHOST_kModifierKeyLeftShift = 0,
110   GHOST_kModifierKeyRightShift,
111   GHOST_kModifierKeyLeftAlt,
112   GHOST_kModifierKeyRightAlt,
113   GHOST_kModifierKeyLeftControl,
114   GHOST_kModifierKeyRightControl,
115   GHOST_kModifierKeyOS,
116   GHOST_kModifierKeyNumMasks
117 } GHOST_TModifierKeyMask;
118
119 typedef enum {
120   GHOST_kWindowStateNormal = 0,
121   GHOST_kWindowStateMaximized,
122   GHOST_kWindowStateMinimized,
123   GHOST_kWindowStateFullScreen,
124   GHOST_kWindowStateEmbedded,
125   // GHOST_kWindowStateModified,
126   // GHOST_kWindowStateUnModified,
127 } GHOST_TWindowState;
128
129 /** Constants for the answer to the blender exit request */
130 typedef enum { GHOST_kExitCancel = 0, GHOST_kExitNow } GHOST_TExitRequestResponse;
131
132 typedef enum { GHOST_kWindowOrderTop = 0, GHOST_kWindowOrderBottom } GHOST_TWindowOrder;
133
134 typedef enum {
135   GHOST_kDrawingContextTypeNone = 0,
136   GHOST_kDrawingContextTypeOpenGL
137 } GHOST_TDrawingContextType;
138
139 typedef enum {
140   GHOST_kButtonMaskLeft = 0,
141   GHOST_kButtonMaskMiddle,
142   GHOST_kButtonMaskRight,
143   GHOST_kButtonMaskButton4,
144   GHOST_kButtonMaskButton5,
145   /* Trackballs and programmable buttons */
146   GHOST_kButtonMaskButton6,
147   GHOST_kButtonMaskButton7,
148   GHOST_kButtonNumMasks
149 } GHOST_TButtonMask;
150
151 typedef enum {
152   GHOST_kEventUnknown = 0,
153
154   GHOST_kEventCursorMove,  /// Mouse move event
155   GHOST_kEventButtonDown,  /// Mouse button event
156   GHOST_kEventButtonUp,    /// Mouse button event
157   GHOST_kEventWheel,       /// Mouse wheel event
158   GHOST_kEventTrackpad,    /// Trackpad event
159
160 #ifdef WITH_INPUT_NDOF
161   GHOST_kEventNDOFMotion,  /// N degree of freedom device motion event
162   GHOST_kEventNDOFButton,  /// N degree of freedom device button event
163 #endif
164
165   GHOST_kEventKeyDown,
166   GHOST_kEventKeyUp,
167   //  GHOST_kEventKeyAuto,
168
169   GHOST_kEventQuit,
170
171   GHOST_kEventWindowClose,
172   GHOST_kEventWindowActivate,
173   GHOST_kEventWindowDeactivate,
174   GHOST_kEventWindowUpdate,
175   GHOST_kEventWindowSize,
176   GHOST_kEventWindowMove,
177   GHOST_kEventWindowDPIHintChanged,
178
179   GHOST_kEventDraggingEntered,
180   GHOST_kEventDraggingUpdated,
181   GHOST_kEventDraggingExited,
182   GHOST_kEventDraggingDropDone,
183
184   GHOST_kEventOpenMainFile,  // Needed for Cocoa to open double-clicked .blend file at startup
185   GHOST_kEventNativeResolutionChange,  // Needed for Cocoa when window moves to other display
186
187   GHOST_kEventTimer,
188
189   GHOST_kEventImeCompositionStart,
190   GHOST_kEventImeComposition,
191   GHOST_kEventImeCompositionEnd,
192
193   GHOST_kNumEventTypes
194 } GHOST_TEventType;
195
196 typedef enum {
197   GHOST_kStandardCursorFirstCursor = 0,
198   GHOST_kStandardCursorDefault = 0,
199   GHOST_kStandardCursorRightArrow,
200   GHOST_kStandardCursorLeftArrow,
201   GHOST_kStandardCursorInfo,
202   GHOST_kStandardCursorDestroy,
203   GHOST_kStandardCursorHelp,
204   GHOST_kStandardCursorCycle,
205   GHOST_kStandardCursorSpray,
206   GHOST_kStandardCursorWait,
207   GHOST_kStandardCursorText,
208   GHOST_kStandardCursorCrosshair,
209   GHOST_kStandardCursorUpDown,
210   GHOST_kStandardCursorLeftRight,
211   GHOST_kStandardCursorTopSide,
212   GHOST_kStandardCursorBottomSide,
213   GHOST_kStandardCursorLeftSide,
214   GHOST_kStandardCursorRightSide,
215   GHOST_kStandardCursorTopLeftCorner,
216   GHOST_kStandardCursorTopRightCorner,
217   GHOST_kStandardCursorBottomRightCorner,
218   GHOST_kStandardCursorBottomLeftCorner,
219   GHOST_kStandardCursorCopy,
220   GHOST_kStandardCursorCustom,
221   GHOST_kStandardCursorPencil,
222
223   GHOST_kStandardCursorNumCursors
224 } GHOST_TStandardCursor;
225
226 typedef enum {
227   GHOST_kKeyUnknown = -1,
228   GHOST_kKeyBackSpace,
229   GHOST_kKeyTab,
230   GHOST_kKeyLinefeed,
231   GHOST_kKeyClear,
232   GHOST_kKeyEnter = 0x0D,
233
234   GHOST_kKeyEsc = 0x1B,
235   GHOST_kKeySpace = ' ',
236   GHOST_kKeyQuote = 0x27,
237   GHOST_kKeyComma = ',',
238   GHOST_kKeyMinus = '-',
239   GHOST_kKeyPlus = '+',
240   GHOST_kKeyPeriod = '.',
241   GHOST_kKeySlash = '/',
242
243   // Number keys
244   GHOST_kKey0 = '0',
245   GHOST_kKey1,
246   GHOST_kKey2,
247   GHOST_kKey3,
248   GHOST_kKey4,
249   GHOST_kKey5,
250   GHOST_kKey6,
251   GHOST_kKey7,
252   GHOST_kKey8,
253   GHOST_kKey9,
254
255   GHOST_kKeySemicolon = ';',
256   GHOST_kKeyEqual = '=',
257
258   // Character keys
259   GHOST_kKeyA = 'A',
260   GHOST_kKeyB,
261   GHOST_kKeyC,
262   GHOST_kKeyD,
263   GHOST_kKeyE,
264   GHOST_kKeyF,
265   GHOST_kKeyG,
266   GHOST_kKeyH,
267   GHOST_kKeyI,
268   GHOST_kKeyJ,
269   GHOST_kKeyK,
270   GHOST_kKeyL,
271   GHOST_kKeyM,
272   GHOST_kKeyN,
273   GHOST_kKeyO,
274   GHOST_kKeyP,
275   GHOST_kKeyQ,
276   GHOST_kKeyR,
277   GHOST_kKeyS,
278   GHOST_kKeyT,
279   GHOST_kKeyU,
280   GHOST_kKeyV,
281   GHOST_kKeyW,
282   GHOST_kKeyX,
283   GHOST_kKeyY,
284   GHOST_kKeyZ,
285
286   GHOST_kKeyLeftBracket = '[',
287   GHOST_kKeyRightBracket = ']',
288   GHOST_kKeyBackslash = 0x5C,
289   GHOST_kKeyAccentGrave = '`',
290
291   GHOST_kKeyLeftShift = 0x100,
292   GHOST_kKeyRightShift,
293   GHOST_kKeyLeftControl,
294   GHOST_kKeyRightControl,
295   GHOST_kKeyLeftAlt,
296   GHOST_kKeyRightAlt,
297   GHOST_kKeyOS,      // Command key on Apple, Windows key(s) on Windows
298   GHOST_kKeyGrLess,  // German PC only!
299
300   GHOST_kKeyCapsLock,
301   GHOST_kKeyNumLock,
302   GHOST_kKeyScrollLock,
303
304   GHOST_kKeyLeftArrow,
305   GHOST_kKeyRightArrow,
306   GHOST_kKeyUpArrow,
307   GHOST_kKeyDownArrow,
308
309   GHOST_kKeyPrintScreen,
310   GHOST_kKeyPause,
311
312   GHOST_kKeyInsert,
313   GHOST_kKeyDelete,
314   GHOST_kKeyHome,
315   GHOST_kKeyEnd,
316   GHOST_kKeyUpPage,
317   GHOST_kKeyDownPage,
318
319   // Numpad keys
320   GHOST_kKeyNumpad0,
321   GHOST_kKeyNumpad1,
322   GHOST_kKeyNumpad2,
323   GHOST_kKeyNumpad3,
324   GHOST_kKeyNumpad4,
325   GHOST_kKeyNumpad5,
326   GHOST_kKeyNumpad6,
327   GHOST_kKeyNumpad7,
328   GHOST_kKeyNumpad8,
329   GHOST_kKeyNumpad9,
330   GHOST_kKeyNumpadPeriod,
331   GHOST_kKeyNumpadEnter,
332   GHOST_kKeyNumpadPlus,
333   GHOST_kKeyNumpadMinus,
334   GHOST_kKeyNumpadAsterisk,
335   GHOST_kKeyNumpadSlash,
336
337   // Function keys
338   GHOST_kKeyF1,
339   GHOST_kKeyF2,
340   GHOST_kKeyF3,
341   GHOST_kKeyF4,
342   GHOST_kKeyF5,
343   GHOST_kKeyF6,
344   GHOST_kKeyF7,
345   GHOST_kKeyF8,
346   GHOST_kKeyF9,
347   GHOST_kKeyF10,
348   GHOST_kKeyF11,
349   GHOST_kKeyF12,
350   GHOST_kKeyF13,
351   GHOST_kKeyF14,
352   GHOST_kKeyF15,
353   GHOST_kKeyF16,
354   GHOST_kKeyF17,
355   GHOST_kKeyF18,
356   GHOST_kKeyF19,
357   GHOST_kKeyF20,
358   GHOST_kKeyF21,
359   GHOST_kKeyF22,
360   GHOST_kKeyF23,
361   GHOST_kKeyF24,
362
363   // Multimedia keypad buttons
364   GHOST_kKeyMediaPlay,
365   GHOST_kKeyMediaStop,
366   GHOST_kKeyMediaFirst,
367   GHOST_kKeyMediaLast
368 } GHOST_TKey;
369
370 typedef enum {
371   GHOST_kGrabDisable = 0, /* grab not set */
372   GHOST_kGrabNormal,      /* no cursor adjustments */
373   GHOST_kGrabWrap,        /* wrap the mouse location to prevent limiting screen bounds */
374   GHOST_kGrabHide, /* hide the mouse while grabbing and restore the original location on release (numbuts) */
375 } GHOST_TGrabCursorMode;
376
377 typedef void *GHOST_TEventDataPtr;
378
379 typedef struct {
380   /** The x-coordinate of the cursor position. */
381   GHOST_TInt32 x;
382   /** The y-coordinate of the cursor position. */
383   GHOST_TInt32 y;
384 } GHOST_TEventCursorData;
385
386 typedef struct {
387   /** The mask of the mouse button. */
388   GHOST_TButtonMask button;
389 } GHOST_TEventButtonData;
390
391 typedef struct {
392   /** Displacement of a mouse wheel. */
393   GHOST_TInt32 z;
394 } GHOST_TEventWheelData;
395
396 typedef enum {
397   GHOST_kTrackpadEventUnknown = 0,
398   GHOST_kTrackpadEventScroll,
399   GHOST_kTrackpadEventRotate,
400   GHOST_kTrackpadEventSwipe, /* Reserved, not used for now */
401   GHOST_kTrackpadEventMagnify
402 } GHOST_TTrackpadEventSubTypes;
403
404 typedef struct {
405   /** The event subtype */
406   GHOST_TTrackpadEventSubTypes subtype;
407   /** The x-location of the trackpad event */
408   GHOST_TInt32 x;
409   /** The y-location of the trackpad event */
410   GHOST_TInt32 y;
411   /** The x-delta or value of the trackpad event */
412   GHOST_TInt32 deltaX;
413   /** The y-delta (currently only for scroll subtype) of the trackpad event */
414   GHOST_TInt32 deltaY;
415 } GHOST_TEventTrackpadData;
416
417 typedef enum {
418   GHOST_kDragnDropTypeUnknown = 0,
419   GHOST_kDragnDropTypeFilenames, /*Array of strings representing file names (full path) */
420   GHOST_kDragnDropTypeString,    /* Unformatted text UTF-8 string */
421   GHOST_kDragnDropTypeBitmap     /*Bitmap image data */
422 } GHOST_TDragnDropTypes;
423
424 typedef struct {
425   /** The x-coordinate of the cursor position. */
426   GHOST_TInt32 x;
427   /** The y-coordinate of the cursor position. */
428   GHOST_TInt32 y;
429   /** The dropped item type */
430   GHOST_TDragnDropTypes dataType;
431   /** The "dropped content" */
432   GHOST_TEventDataPtr data;
433 } GHOST_TEventDragnDropData;
434
435 /** similar to wmImeData */
436 typedef struct {
437   /** size_t */
438   GHOST_TUserDataPtr result_len, composite_len;
439   /** char * utf8 encoding */
440   GHOST_TUserDataPtr result, composite;
441   /** Cursor position in the IME composition. */
442   int cursor_position;
443   /** Represents the position of the beginning of the selection */
444   int target_start;
445   /** Represents the position of the end of the selection */
446   int target_end;
447   /** custom temporal data */
448   GHOST_TUserDataPtr tmp;
449 } GHOST_TEventImeData;
450
451 typedef struct {
452   int count;
453   GHOST_TUns8 **strings;
454 } GHOST_TStringArray;
455
456 typedef enum {
457   GHOST_kNotStarted,
458   GHOST_kStarting,
459   GHOST_kInProgress,
460   GHOST_kFinishing,
461   GHOST_kFinished
462 } GHOST_TProgress;
463
464 #ifdef WITH_INPUT_NDOF
465 typedef struct {
466   /** N-degree of freedom device data v3 [GSoC 2010] */
467   // Each component normally ranges from -1 to +1, but can exceed that.
468   // These use blender standard view coordinates, with positive rotations being CCW about the axis.
469   float tx, ty, tz;  // translation
470   float rx, ry, rz;  // rotation:
471   // axis = (rx,ry,rz).normalized
472   // amount = (rx,ry,rz).magnitude [in revolutions, 1.0 = 360 deg]
473   float dt;                  // time since previous NDOF Motion event
474   GHOST_TProgress progress;  // Starting, InProgress or Finishing (for modal handlers)
475 } GHOST_TEventNDOFMotionData;
476
477 typedef enum { GHOST_kPress, GHOST_kRelease } GHOST_TButtonAction;
478 // good for mouse or other buttons too, hmmm?
479
480 typedef struct {
481   GHOST_TButtonAction action;
482   short button;
483 } GHOST_TEventNDOFButtonData;
484 #endif  // WITH_INPUT_NDOF
485
486 typedef struct {
487   /** The key code. */
488   GHOST_TKey key;
489
490   /* ascii / utf8: both should always be set when possible,
491    * - ascii may be '\0' however if the user presses a non ascii key
492    * - unicode may not be set if the system has no unicode support
493    *
494    * These values are intended to be used as follows.
495    * For text input use unicode when available, fallback to ascii.
496    * For areas where unicode is not needed, number input for example, always
497    * use ascii, unicode is ignored - campbell.
498    */
499   /** The ascii code for the key event ('\0' if none). */
500   char ascii;
501   /** The unicode character. if the length is 6, not NULL terminated if all 6 are set */
502   char utf8_buf[6];
503 } GHOST_TEventKeyData;
504
505 typedef struct {
506   /** Number of pixels on a line. */
507   GHOST_TUns32 xPixels;
508   /** Number of lines. */
509   GHOST_TUns32 yPixels;
510   /** Numberof bits per pixel. */
511   GHOST_TUns32 bpp;
512   /** Refresh rate (in Hertz). */
513   GHOST_TUns32 frequency;
514 } GHOST_DisplaySetting;
515
516 #ifdef _WIN32
517 typedef void *GHOST_TEmbedderWindowID;
518 #endif  // _WIN32
519
520 #ifndef _WIN32
521 // I can't use "Window" from "<X11/Xlib.h>" because it conflits with Window defined in winlay.h
522 typedef int GHOST_TEmbedderWindowID;
523 #endif  // _WIN32
524
525 /**
526  * A timer task callback routine.
527  * \param task The timer task object.
528  * \param time The current time.
529  */
530 #ifdef __cplusplus
531 class GHOST_ITimerTask;
532 typedef void (*GHOST_TimerProcPtr)(GHOST_ITimerTask *task, GHOST_TUns64 time);
533 #else
534 struct GHOST_TimerTaskHandle__;
535 typedef void (*GHOST_TimerProcPtr)(struct GHOST_TimerTaskHandle__ *task, GHOST_TUns64 time);
536 #endif
537
538 #endif  // __GHOST_TYPES_H__