svn update: 48958 (latest:48959)
[framework/uifw/ecore.git] / src / lib / ecore_imf_evas / ecore_imf_evas.c
1 /*
2  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
3  */
4
5 #ifdef HAVE_CONFIG_H
6 # include <config.h>
7 #endif
8
9 #include "Ecore_IMF_Evas.h"
10
11 /**
12  * @defgroup Ecore_IMF_Evas_Group Ecore Input Method Context Evas Helper Functions
13  *
14  * Helper functions to make it easy to use Evas with Ecore_IMF.
15  */
16
17 static const char *_ecore_imf_evas_event_empty = "";
18
19 /* Converts the Evas modifiers to Ecore_IMF keyboard modifiers */
20 static void
21 _ecore_imf_evas_event_modifiers_wrap(Evas_Modifier *evas_modifiers,
22                                      Ecore_IMF_Keyboard_Modifiers *imf_keyboard_modifiers)
23 {
24    if (!evas_modifiers || !imf_keyboard_modifiers)
25      return;
26
27    *imf_keyboard_modifiers = ECORE_IMF_KEYBOARD_MODIFIER_NONE;
28    if (evas_key_modifier_is_set(evas_modifiers, "Control"))
29      *imf_keyboard_modifiers |= ECORE_IMF_KEYBOARD_MODIFIER_CTRL;
30    if (evas_key_modifier_is_set(evas_modifiers, "Alt"))
31      *imf_keyboard_modifiers |= ECORE_IMF_KEYBOARD_MODIFIER_ALT;
32    if (evas_key_modifier_is_set(evas_modifiers, "Shift"))
33      *imf_keyboard_modifiers |= ECORE_IMF_KEYBOARD_MODIFIER_SHIFT;
34    if (evas_key_modifier_is_set(evas_modifiers, "Super") || evas_key_modifier_is_set(evas_modifiers, "Hyper"))
35      *imf_keyboard_modifiers |= ECORE_IMF_KEYBOARD_MODIFIER_WIN;
36 }
37
38 /* Converts the Evas locks to Ecore_IMF keyboard locks */
39 static void
40 _ecore_imf_evas_event_locks_wrap(Evas_Lock *evas_locks,
41                                  Ecore_IMF_Keyboard_Locks *imf_keyboard_locks)
42 {
43    if (!evas_locks || !imf_keyboard_locks)
44      return;
45
46    *imf_keyboard_locks = ECORE_IMF_KEYBOARD_LOCK_NONE;
47    if (evas_key_lock_is_set(evas_locks, "Num_Lock"))
48      *imf_keyboard_locks |= ECORE_IMF_KEYBOARD_LOCK_NUM;
49    if (evas_key_lock_is_set(evas_locks, "Caps_Lock"))
50      *imf_keyboard_locks |= ECORE_IMF_KEYBOARD_LOCK_CAPS;
51    if (evas_key_lock_is_set(evas_locks, "Scroll_Lock"))
52      *imf_keyboard_locks |= ECORE_IMF_KEYBOARD_LOCK_SCROLL;
53 }
54
55 /* Converts the Evas mouse flags to Ecore_IMF mouse flags */
56 static void
57 _ecore_imf_evas_event_mouse_flags_wrap(Evas_Button_Flags evas_flags,
58                                        Ecore_IMF_Mouse_Flags *imf_flags)
59 {
60    if (!imf_flags)
61      return;
62
63    *imf_flags = ECORE_IMF_MOUSE_NONE;
64    if (evas_flags & EVAS_BUTTON_DOUBLE_CLICK)
65      *imf_flags |= ECORE_IMF_MOUSE_DOUBLE_CLICK;
66    if (evas_flags & EVAS_BUTTON_TRIPLE_CLICK)
67      *imf_flags |= ECORE_IMF_MOUSE_TRIPLE_CLICK;
68 }
69
70 /**
71  * Converts a "mouse_in" event from Evas to the corresponding event of Ecore_IMF.
72  *
73  * @param evas_event The received Evas event.
74  * @param imf_event The location to store the converted Ecore_IMF event.
75  * @ingroup Ecore_IMF_Evas_Group
76  */
77 EAPI void
78 ecore_imf_evas_event_mouse_in_wrap(Evas_Event_Mouse_In *evas_event,
79                                    Ecore_IMF_Event_Mouse_In *imf_event)
80 {
81    if (!evas_event || !imf_event)
82      return;
83
84    imf_event->buttons = evas_event->buttons;
85    imf_event->output.x = evas_event->output.x;
86    imf_event->output.y = evas_event->output.y;
87    imf_event->canvas.x = evas_event->canvas.x;
88    imf_event->canvas.y = evas_event->canvas.y;
89    imf_event->timestamp = evas_event->timestamp;
90    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
91    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
92 }
93
94 /**
95  * Converts a "mouse_out" event from Evas to the corresponding event of Ecore_IMF.
96  *
97  * @param evas_event The received Evas event.
98  * @param imf_event The location to store the converted Ecore_IMF event.
99  * @ingroup Ecore_IMF_Evas_Group
100  */
101 EAPI void
102 ecore_imf_evas_event_mouse_out_wrap(Evas_Event_Mouse_Out *evas_event,
103                                     Ecore_IMF_Event_Mouse_Out *imf_event)
104 {
105    if (!evas_event || !imf_event)
106      return;
107
108    imf_event->buttons = evas_event->buttons;
109    imf_event->output.x = evas_event->output.x;
110    imf_event->output.y = evas_event->output.y;
111    imf_event->canvas.x = evas_event->canvas.x;
112    imf_event->canvas.y = evas_event->canvas.y;
113    imf_event->timestamp = evas_event->timestamp;
114    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
115    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
116 }
117
118 /**
119  * Converts a "mouse_move" event from Evas to the corresponding event of Ecore_IMF.
120  *
121  * @param evas_event The received Evas event.
122  * @param imf_event The location to store the converted Ecore_IMF event.
123  * @ingroup Ecore_IMF_Evas_Group
124  */
125 EAPI void
126 ecore_imf_evas_event_mouse_move_wrap(Evas_Event_Mouse_Move *evas_event,
127                                      Ecore_IMF_Event_Mouse_Move *imf_event)
128 {
129    if (!evas_event || !imf_event)
130      return;
131
132    imf_event->buttons = evas_event->buttons;
133    imf_event->cur.output.x = evas_event->cur.output.x;
134    imf_event->cur.output.y = evas_event->cur.output.y;
135    imf_event->prev.output.x = evas_event->prev.output.x;
136    imf_event->prev.output.y = evas_event->prev.output.y;
137    imf_event->cur.canvas.x = evas_event->cur.canvas.x;
138    imf_event->cur.canvas.y = evas_event->cur.canvas.y;
139    imf_event->prev.canvas.x = evas_event->prev.canvas.x;
140    imf_event->prev.canvas.y = evas_event->prev.canvas.y;
141    imf_event->timestamp = evas_event->timestamp;
142    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
143    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
144 }
145
146 /**
147  * Converts a "mouse_down" event from Evas to the corresponding event of Ecore_IMF.
148  *
149  * @param evas_event The received Evas event.
150  * @param imf_event The location to store the converted Ecore_IMF event.
151  * @ingroup Ecore_IMF_Evas_Group
152  */
153 EAPI void
154 ecore_imf_evas_event_mouse_down_wrap(Evas_Event_Mouse_Down *evas_event,
155                                      Ecore_IMF_Event_Mouse_Down *imf_event)
156 {
157    if (!evas_event || !imf_event)
158       return;
159
160    imf_event->button = evas_event->button;
161    imf_event->output.x = evas_event->output.x;
162    imf_event->output.y = evas_event->output.y;
163    imf_event->canvas.x = evas_event->canvas.x;
164    imf_event->canvas.y = evas_event->canvas.y;
165    imf_event->timestamp = evas_event->timestamp;
166    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
167    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
168    _ecore_imf_evas_event_mouse_flags_wrap(evas_event->flags, &imf_event->flags);
169 }
170
171 /**
172  * Converts a "mouse_up" event from Evas to the corresponding event of Ecore_IMF.
173  *
174  * @param evas_event The received Evas event.
175  * @param imf_event The location to store the converted Ecore_IMF event.
176  * @ingroup Ecore_IMF_Evas_Group
177  */
178 EAPI void
179 ecore_imf_evas_event_mouse_up_wrap(Evas_Event_Mouse_Up *evas_event,
180                                    Ecore_IMF_Event_Mouse_Up *imf_event)
181 {
182    if (!evas_event || !imf_event)
183      return;
184
185    imf_event->button = evas_event->button;
186    imf_event->output.x = evas_event->output.x;
187    imf_event->output.y = evas_event->output.y;
188    imf_event->canvas.x = evas_event->canvas.x;
189    imf_event->canvas.y = evas_event->canvas.y;
190    imf_event->timestamp = evas_event->timestamp;
191    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
192    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
193    _ecore_imf_evas_event_mouse_flags_wrap(evas_event->flags, &imf_event->flags);
194 }
195
196 /**
197  * Converts a "mouse_wheel" event from Evas to the corresponding event of Ecore_IMF.
198  *
199  * @param evas_event The received Evas event.
200  * @param imf_event The location to store the converted Ecore_IMF event.
201  * @ingroup Ecore_IMF_Evas_Group
202  */
203 EAPI void
204 ecore_imf_evas_event_mouse_wheel_wrap(Evas_Event_Mouse_Wheel *evas_event,
205                                       Ecore_IMF_Event_Mouse_Wheel *imf_event)
206 {
207    if (!evas_event || !imf_event)
208      return;
209
210    imf_event->direction = evas_event->direction;
211    imf_event->z = evas_event->z;
212    imf_event->output.x = evas_event->output.x;
213    imf_event->output.y = evas_event->output.y;
214    imf_event->canvas.x = evas_event->canvas.x;
215    imf_event->canvas.y = evas_event->canvas.y;
216    imf_event->timestamp = evas_event->timestamp;
217    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
218    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
219    imf_event->timestamp = evas_event->timestamp;
220 }
221
222 /**
223  * Converts a "key_down" event from Evas to the corresponding event of Ecore_IMF.
224  *
225  * @param evas_event The received Evas event.
226  * @param imf_event The location to store the converted Ecore_IMF event.
227  * @ingroup Ecore_IMF_Evas_Group
228  */
229 EAPI void
230 ecore_imf_evas_event_key_down_wrap(Evas_Event_Key_Down *evas_event,
231                                    Ecore_IMF_Event_Key_Down *imf_event)
232 {
233    if (!evas_event || !imf_event)
234      return;
235
236    imf_event->keyname = evas_event->keyname ? evas_event->keyname : _ecore_imf_evas_event_empty;
237    imf_event->key = evas_event->key ? evas_event->key : _ecore_imf_evas_event_empty;
238    imf_event->string = evas_event->string ? evas_event->string : _ecore_imf_evas_event_empty;
239    imf_event->compose = evas_event->compose ? evas_event->compose : _ecore_imf_evas_event_empty;
240    imf_event->timestamp = evas_event->timestamp;
241    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
242    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
243 }
244
245 /**
246  * Converts a "key_up" event from Evas to the corresponding event of Ecore_IMF.
247  *
248  * @param evas_event The received Evas event.
249  * @param imf_event The location to store the converted Ecore_IMF event.
250  * @ingroup Ecore_IMF_Evas_Group
251  */
252 EAPI void
253 ecore_imf_evas_event_key_up_wrap(Evas_Event_Key_Up *evas_event,
254                                  Ecore_IMF_Event_Key_Up *imf_event)
255 {
256    imf_event->keyname = evas_event->keyname ? evas_event->keyname : _ecore_imf_evas_event_empty;
257    imf_event->key = evas_event->key ? evas_event->key : _ecore_imf_evas_event_empty;
258    imf_event->string = evas_event->string ? evas_event->string : _ecore_imf_evas_event_empty;
259    imf_event->compose = evas_event->compose ? evas_event->compose : _ecore_imf_evas_event_empty;
260    imf_event->timestamp = evas_event->timestamp;
261    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
262    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
263 }