5 // NOTE: if you fix this, consider fixing ecore_evas_ews.c as it is similar!
9 #include "ecore_private.h"
10 #include <Ecore_Input.h>
12 #include "ecore_evas_private.h"
13 #include "Ecore_Evas.h"
15 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
16 static int _ecore_evas_init_count = 0;
19 _ecore_evas_buffer_init(void)
21 _ecore_evas_init_count++;
22 return _ecore_evas_init_count;
26 _ecore_evas_buffer_free(Ecore_Evas *ee)
28 if (ee->engine.buffer.image)
32 ee2 = evas_object_data_get(ee->engine.buffer.image, "Ecore_Evas_Parent");
33 evas_object_del(ee->engine.buffer.image);
34 ee2->sub_ecore_evas = eina_list_remove(ee2->sub_ecore_evas, ee);
38 ee->engine.buffer.free_func(ee->engine.buffer.data,
39 ee->engine.buffer.pixels);
41 _ecore_evas_buffer_shutdown();
45 _ecore_evas_resize(Ecore_Evas *ee, int w, int h)
47 Evas_Engine_Info_Buffer *einfo;
54 if ((w == ee->w) && (h == ee->h)) return;
57 evas_output_size_set(ee->evas, ee->w, ee->h);
58 evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h);
59 evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
61 if (ee->engine.buffer.image)
63 ee->engine.buffer.pixels = evas_object_image_data_get(ee->engine.buffer.image, 1);
64 stride = evas_object_image_stride_get(ee->engine.buffer.image);
68 if (ee->engine.buffer.pixels)
69 ee->engine.buffer.free_func(ee->engine.buffer.data,
70 ee->engine.buffer.pixels);
71 ee->engine.buffer.pixels =
72 ee->engine.buffer.alloc_func(ee->engine.buffer.data,
73 ee->w * ee->h * sizeof(int));
74 stride = ee->w * sizeof(int);
77 einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
81 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
83 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_RGB32;
84 einfo->info.dest_buffer = ee->engine.buffer.pixels;
85 einfo->info.dest_buffer_row_bytes = stride;
86 einfo->info.use_color_key = 0;
87 einfo->info.alpha_threshold = 0;
88 einfo->info.func.new_update_region = NULL;
89 einfo->info.func.free_update_region = NULL;
90 if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
92 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
95 if (ee->engine.buffer.image)
96 evas_object_image_data_set(ee->engine.buffer.image, ee->engine.buffer.pixels);
97 if (ee->func.fn_resize) ee->func.fn_resize(ee);
101 _ecore_evas_move_resize(Ecore_Evas *ee, int x __UNUSED__, int y __UNUSED__, int w, int h)
103 _ecore_evas_resize(ee, w, h);
107 _ecore_evas_buffer_shutdown(void)
109 _ecore_evas_init_count--;
110 if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
111 return _ecore_evas_init_count;
115 _ecore_evas_show(Ecore_Evas *ee)
117 if (ee->engine.buffer.image) return;
118 if (ee->prop.focused) return;
119 ee->prop.focused = 1;
120 evas_focus_in(ee->evas);
121 if (ee->func.fn_focus_in) ee->func.fn_focus_in(ee);
125 _ecore_evas_buffer_render(Ecore_Evas *ee)
127 Eina_List *updates = NULL, *l, *ll;
131 EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2)
133 if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
134 if (ee2->engine.func->fn_render)
135 rend |= ee2->engine.func->fn_render(ee2);
136 if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
138 if (ee->engine.buffer.image)
142 evas_object_image_size_get(ee->engine.buffer.image, &w, &h);
143 if ((w != ee->w) || (h != ee->h))
144 _ecore_evas_resize(ee, w, h);
145 ee->engine.buffer.pixels = evas_object_image_data_get(ee->engine.buffer.image, 1);
147 if (ee->engine.buffer.pixels)
149 updates = evas_render_updates(ee->evas);
151 if (ee->engine.buffer.image)
155 evas_object_image_data_set(ee->engine.buffer.image, ee->engine.buffer.pixels);
156 EINA_LIST_FOREACH(updates, l, r)
157 evas_object_image_data_update_add(ee->engine.buffer.image,
158 r->x, r->y, r->w, r->h);
162 evas_render_updates_free(updates);
163 _ecore_evas_idle_timeout_update(ee);
166 return updates ? 1 : rend;
169 // NOTE: if you fix this, consider fixing ecore_evas_ews.c as it is similar!
171 _ecore_evas_buffer_coord_translate(Ecore_Evas *ee, Evas_Coord *x, Evas_Coord *y)
173 Evas_Coord xx, yy, ww, hh, fx, fy, fw, fh;
175 evas_object_geometry_get(ee->engine.buffer.image, &xx, &yy, &ww, &hh);
176 evas_object_image_fill_get(ee->engine.buffer.image, &fx, &fy, &fw, &fh);
181 if (evas_object_map_get(ee->engine.buffer.image) &&
182 evas_object_map_enable_get(ee->engine.buffer.image))
185 fw = ee->w; fh = ee->h;
186 ww = ee->w; hh = ee->h;
189 if ((fx == 0) && (fy == 0) && (fw == ww) && (fh == hh))
191 *x = (ee->w * (*x - xx)) / fw;
192 *y = (ee->h * (*y - yy)) / fh;
197 while (xx < 0) xx += fw;
198 while (xx > fw) xx -= fw;
199 *x = (ee->w * xx) / fw;
202 while (yy < 0) yy += fh;
203 while (yy > fh) yy -= fh;
204 *y = (ee->h * yy) / fh;
209 _ecore_evas_buffer_transfer_modifiers_locks(Evas *e, Evas *e2)
212 { "Shift", "Control", "Alt", "Meta", "Hyper", "Super", NULL };
213 const char *locks[] =
214 { "Scroll_Lock", "Num_Lock", "Caps_Lock", NULL };
217 for (i = 0; mods[i]; i++)
219 if (evas_key_modifier_is_set(evas_key_modifier_get(e), mods[i]))
220 evas_key_modifier_on(e2, mods[i]);
222 evas_key_modifier_off(e2, mods[i]);
224 for (i = 0; locks[i]; i++)
226 if (evas_key_lock_is_set(evas_key_lock_get(e), locks[i]))
227 evas_key_lock_on(e2, locks[i]);
229 evas_key_lock_off(e2, locks[i]);
234 _ecore_evas_buffer_cb_mouse_in(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
237 Evas_Event_Mouse_In *ev;
241 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
242 evas_event_feed_mouse_in(ee->evas, ev->timestamp, NULL);
246 _ecore_evas_buffer_cb_mouse_out(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
249 Evas_Event_Mouse_Out *ev;
253 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
254 evas_event_feed_mouse_out(ee->evas, ev->timestamp, NULL);
258 _ecore_evas_buffer_cb_mouse_down(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
261 Evas_Event_Mouse_Down *ev;
265 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
266 evas_event_feed_mouse_down(ee->evas, ev->button, ev->flags, ev->timestamp, NULL);
270 _ecore_evas_buffer_cb_mouse_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
273 Evas_Event_Mouse_Up *ev;
277 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
278 evas_event_feed_mouse_up(ee->evas, ev->button, ev->flags, ev->timestamp, NULL);
282 _ecore_evas_buffer_cb_mouse_move(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
285 Evas_Event_Mouse_Move *ev;
290 x = ev->cur.canvas.x;
291 y = ev->cur.canvas.y;
292 _ecore_evas_buffer_coord_translate(ee, &x, &y);
293 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
294 _ecore_evas_mouse_move_process(ee, x, y, ev->timestamp);
298 _ecore_evas_buffer_cb_mouse_wheel(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
301 Evas_Event_Mouse_Wheel *ev;
305 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
306 evas_event_feed_mouse_wheel(ee->evas, ev->direction, ev->z, ev->timestamp, NULL);
310 _ecore_evas_buffer_cb_multi_down(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
313 Evas_Event_Multi_Down *ev;
314 Evas_Coord x, y, xx, yy;
323 _ecore_evas_buffer_coord_translate(ee, &x, &y);
324 xf = (ev->canvas.xsub - (double)xx) + (double)x;
325 yf = (ev->canvas.ysub - (double)yy) + (double)y;
326 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
327 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);
331 _ecore_evas_buffer_cb_multi_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
334 Evas_Event_Multi_Up *ev;
335 Evas_Coord x, y, xx, yy;
344 _ecore_evas_buffer_coord_translate(ee, &x, &y);
345 xf = (ev->canvas.xsub - (double)xx) + (double)x;
346 yf = (ev->canvas.ysub - (double)yy) + (double)y;
347 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
348 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);
352 _ecore_evas_buffer_cb_multi_move(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
355 Evas_Event_Multi_Move *ev;
356 Evas_Coord x, y, xx, yy;
361 x = ev->cur.canvas.x;
362 y = ev->cur.canvas.y;
365 _ecore_evas_buffer_coord_translate(ee, &x, &y);
366 xf = (ev->cur.canvas.xsub - (double)xx) + (double)x;
367 yf = (ev->cur.canvas.ysub - (double)yy) + (double)y;
368 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
369 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);
373 _ecore_evas_buffer_cb_free(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
378 if (ee->driver) _ecore_evas_free(ee);
382 _ecore_evas_buffer_cb_key_down(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
385 Evas_Event_Key_Down *ev;
389 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
390 evas_event_feed_key_down(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL);
394 _ecore_evas_buffer_cb_key_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
397 Evas_Event_Key_Up *ev;
401 _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
402 evas_event_feed_key_up(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL);
406 _ecore_evas_buffer_cb_focus_in(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
411 ee->prop.focused = 1;
412 evas_focus_in(ee->evas);
413 if (ee->func.fn_focus_in) ee->func.fn_focus_in(ee);
417 _ecore_evas_buffer_cb_focus_out(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
422 ee->prop.focused = 0;
423 evas_focus_out(ee->evas);
424 if (ee->func.fn_focus_out) ee->func.fn_focus_out(ee);
428 _ecore_evas_buffer_cb_show(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
434 if (ee->func.fn_show) ee->func.fn_show(ee);
438 _ecore_evas_buffer_cb_hide(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
444 if (ee->func.fn_hide) ee->func.fn_hide(ee);
448 _ecore_evas_buffer_alpha_set(Ecore_Evas *ee, int alpha)
450 if (((ee->alpha) && (alpha)) || ((!ee->alpha) && (!alpha))) return;
452 if (ee->engine.buffer.image)
453 evas_object_image_alpha_set(ee->engine.buffer.image, ee->alpha);
456 Evas_Engine_Info_Buffer *einfo;
458 einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
462 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
464 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_RGB32;
465 evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
470 static Ecore_Evas_Engine_Func _ecore_buffer_engine_func =
472 _ecore_evas_buffer_free,
490 _ecore_evas_move_resize,
516 _ecore_evas_buffer_alpha_set,
518 NULL, // profiles_set
527 _ecore_evas_buffer_render,
528 NULL, // screen_geometry_get
529 NULL // screen_dpi_get
534 _ecore_evas_buffer_pix_alloc(void *data __UNUSED__, int size)
540 _ecore_evas_buffer_pix_free(void *data __UNUSED__, void *pix)
546 ecore_evas_buffer_new(int w, int h)
548 return ecore_evas_buffer_allocfunc_new
549 (w, h, _ecore_evas_buffer_pix_alloc, _ecore_evas_buffer_pix_free, NULL);
553 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)
555 // NOTE: if you fix this, consider fixing ecore_evas_ews.c as it is similar!
556 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
557 Evas_Engine_Info_Buffer *einfo;
561 if ((!alloc_func) || (!free_func)) return NULL;
562 rmethod = evas_render_method_lookup("buffer");
563 if (!rmethod) return NULL;
564 ee = calloc(1, sizeof(Ecore_Evas));
565 if (!ee) return NULL;
567 ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
569 _ecore_evas_buffer_init();
571 ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_buffer_engine_func;
572 ee->engine.buffer.alloc_func = alloc_func;
573 ee->engine.buffer.free_func = free_func;
574 ee->engine.buffer.data = (void *)data;
576 ee->driver = "buffer";
590 ee->prop.focused = 1;
591 ee->prop.borderless = 1;
592 ee->prop.override = 1;
593 ee->prop.maximized = 1;
594 ee->prop.fullscreen = 0;
595 ee->prop.withdrawn = 0;
599 ee->evas = evas_new();
600 evas_data_attach_set(ee->evas, ee);
601 evas_output_method_set(ee->evas, rmethod);
602 evas_output_size_set(ee->evas, w, h);
603 evas_output_viewport_set(ee->evas, 0, 0, w, h);
605 ee->engine.buffer.pixels =
606 ee->engine.buffer.alloc_func
607 (ee->engine.buffer.data, w * h * sizeof(int));
609 einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
612 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_RGB32;
613 einfo->info.dest_buffer = ee->engine.buffer.pixels;
614 einfo->info.dest_buffer_row_bytes = ee->w * sizeof(int);
615 einfo->info.use_color_key = 0;
616 einfo->info.alpha_threshold = 0;
617 einfo->info.func.new_update_region = NULL;
618 einfo->info.func.free_update_region = NULL;
619 if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
621 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
628 ERR("evas_engine_info_set() init engine '%s' failed.", ee->driver);
632 evas_key_modifier_add(ee->evas, "Shift");
633 evas_key_modifier_add(ee->evas, "Control");
634 evas_key_modifier_add(ee->evas, "Alt");
635 evas_key_modifier_add(ee->evas, "Meta");
636 evas_key_modifier_add(ee->evas, "Hyper");
637 evas_key_modifier_add(ee->evas, "Super");
638 evas_key_lock_add(ee->evas, "Caps_Lock");
639 evas_key_lock_add(ee->evas, "Num_Lock");
640 evas_key_lock_add(ee->evas, "Scroll_Lock");
642 evas_event_feed_mouse_in(ee->evas, 0, NULL);
644 _ecore_evas_register(ee);
646 evas_event_feed_mouse_in(ee->evas, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL);
655 ecore_evas_buffer_pixels_get(Ecore_Evas *ee)
657 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
658 _ecore_evas_buffer_render(ee);
659 return ee->engine.buffer.pixels;
666 ecore_evas_object_evas_get(Evas_Object *obj)
670 ee = evas_object_data_get(obj, "Ecore_Evas");
671 if (!ee) return NULL;
673 return ecore_evas_get(ee);
677 ecore_evas_object_ecore_evas_get(Evas_Object *obj)
679 return evas_object_data_get(obj, "Ecore_Evas");
683 ecore_evas_object_image_new(Ecore_Evas *ee_target)
685 // NOTE: if you fix this, consider fixing ecore_evas_ews.c as it is similar!
686 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
688 Evas_Engine_Info_Buffer *einfo;
693 rmethod = evas_render_method_lookup("buffer");
694 if (!rmethod) return NULL;
695 ee = calloc(1, sizeof(Ecore_Evas));
696 if (!ee) return NULL;
698 o = evas_object_image_add(ee_target->evas);
699 evas_object_image_content_hint_set(o, EVAS_IMAGE_CONTENT_HINT_DYNAMIC);
700 evas_object_image_colorspace_set(o, EVAS_COLORSPACE_ARGB8888);
701 evas_object_image_alpha_set(o, 0);
702 evas_object_image_size_set(o, w, h);
704 ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
706 _ecore_evas_buffer_init();
708 ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_buffer_engine_func;
710 ee->driver = "buffer";
722 ee->prop.focused = 0;
723 ee->prop.borderless = 1;
724 ee->prop.override = 1;
725 ee->prop.maximized = 0;
726 ee->prop.fullscreen = 0;
727 ee->prop.withdrawn = 0;
731 ee->evas = evas_new();
732 evas_data_attach_set(ee->evas, ee);
733 evas_output_method_set(ee->evas, rmethod);
734 evas_output_size_set(ee->evas, w, h);
735 evas_output_viewport_set(ee->evas, 0, 0, w, h);
737 ee->engine.buffer.image = o;
738 evas_object_data_set(ee->engine.buffer.image, "Ecore_Evas", ee);
739 evas_object_data_set(ee->engine.buffer.image, "Ecore_Evas_Parent", ee_target);
740 evas_object_event_callback_add(ee->engine.buffer.image,
741 EVAS_CALLBACK_MOUSE_IN,
742 _ecore_evas_buffer_cb_mouse_in, ee);
743 evas_object_event_callback_add(ee->engine.buffer.image,
744 EVAS_CALLBACK_MOUSE_OUT,
745 _ecore_evas_buffer_cb_mouse_out, ee);
746 evas_object_event_callback_add(ee->engine.buffer.image,
747 EVAS_CALLBACK_MOUSE_DOWN,
748 _ecore_evas_buffer_cb_mouse_down, ee);
749 evas_object_event_callback_add(ee->engine.buffer.image,
750 EVAS_CALLBACK_MOUSE_UP,
751 _ecore_evas_buffer_cb_mouse_up, ee);
752 evas_object_event_callback_add(ee->engine.buffer.image,
753 EVAS_CALLBACK_MOUSE_MOVE,
754 _ecore_evas_buffer_cb_mouse_move, ee);
755 evas_object_event_callback_add(ee->engine.buffer.image,
756 EVAS_CALLBACK_MOUSE_WHEEL,
757 _ecore_evas_buffer_cb_mouse_wheel, ee);
758 evas_object_event_callback_add(ee->engine.buffer.image,
759 EVAS_CALLBACK_MULTI_DOWN,
760 _ecore_evas_buffer_cb_multi_down, ee);
761 evas_object_event_callback_add(ee->engine.buffer.image,
762 EVAS_CALLBACK_MULTI_UP,
763 _ecore_evas_buffer_cb_multi_up, ee);
764 evas_object_event_callback_add(ee->engine.buffer.image,
765 EVAS_CALLBACK_MULTI_MOVE,
766 _ecore_evas_buffer_cb_multi_move, ee);
767 evas_object_event_callback_add(ee->engine.buffer.image,
769 _ecore_evas_buffer_cb_free, ee);
770 evas_object_event_callback_add(ee->engine.buffer.image,
771 EVAS_CALLBACK_KEY_DOWN,
772 _ecore_evas_buffer_cb_key_down, ee);
773 evas_object_event_callback_add(ee->engine.buffer.image,
774 EVAS_CALLBACK_KEY_UP,
775 _ecore_evas_buffer_cb_key_up, ee);
776 evas_object_event_callback_add(ee->engine.buffer.image,
777 EVAS_CALLBACK_FOCUS_IN,
778 _ecore_evas_buffer_cb_focus_in, ee);
779 evas_object_event_callback_add(ee->engine.buffer.image,
780 EVAS_CALLBACK_FOCUS_OUT,
781 _ecore_evas_buffer_cb_focus_out, ee);
782 evas_object_event_callback_add(ee->engine.buffer.image,
784 _ecore_evas_buffer_cb_show, ee);
785 evas_object_event_callback_add(ee->engine.buffer.image,
787 _ecore_evas_buffer_cb_hide, ee);
788 einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
791 ee->engine.buffer.pixels = evas_object_image_data_get(o, 1);
792 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
793 einfo->info.dest_buffer = ee->engine.buffer.pixels;
794 einfo->info.dest_buffer_row_bytes = evas_object_image_stride_get(o);
795 einfo->info.use_color_key = 0;
796 einfo->info.alpha_threshold = 0;
797 einfo->info.func.new_update_region = NULL;
798 einfo->info.func.free_update_region = NULL;
799 evas_object_image_data_set(o, ee->engine.buffer.pixels);
800 if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
802 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
809 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
813 evas_key_modifier_add(ee->evas, "Shift");
814 evas_key_modifier_add(ee->evas, "Control");
815 evas_key_modifier_add(ee->evas, "Alt");
816 evas_key_modifier_add(ee->evas, "Meta");
817 evas_key_modifier_add(ee->evas, "Hyper");
818 evas_key_modifier_add(ee->evas, "Super");
819 evas_key_lock_add(ee->evas, "Caps_Lock");
820 evas_key_lock_add(ee->evas, "Num_Lock");
821 evas_key_lock_add(ee->evas, "Scroll_Lock");
823 ee_target->sub_ecore_evas = eina_list_append(ee_target->sub_ecore_evas, ee);