7 #include "ecore_private.h"
8 #include "Ecore_IMF_Evas.h"
11 * @defgroup Ecore_IMF_Evas_Group Ecore Input Method Context Evas Helper Functions
13 * Helper functions to make it easy to use Evas with Ecore_IMF.
14 * Converts each event from Evas to the corresponding event of Ecore_IMF.
16 * An example of usage of these functions can be found at:
17 * @li @ref ecore_imf_example_c
20 static const char *_ecore_imf_evas_event_empty = "";
22 /* Converts the Evas modifiers to Ecore_IMF keyboard modifiers */
24 _ecore_imf_evas_event_modifiers_wrap(Evas_Modifier *evas_modifiers,
25 Ecore_IMF_Keyboard_Modifiers *imf_keyboard_modifiers)
27 if (!evas_modifiers || !imf_keyboard_modifiers)
30 *imf_keyboard_modifiers = ECORE_IMF_KEYBOARD_MODIFIER_NONE;
31 if (evas_key_modifier_is_set(evas_modifiers, "Control"))
32 *imf_keyboard_modifiers |= ECORE_IMF_KEYBOARD_MODIFIER_CTRL;
33 if (evas_key_modifier_is_set(evas_modifiers, "Alt"))
34 *imf_keyboard_modifiers |= ECORE_IMF_KEYBOARD_MODIFIER_ALT;
35 if (evas_key_modifier_is_set(evas_modifiers, "Shift"))
36 *imf_keyboard_modifiers |= ECORE_IMF_KEYBOARD_MODIFIER_SHIFT;
37 if (evas_key_modifier_is_set(evas_modifiers, "Super") || evas_key_modifier_is_set(evas_modifiers, "Hyper"))
38 *imf_keyboard_modifiers |= ECORE_IMF_KEYBOARD_MODIFIER_WIN;
39 if (evas_key_modifier_is_set(evas_modifiers, "AltGr"))
40 *imf_keyboard_modifiers |= ECORE_IMF_KEYBOARD_MODIFIER_ALTGR;
43 /* Converts the Evas locks to Ecore_IMF keyboard locks */
45 _ecore_imf_evas_event_locks_wrap(Evas_Lock *evas_locks,
46 Ecore_IMF_Keyboard_Locks *imf_keyboard_locks)
48 if (!evas_locks || !imf_keyboard_locks)
51 *imf_keyboard_locks = ECORE_IMF_KEYBOARD_LOCK_NONE;
52 if (evas_key_lock_is_set(evas_locks, "Num_Lock"))
53 *imf_keyboard_locks |= ECORE_IMF_KEYBOARD_LOCK_NUM;
54 if (evas_key_lock_is_set(evas_locks, "Caps_Lock"))
55 *imf_keyboard_locks |= ECORE_IMF_KEYBOARD_LOCK_CAPS;
56 if (evas_key_lock_is_set(evas_locks, "Scroll_Lock"))
57 *imf_keyboard_locks |= ECORE_IMF_KEYBOARD_LOCK_SCROLL;
60 /* Converts the Evas mouse flags to Ecore_IMF mouse flags */
62 _ecore_imf_evas_event_mouse_flags_wrap(Evas_Button_Flags evas_flags,
63 Ecore_IMF_Mouse_Flags *imf_flags)
68 *imf_flags = ECORE_IMF_MOUSE_NONE;
69 if (evas_flags & EVAS_BUTTON_DOUBLE_CLICK)
70 *imf_flags |= ECORE_IMF_MOUSE_DOUBLE_CLICK;
71 if (evas_flags & EVAS_BUTTON_TRIPLE_CLICK)
72 *imf_flags |= ECORE_IMF_MOUSE_TRIPLE_CLICK;
76 * Converts a "mouse_in" event from Evas to the corresponding event of Ecore_IMF.
78 * @param evas_event The received Evas event.
79 * @param imf_event The location to store the converted Ecore_IMF event.
80 * @ingroup Ecore_IMF_Evas_Group
83 ecore_imf_evas_event_mouse_in_wrap(Evas_Event_Mouse_In *evas_event,
84 Ecore_IMF_Event_Mouse_In *imf_event)
86 if (!evas_event || !imf_event)
89 imf_event->buttons = evas_event->buttons;
90 imf_event->output.x = evas_event->output.x;
91 imf_event->output.y = evas_event->output.y;
92 imf_event->canvas.x = evas_event->canvas.x;
93 imf_event->canvas.y = evas_event->canvas.y;
94 imf_event->timestamp = evas_event->timestamp;
95 _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
96 _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
100 * Converts a "mouse_out" event from Evas to the corresponding event of Ecore_IMF.
102 * @param evas_event The received Evas event.
103 * @param imf_event The location to store the converted Ecore_IMF event.
104 * @ingroup Ecore_IMF_Evas_Group
107 ecore_imf_evas_event_mouse_out_wrap(Evas_Event_Mouse_Out *evas_event,
108 Ecore_IMF_Event_Mouse_Out *imf_event)
110 if (!evas_event || !imf_event)
113 imf_event->buttons = evas_event->buttons;
114 imf_event->output.x = evas_event->output.x;
115 imf_event->output.y = evas_event->output.y;
116 imf_event->canvas.x = evas_event->canvas.x;
117 imf_event->canvas.y = evas_event->canvas.y;
118 imf_event->timestamp = evas_event->timestamp;
119 _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
120 _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
124 * Converts a "mouse_move" event from Evas to the corresponding event of Ecore_IMF.
126 * @param evas_event The received Evas event.
127 * @param imf_event The location to store the converted Ecore_IMF event.
128 * @ingroup Ecore_IMF_Evas_Group
131 ecore_imf_evas_event_mouse_move_wrap(Evas_Event_Mouse_Move *evas_event,
132 Ecore_IMF_Event_Mouse_Move *imf_event)
134 if (!evas_event || !imf_event)
137 imf_event->buttons = evas_event->buttons;
138 imf_event->cur.output.x = evas_event->cur.output.x;
139 imf_event->cur.output.y = evas_event->cur.output.y;
140 imf_event->prev.output.x = evas_event->prev.output.x;
141 imf_event->prev.output.y = evas_event->prev.output.y;
142 imf_event->cur.canvas.x = evas_event->cur.canvas.x;
143 imf_event->cur.canvas.y = evas_event->cur.canvas.y;
144 imf_event->prev.canvas.x = evas_event->prev.canvas.x;
145 imf_event->prev.canvas.y = evas_event->prev.canvas.y;
146 imf_event->timestamp = evas_event->timestamp;
147 _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
148 _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
152 * Converts a "mouse_down" event from Evas to the corresponding event of Ecore_IMF.
154 * @param evas_event The received Evas event.
155 * @param imf_event The location to store the converted Ecore_IMF event.
156 * @ingroup Ecore_IMF_Evas_Group
159 ecore_imf_evas_event_mouse_down_wrap(Evas_Event_Mouse_Down *evas_event,
160 Ecore_IMF_Event_Mouse_Down *imf_event)
162 if (!evas_event || !imf_event)
165 imf_event->button = evas_event->button;
166 imf_event->output.x = evas_event->output.x;
167 imf_event->output.y = evas_event->output.y;
168 imf_event->canvas.x = evas_event->canvas.x;
169 imf_event->canvas.y = evas_event->canvas.y;
170 imf_event->timestamp = evas_event->timestamp;
171 _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
172 _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
173 _ecore_imf_evas_event_mouse_flags_wrap(evas_event->flags, &imf_event->flags);
177 * Converts a "mouse_up" event from Evas to the corresponding event of Ecore_IMF.
179 * @param evas_event The received Evas event.
180 * @param imf_event The location to store the converted Ecore_IMF event.
181 * @ingroup Ecore_IMF_Evas_Group
184 ecore_imf_evas_event_mouse_up_wrap(Evas_Event_Mouse_Up *evas_event,
185 Ecore_IMF_Event_Mouse_Up *imf_event)
187 if (!evas_event || !imf_event)
190 imf_event->button = evas_event->button;
191 imf_event->output.x = evas_event->output.x;
192 imf_event->output.y = evas_event->output.y;
193 imf_event->canvas.x = evas_event->canvas.x;
194 imf_event->canvas.y = evas_event->canvas.y;
195 imf_event->timestamp = evas_event->timestamp;
196 _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
197 _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
198 _ecore_imf_evas_event_mouse_flags_wrap(evas_event->flags, &imf_event->flags);
202 * Converts a "mouse_wheel" event from Evas to the corresponding event of Ecore_IMF.
204 * @param evas_event The received Evas event.
205 * @param imf_event The location to store the converted Ecore_IMF event.
206 * @ingroup Ecore_IMF_Evas_Group
209 ecore_imf_evas_event_mouse_wheel_wrap(Evas_Event_Mouse_Wheel *evas_event,
210 Ecore_IMF_Event_Mouse_Wheel *imf_event)
212 if (!evas_event || !imf_event)
215 imf_event->direction = evas_event->direction;
216 imf_event->z = evas_event->z;
217 imf_event->output.x = evas_event->output.x;
218 imf_event->output.y = evas_event->output.y;
219 imf_event->canvas.x = evas_event->canvas.x;
220 imf_event->canvas.y = evas_event->canvas.y;
221 imf_event->timestamp = evas_event->timestamp;
222 _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
223 _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
224 imf_event->timestamp = evas_event->timestamp;
228 * Converts a "key_down" event from Evas to the corresponding event of Ecore_IMF.
230 * @param evas_event The received Evas event.
231 * @param imf_event The location to store the converted Ecore_IMF event.
232 * @ingroup Ecore_IMF_Evas_Group
237 * _key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
239 * Evas_Event_Key_Down *ev = event_info;
240 * if (!ev->keyname) return;
244 * Ecore_IMF_Event_Key_Down ecore_ev;
245 * ecore_imf_evas_event_key_down_wrap(ev, &ecore_ev);
246 * if (ecore_imf_context_filter_event(imf_context,
247 * ECORE_IMF_EVENT_KEY_DOWN,
248 * (Ecore_IMF_Event *)&ecore_ev))
253 * evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_DOWN, _key_down_cb, data);
257 ecore_imf_evas_event_key_down_wrap(Evas_Event_Key_Down *evas_event,
258 Ecore_IMF_Event_Key_Down *imf_event)
260 if (!evas_event || !imf_event)
263 imf_event->keyname = evas_event->keyname ? evas_event->keyname : _ecore_imf_evas_event_empty;
264 imf_event->key = evas_event->key ? evas_event->key : _ecore_imf_evas_event_empty;
265 imf_event->string = evas_event->string ? evas_event->string : _ecore_imf_evas_event_empty;
266 imf_event->compose = evas_event->compose ? evas_event->compose : _ecore_imf_evas_event_empty;
267 imf_event->timestamp = evas_event->timestamp;
268 _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
269 _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
273 * Converts a "key_up" event from Evas to the corresponding event of Ecore_IMF.
275 * @param evas_event The received Evas event.
276 * @param imf_event The location to store the converted Ecore_IMF event.
277 * @ingroup Ecore_IMF_Evas_Group
282 * _key_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
284 * Evas_Event_Key_Up *ev = event_info;
285 * if (!ev->keyname) return;
289 * Ecore_IMF_Event_Key_Up ecore_ev;
290 * ecore_imf_evas_event_key_up_wrap(ev, &ecore_ev);
291 * if (ecore_imf_context_filter_event(imf_context,
292 * ECORE_IMF_EVENT_KEY_UP,
293 * (Ecore_IMF_Event *)&ecore_ev))
298 * evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_UP, _key_up_cb, data);
302 ecore_imf_evas_event_key_up_wrap(Evas_Event_Key_Up *evas_event,
303 Ecore_IMF_Event_Key_Up *imf_event)
307 EINA_LOG_ERR("Evas event is missing");
313 EINA_LOG_ERR("Imf event is missing");
317 imf_event->keyname = evas_event->keyname ? evas_event->keyname : _ecore_imf_evas_event_empty;
318 imf_event->key = evas_event->key ? evas_event->key : _ecore_imf_evas_event_empty;
319 imf_event->string = evas_event->string ? evas_event->string : _ecore_imf_evas_event_empty;
320 imf_event->compose = evas_event->compose ? evas_event->compose : _ecore_imf_evas_event_empty;
321 imf_event->timestamp = evas_event->timestamp;
322 _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
323 _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);