6 #include "ecore_private.h"
7 #include <Ecore_Input.h>
9 #include "ecore_evas_private.h"
10 #include "Ecore_Evas.h"
12 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
13 static int _ecore_evas_init_count = 0;
16 _ecore_evas_buffer_init(void)
18 _ecore_evas_init_count++;
19 return _ecore_evas_init_count;
23 _ecore_evas_buffer_free(Ecore_Evas *ee)
25 if (ee->engine.buffer.image)
29 ee2 = evas_object_data_get(ee->engine.buffer.image, "Ecore_Evas_Parent");
30 evas_object_del(ee->engine.buffer.image);
31 ee2->sub_ecore_evas = eina_list_remove(ee2->sub_ecore_evas, ee);
35 ee->engine.buffer.free_func(ee->engine.buffer.data,
36 ee->engine.buffer.pixels);
38 _ecore_evas_buffer_shutdown();
42 _ecore_evas_resize(Ecore_Evas *ee, int w, int h)
44 Evas_Engine_Info_Buffer *einfo;
49 if ((w == ee->w) && (h == ee->h)) return;
52 evas_output_size_set(ee->evas, ee->w, ee->h);
53 evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
54 evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
56 if (ee->engine.buffer.image)
58 ee->engine.buffer.pixels = evas_object_image_data_get(ee->engine.buffer.image, 1);
59 stride = evas_object_image_stride_get(ee->engine.buffer.image);
63 if (ee->engine.buffer.pixels)
64 ee->engine.buffer.free_func(ee->engine.buffer.data,
65 ee->engine.buffer.pixels);
66 ee->engine.buffer.pixels =
67 ee->engine.buffer.alloc_func(ee->engine.buffer.data,
68 ee->w * ee->h * sizeof(int));
69 stride = ee->w * sizeof(int);
72 einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
75 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
76 einfo->info.dest_buffer = ee->engine.buffer.pixels;
77 einfo->info.dest_buffer_row_bytes = stride;
78 einfo->info.use_color_key = 0;
79 einfo->info.alpha_threshold = 0;
80 einfo->info.func.new_update_region = NULL;
81 einfo->info.func.free_update_region = NULL;
82 if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
84 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
87 if (ee->func.fn_resize) ee->func.fn_resize(ee);
91 _ecore_evas_buffer_shutdown(void)
93 _ecore_evas_init_count--;
94 if (_ecore_evas_init_count == 0)
97 if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
98 return _ecore_evas_init_count;
102 _ecore_evas_buffer_render(Ecore_Evas *ee)
104 Eina_List *updates, *l, *ll;
108 EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2)
110 if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
111 rend |= _ecore_evas_buffer_render(ee2);
112 if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
114 if (ee->engine.buffer.image)
118 evas_object_image_size_get(ee->engine.buffer.image, &w, &h);
119 if ((w != ee->w) || (h != ee->h))
120 _ecore_evas_resize(ee, w, h);
122 updates = evas_render_updates(ee->evas);
123 if (ee->engine.buffer.image)
127 EINA_LIST_FOREACH(updates, l, r)
128 evas_object_image_data_update_add(ee->engine.buffer.image,
129 r->x, r->y, r->w, r->h);
133 evas_render_updates_free(updates);
134 _ecore_evas_idle_timeout_update(ee);
137 return updates ? 1 : rend;
141 _ecore_evas_buffer_coord_translate(Ecore_Evas *ee, Evas_Coord *x, Evas_Coord *y)
143 Evas_Coord xx, yy, ww, hh, fx, fy, fw, fh;
145 evas_object_geometry_get(ee->engine.buffer.image, &xx, &yy, &ww, &hh);
146 evas_object_image_fill_get(ee->engine.buffer.image, &fx, &fy, &fw, &fh);
151 if ((fx == 0) && (fy == 0) && (fw == ww) && (fh == hh))
153 *x = (ee->w * (*x - xx)) / fw;
154 *y = (ee->h * (*y - yy)) / fh;
159 while (xx < 0) xx += fw;
160 while (xx > fw) xx -= fw;
161 *x = (ee->w * xx) / fw;
164 while (yy < 0) yy += fh;
165 while (yy > fh) yy -= fh;
166 *y = (ee->h * yy) / fh;
171 _ecore_evas_buffer_cb_mouse_in(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
174 Evas_Event_Mouse_In *ev;
178 evas_event_feed_mouse_in(ee->evas, ev->timestamp, NULL);
182 _ecore_evas_buffer_cb_mouse_out(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
185 Evas_Event_Mouse_Out *ev;
189 evas_event_feed_mouse_out(ee->evas, ev->timestamp, NULL);
193 _ecore_evas_buffer_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
196 Evas_Event_Mouse_Down *ev;
200 evas_event_feed_mouse_down(ee->evas, ev->button, ev->flags, ev->timestamp, NULL);
204 _ecore_evas_buffer_cb_mouse_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
207 Evas_Event_Mouse_Up *ev;
211 evas_event_feed_mouse_up(ee->evas, ev->button, ev->flags, ev->timestamp, NULL);
215 _ecore_evas_buffer_cb_mouse_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
218 Evas_Event_Mouse_Move *ev;
223 x = ev->cur.canvas.x;
224 y = ev->cur.canvas.y;
225 _ecore_evas_buffer_coord_translate(ee, &x, &y);
226 _ecore_evas_mouse_move_process(ee, x, y, ev->timestamp);
230 _ecore_evas_buffer_cb_mouse_wheel(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
233 Evas_Event_Mouse_Wheel *ev;
237 evas_event_feed_mouse_wheel(ee->evas, ev->direction, ev->z, ev->timestamp, NULL);
241 _ecore_evas_buffer_cb_multi_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
244 Evas_Event_Multi_Down *ev;
245 Evas_Coord x, y, xx, yy;
254 _ecore_evas_buffer_coord_translate(ee, &x, &y);
255 xf = (ev->canvas.xsub - (double)xx) + (double)x;
256 yf = (ev->canvas.ysub - (double)yy) + (double)y;
257 evas_event_feed_multi_down(ee->evas, ev->device, x, y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, xf, yf, ev->flags, ev->timestamp, NULL);
261 _ecore_evas_buffer_cb_multi_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
264 Evas_Event_Multi_Up *ev;
265 Evas_Coord x, y, xx, yy;
274 _ecore_evas_buffer_coord_translate(ee, &x, &y);
275 xf = (ev->canvas.xsub - (double)xx) + (double)x;
276 yf = (ev->canvas.ysub - (double)yy) + (double)y;
277 evas_event_feed_multi_up(ee->evas, ev->device, x, y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, xf, yf, ev->flags, ev->timestamp, NULL);
281 _ecore_evas_buffer_cb_multi_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
284 Evas_Event_Multi_Move *ev;
285 Evas_Coord x, y, xx, yy;
290 x = ev->cur.canvas.x;
291 y = ev->cur.canvas.y;
294 _ecore_evas_buffer_coord_translate(ee, &x, &y);
295 xf = (ev->cur.canvas.xsub - (double)xx) + (double)x;
296 yf = (ev->cur.canvas.ysub - (double)yy) + (double)y;
297 evas_event_feed_multi_move(ee->evas, ev->device, x, y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, xf, yf, ev->timestamp, NULL);
301 _ecore_evas_buffer_cb_free(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
306 if (ee->driver) _ecore_evas_free(ee);
310 _ecore_evas_buffer_cb_key_down(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
313 Evas_Event_Key_Down *ev;
317 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Shift"))
318 evas_key_modifier_on(ee->evas, "Shift");
320 evas_key_modifier_off(ee->evas, "Shift");
321 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Control"))
322 evas_key_modifier_on(ee->evas, "Control");
324 evas_key_modifier_off(ee->evas, "Control");
325 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Alt"))
326 evas_key_modifier_on(ee->evas, "Alt");
328 evas_key_modifier_off(ee->evas, "Alt");
329 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Meta"))
330 evas_key_modifier_on(ee->evas, "Meta");
332 evas_key_modifier_off(ee->evas, "Meta");
333 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Hyper"))
334 evas_key_modifier_on(ee->evas, "Hyper");
336 evas_key_modifier_off(ee->evas, "Hyper");
337 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Super"))
338 evas_key_modifier_on(ee->evas, "Super");
340 evas_key_modifier_off(ee->evas, "Super");
341 if (evas_key_lock_is_set(evas_key_lock_get(e), "Scroll_Lock"))
342 evas_key_lock_on(ee->evas, "Scroll_Lock");
344 evas_key_lock_off(ee->evas, "Scroll_Lock");
345 if (evas_key_lock_is_set(evas_key_lock_get(e), "Num_Lock"))
346 evas_key_lock_on(ee->evas, "Num_Lock");
348 evas_key_lock_off(ee->evas, "Num_Lock");
349 if (evas_key_lock_is_set(evas_key_lock_get(e), "Caps_Lock"))
350 evas_key_lock_on(ee->evas, "Caps_Lock");
352 evas_key_lock_off(ee->evas, "Caps_Lock");
353 evas_event_feed_key_down(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL);
357 _ecore_evas_buffer_cb_key_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
360 Evas_Event_Key_Up *ev;
364 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Shift"))
365 evas_key_modifier_on(ee->evas, "Shift");
367 evas_key_modifier_off(ee->evas, "Shift");
368 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Control"))
369 evas_key_modifier_on(ee->evas, "Control");
371 evas_key_modifier_off(ee->evas, "Control");
372 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Alt"))
373 evas_key_modifier_on(ee->evas, "Alt");
375 evas_key_modifier_off(ee->evas, "Alt");
376 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Meta"))
377 evas_key_modifier_on(ee->evas, "Meta");
379 evas_key_modifier_off(ee->evas, "Meta");
380 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Hyper"))
381 evas_key_modifier_on(ee->evas, "Hyper");
383 evas_key_modifier_off(ee->evas, "Hyper");
384 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Super"))
385 evas_key_modifier_on(ee->evas, "Super");
387 evas_key_modifier_off(ee->evas, "Super");
388 if (evas_key_lock_is_set(evas_key_lock_get(e), "Scroll_Lock"))
389 evas_key_lock_on(ee->evas, "Scroll_Lock");
391 evas_key_lock_off(ee->evas, "Scroll_Lock");
392 if (evas_key_lock_is_set(evas_key_lock_get(e), "Num_Lock"))
393 evas_key_lock_on(ee->evas, "Num_Lock");
395 evas_key_lock_off(ee->evas, "Num_Lock");
396 if (evas_key_lock_is_set(evas_key_lock_get(e), "Caps_Lock"))
397 evas_key_lock_on(ee->evas, "Caps_Lock");
399 evas_key_lock_off(ee->evas, "Caps_Lock");
400 evas_event_feed_key_up(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL);
404 _ecore_evas_buffer_cb_focus_in(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
409 ee->prop.focused = 1;
410 evas_focus_in(ee->evas);
411 if (ee->func.fn_focus_in) ee->func.fn_focus_in(ee);
415 _ecore_evas_buffer_cb_focus_out(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
420 ee->prop.focused = 0;
421 evas_focus_out(ee->evas);
422 if (ee->func.fn_focus_out) ee->func.fn_focus_out(ee);
426 _ecore_evas_buffer_cb_show(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
432 if (ee->func.fn_show) ee->func.fn_show(ee);
436 _ecore_evas_buffer_cb_hide(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
442 if (ee->func.fn_hide) ee->func.fn_hide(ee);
445 static Ecore_Evas_Engine_Func _ecore_buffer_engine_func =
447 _ecore_evas_buffer_free,
495 NULL // screen_geometry_get
500 _ecore_evas_buffer_pix_alloc(void *data __UNUSED__, int size)
506 _ecore_evas_buffer_pix_free(void *data __UNUSED__, void *pix)
514 * FIXME: To be fixed.
517 ecore_evas_buffer_new(int w, int h)
519 return ecore_evas_buffer_allocfunc_new
520 (w, h, _ecore_evas_buffer_pix_alloc, _ecore_evas_buffer_pix_free, NULL);
524 ecore_evas_buffer_allocfunc_new(int w, int h, void *(*alloc_func) (void *data, int size), void (*free_func) (void *data, void *pix), const void *data)
526 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
527 Evas_Engine_Info_Buffer *einfo;
531 if ((!alloc_func) || (!free_func)) return NULL;
532 rmethod = evas_render_method_lookup("buffer");
533 if (!rmethod) return NULL;
534 ee = calloc(1, sizeof(Ecore_Evas));
535 if (!ee) return NULL;
537 ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
539 _ecore_evas_buffer_init();
541 ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_buffer_engine_func;
542 ee->engine.buffer.alloc_func = alloc_func;
543 ee->engine.buffer.free_func = free_func;
544 ee->engine.buffer.data = (void *)data;
546 ee->driver = "buffer";
558 ee->prop.focused = 1;
559 ee->prop.borderless = 1;
560 ee->prop.override = 1;
561 ee->prop.maximized = 1;
562 ee->prop.fullscreen = 0;
563 ee->prop.withdrawn = 0;
567 ee->evas = evas_new();
568 evas_data_attach_set(ee->evas, ee);
569 evas_output_method_set(ee->evas, rmethod);
570 evas_output_size_set(ee->evas, w, h);
571 evas_output_viewport_set(ee->evas, 0, 0, w, h);
573 ee->engine.buffer.pixels =
574 ee->engine.buffer.alloc_func
575 (ee->engine.buffer.data, w * h * sizeof(int));
577 einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
580 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
581 einfo->info.dest_buffer = ee->engine.buffer.pixels;
582 einfo->info.dest_buffer_row_bytes = ee->w * sizeof(int);
583 einfo->info.use_color_key = 0;
584 einfo->info.alpha_threshold = 0;
585 einfo->info.func.new_update_region = NULL;
586 einfo->info.func.free_update_region = NULL;
587 if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
589 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
592 evas_key_modifier_add(ee->evas, "Shift");
593 evas_key_modifier_add(ee->evas, "Control");
594 evas_key_modifier_add(ee->evas, "Alt");
595 evas_key_modifier_add(ee->evas, "Meta");
596 evas_key_modifier_add(ee->evas, "Hyper");
597 evas_key_modifier_add(ee->evas, "Super");
598 evas_key_lock_add(ee->evas, "Caps_Lock");
599 evas_key_lock_add(ee->evas, "Num_Lock");
600 evas_key_lock_add(ee->evas, "Scroll_Lock");
602 evas_event_feed_mouse_in(ee->evas, 0, NULL);
604 ee->engine.func->fn_render = _ecore_evas_buffer_render;
605 _ecore_evas_register(ee);
614 ecore_evas_buffer_pixels_get(Ecore_Evas *ee)
616 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
617 _ecore_evas_buffer_render(ee);
618 return ee->engine.buffer.pixels;
625 ecore_evas_object_evas_get(Evas_Object *obj)
629 ee = evas_object_data_get(obj, "Ecore_Evas");
630 if (!ee) return NULL;
632 return ecore_evas_get(ee);
636 ecore_evas_object_ecore_evas_get(Evas_Object *obj)
638 return evas_object_data_get(obj, "Ecore_Evas");
642 ecore_evas_object_image_new(Ecore_Evas *ee_target)
644 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
646 Evas_Engine_Info_Buffer *einfo;
651 rmethod = evas_render_method_lookup("buffer");
652 if (!rmethod) return NULL;
653 ee = calloc(1, sizeof(Ecore_Evas));
654 if (!ee) return NULL;
656 o = evas_object_image_add(ee_target->evas);
657 evas_object_image_content_hint_set(o, EVAS_IMAGE_CONTENT_HINT_DYNAMIC);
658 evas_object_image_colorspace_set(o, EVAS_COLORSPACE_ARGB8888);
660 ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
662 _ecore_evas_buffer_init();
664 ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_buffer_engine_func;
666 ee->driver = "buffer";
678 ee->prop.focused = 0;
679 ee->prop.borderless = 1;
680 ee->prop.override = 1;
681 ee->prop.maximized = 0;
682 ee->prop.fullscreen = 0;
683 ee->prop.withdrawn = 0;
687 ee->evas = evas_new();
688 evas_data_attach_set(ee->evas, ee);
689 evas_output_method_set(ee->evas, rmethod);
690 evas_output_size_set(ee->evas, w, h);
691 evas_output_viewport_set(ee->evas, 0, 0, w, h);
693 ee->engine.buffer.image = o;
694 evas_object_data_set(ee->engine.buffer.image, "Ecore_Evas", ee);
695 evas_object_data_set(ee->engine.buffer.image, "Ecore_Evas_Parent", ee_target);
696 evas_object_image_size_set(o, ee->w, ee->h);
697 evas_object_image_alpha_set(o, 1);
698 ee->engine.buffer.pixels = evas_object_image_data_get(o, 1);
699 evas_object_image_data_set(o, ee->engine.buffer.pixels);
700 evas_object_event_callback_add(ee->engine.buffer.image,
701 EVAS_CALLBACK_MOUSE_IN,
702 _ecore_evas_buffer_cb_mouse_in, ee);
703 evas_object_event_callback_add(ee->engine.buffer.image,
704 EVAS_CALLBACK_MOUSE_OUT,
705 _ecore_evas_buffer_cb_mouse_out, ee);
706 evas_object_event_callback_add(ee->engine.buffer.image,
707 EVAS_CALLBACK_MOUSE_DOWN,
708 _ecore_evas_buffer_cb_mouse_down, ee);
709 evas_object_event_callback_add(ee->engine.buffer.image,
710 EVAS_CALLBACK_MOUSE_UP,
711 _ecore_evas_buffer_cb_mouse_up, ee);
712 evas_object_event_callback_add(ee->engine.buffer.image,
713 EVAS_CALLBACK_MOUSE_MOVE,
714 _ecore_evas_buffer_cb_mouse_move, ee);
715 evas_object_event_callback_add(ee->engine.buffer.image,
716 EVAS_CALLBACK_MOUSE_WHEEL,
717 _ecore_evas_buffer_cb_mouse_wheel, ee);
718 evas_object_event_callback_add(ee->engine.buffer.image,
719 EVAS_CALLBACK_MULTI_DOWN,
720 _ecore_evas_buffer_cb_multi_down, ee);
721 evas_object_event_callback_add(ee->engine.buffer.image,
722 EVAS_CALLBACK_MULTI_UP,
723 _ecore_evas_buffer_cb_multi_up, ee);
724 evas_object_event_callback_add(ee->engine.buffer.image,
725 EVAS_CALLBACK_MULTI_MOVE,
726 _ecore_evas_buffer_cb_multi_move, ee);
727 evas_object_event_callback_add(ee->engine.buffer.image,
729 _ecore_evas_buffer_cb_free, ee);
730 evas_object_event_callback_add(ee->engine.buffer.image,
731 EVAS_CALLBACK_KEY_DOWN,
732 _ecore_evas_buffer_cb_key_down, ee);
733 evas_object_event_callback_add(ee->engine.buffer.image,
734 EVAS_CALLBACK_KEY_UP,
735 _ecore_evas_buffer_cb_key_up, ee);
736 evas_object_event_callback_add(ee->engine.buffer.image,
737 EVAS_CALLBACK_FOCUS_IN,
738 _ecore_evas_buffer_cb_focus_in, ee);
739 evas_object_event_callback_add(ee->engine.buffer.image,
740 EVAS_CALLBACK_FOCUS_OUT,
741 _ecore_evas_buffer_cb_focus_out, ee);
742 evas_object_event_callback_add(ee->engine.buffer.image,
744 _ecore_evas_buffer_cb_show, ee);
745 evas_object_event_callback_add(ee->engine.buffer.image,
747 _ecore_evas_buffer_cb_hide, ee);
748 einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
751 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
752 einfo->info.dest_buffer = ee->engine.buffer.pixels;
753 einfo->info.dest_buffer_row_bytes = evas_object_image_stride_get(o);
754 einfo->info.use_color_key = 0;
755 einfo->info.alpha_threshold = 0;
756 einfo->info.func.new_update_region = NULL;
757 einfo->info.func.free_update_region = NULL;
758 if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
760 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
763 evas_key_modifier_add(ee->evas, "Shift");
764 evas_key_modifier_add(ee->evas, "Control");
765 evas_key_modifier_add(ee->evas, "Alt");
766 evas_key_modifier_add(ee->evas, "Meta");
767 evas_key_modifier_add(ee->evas, "Hyper");
768 evas_key_modifier_add(ee->evas, "Super");
769 evas_key_lock_add(ee->evas, "Caps_Lock");
770 evas_key_lock_add(ee->evas, "Num_Lock");
771 evas_key_lock_add(ee->evas, "Scroll_Lock");
773 ee_target->sub_ecore_evas = eina_list_append(ee_target->sub_ecore_evas, ee);
775 ee->engine.func->fn_render = _ecore_evas_buffer_render;