3b844ea679b48ce8476d6b7bd3392fa545ff4375
[profile/ivi/ecore.git] / src / lib / ecore_input / Ecore_Input.h
1 #ifndef _ECORE_INPUT_H
2 #define _ECORE_INPUT_H
3
4
5 #ifdef EAPI
6 # undef EAPI
7 #endif
8
9 #ifdef _WIN32
10 # ifdef EFL_ECORE_INPUT_BUILD
11 #  ifdef DLL_EXPORT
12 #   define EAPI __declspec(dllexport)
13 #  else
14 #   define EAPI
15 #  endif /* ! DLL_EXPORT */
16 # else
17 #  define EAPI __declspec(dllimport)
18 # endif /* ! EFL_ECORE_INPUT_BUILD */
19 #else
20 # ifdef __GNUC__
21 #  if __GNUC__ >= 4
22 #   define EAPI __attribute__ ((visibility("default")))
23 #  else
24 #   define EAPI
25 #  endif
26 # else
27 #  define EAPI
28 # endif
29 #endif
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 EAPI extern int ECORE_EVENT_KEY_DOWN;
36 EAPI extern int ECORE_EVENT_KEY_UP;
37 EAPI extern int ECORE_EVENT_MOUSE_BUTTON_DOWN;
38 EAPI extern int ECORE_EVENT_MOUSE_BUTTON_UP;
39 EAPI extern int ECORE_EVENT_MOUSE_MOVE;
40 EAPI extern int ECORE_EVENT_MOUSE_WHEEL;
41 EAPI extern int ECORE_EVENT_MOUSE_IN;
42 EAPI extern int ECORE_EVENT_MOUSE_OUT;
43
44 #define ECORE_EVENT_MODIFIER_SHIFT      0x0001
45 #define ECORE_EVENT_MODIFIER_CTRL       0x0002
46 #define ECORE_EVENT_MODIFIER_ALT        0x0004
47 #define ECORE_EVENT_MODIFIER_WIN        0x0008
48 #define ECORE_EVENT_MODIFIER_SCROLL     0x0010
49 #define ECORE_EVENT_MODIFIER_NUM        0x0020
50 #define ECORE_EVENT_MODIFIER_CAPS       0x0040
51 #define ECORE_EVENT_LOCK_SCROLL         0x0080
52 #define ECORE_EVENT_LOCK_NUM            0x0100
53 #define ECORE_EVENT_LOCK_CAPS           0x0200
54
55 typedef uintptr_t Ecore_Window;
56
57 typedef struct _Ecore_Event_Key Ecore_Event_Key;
58 struct _Ecore_Event_Key
59 {
60    const char   *keyname;
61    const char   *key;
62    const char   *string;
63    const char   *compose;
64    Ecore_Window  window;
65    Ecore_Window  root_window;
66    Ecore_Window  event_window;
67
68    unsigned int  timestamp;
69    unsigned int  modifiers;
70
71    int           same_screen;
72 };
73
74 typedef struct _Ecore_Event_Mouse_Button Ecore_Event_Mouse_Button;
75 struct _Ecore_Event_Mouse_Button
76 {
77    Ecore_Window  window;
78    Ecore_Window  root_window;
79    Ecore_Window  event_window;
80
81    unsigned int  timestamp;
82    unsigned int  modifiers;
83    unsigned int  buttons;
84    unsigned int  double_click;
85    unsigned int  triple_click;
86    int           same_screen;
87
88    int           x;
89    int           y;
90    struct
91    {
92       int        x;
93       int        y;
94    } root;
95    
96    struct
97      {
98         int        device; /* 0 if normal mouse, 1+ for other mouse-devices (eg multi-touch - other fingers) */
99         double     radius, radius_x, radius_y; /* radius of press point - radius_x and y if its an ellipse (radius is the average of the 2) */
100         double     pressure; /* pressure - 1.0 == normal, > 1.0 == more, 0.0 == none */
101         double     angle; /* angle relative to perpendicular (0.0 == perpendicular), in degrees */
102         double     x, y; /* same as x, y root.x, root.y, but with sub-pixel precision, if available */
103         struct
104           {
105              double  x, y;
106           } root;
107      } multi;
108 };
109
110 typedef struct _Ecore_Event_Mouse_Wheel Ecore_Event_Mouse_Wheel;
111 struct _Ecore_Event_Mouse_Wheel
112 {
113    Ecore_Window  window;
114    Ecore_Window  root_window;
115    Ecore_Window  event_window;
116
117    unsigned int  timestamp;
118    unsigned int  modifiers;
119
120    int           same_screen;
121    int           direction;
122    int           z;
123
124    int           x;
125    int           y;
126    struct
127    {
128       int        x;
129       int        y;
130    } root;
131 };
132
133 typedef struct _Ecore_Event_Mouse_Move Ecore_Event_Mouse_Move;
134 struct _Ecore_Event_Mouse_Move
135 {
136    Ecore_Window  window;
137    Ecore_Window  root_window;
138    Ecore_Window  event_window;
139
140    unsigned int  timestamp;
141    unsigned int  modifiers;
142
143    int           same_screen;
144
145    int           x;
146    int           y;
147    struct
148    {
149       int        x;
150       int        y;
151    } root;
152
153    struct
154      {
155         int        device; /* 0 if normal mouse, 1+ for other mouse-devices (eg multi-touch - other fingers) */
156         double     radius, radius_x, radius_y; /* radius of press point - radius_x and y if its an ellipse (radius is the average of the 2) */
157         double     pressure; /* pressure - 1.0 == normal, > 1.0 == more, 0.0 == none */
158         double     angle; /* angle relative to perpendicular (0.0 == perpendicular), in degrees */
159         double     x, y; /* same as x, y root.x, root.y, but with sub-pixel precision, if available */
160         struct
161           {
162              double  x, y;
163           } root;
164      } multi;
165 };
166
167 typedef struct _Ecore_Event_Mouse_IO Ecore_Event_Mouse_IO;
168 struct _Ecore_Event_Mouse_IO
169 {
170    Ecore_Window  window;
171    Ecore_Window  event_window;
172
173    unsigned int  timestamp;
174    unsigned int  modifiers;
175
176    int           x;
177    int           y;
178 };
179
180 enum _Ecore_Event_Modifier
181 {
182   ECORE_NONE,
183   ECORE_SHIFT,
184   ECORE_CTRL,
185   ECORE_ALT,
186   ECORE_WIN,
187   ECORE_SCROLL,
188   ECORE_CAPS,
189   ECORE_LAST
190 };
191
192 enum _Ecore_Event_Press
193 {
194   ECORE_DOWN,
195   ECORE_UP
196 };
197
198 enum _Ecore_Event_IO
199 {
200   ECORE_IN,
201   ECORE_OUT
202 };
203
204 typedef enum _Ecore_Event_IO Ecore_Event_IO;
205 typedef enum _Ecore_Event_Press Ecore_Event_Press;
206 typedef enum _Ecore_Event_Modifier Ecore_Event_Modifier;
207
208 typedef struct _Ecore_Event_Modifiers Ecore_Event_Modifiers;
209 struct _Ecore_Event_Modifiers
210 {
211    unsigned int size;
212    unsigned int array[ECORE_LAST];
213 };
214
215 EAPI int         ecore_event_init(void);
216 EAPI int         ecore_event_shutdown(void);
217
218 EAPI unsigned int ecore_event_modifier_mask(Ecore_Event_Modifier modifier);
219 EAPI Ecore_Event_Modifier ecore_event_update_modifier(const char *key, Ecore_Event_Modifiers *modifiers, int inc);
220
221 #ifdef __cplusplus
222 }
223 #endif
224
225 #endif