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, fx, fy, fw, fh;
145 evas_object_geometry_get(ee->engine.buffer.image, &xx, &yy, NULL, NULL);
146 evas_object_image_fill_get(ee->engine.buffer.image, &fx, &fy, &fw, &fh);
150 while (xx < 0) xx += fw;
151 while (xx > fw) xx -= fw;
152 *x = (ee->w * xx) / fw;
156 while (yy < 0) yy += fh;
157 while (yy > fh) yy -= fh;
158 *y = (ee->h * yy) / fh;
162 _ecore_evas_buffer_cb_mouse_in(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
165 Evas_Event_Mouse_In *ev;
169 evas_event_feed_mouse_in(ee->evas, ev->timestamp, NULL);
173 _ecore_evas_buffer_cb_mouse_out(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
176 Evas_Event_Mouse_Out *ev;
180 evas_event_feed_mouse_out(ee->evas, ev->timestamp, NULL);
184 _ecore_evas_buffer_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
187 Evas_Event_Mouse_Down *ev;
191 evas_event_feed_mouse_down(ee->evas, ev->button, ev->flags, ev->timestamp, NULL);
195 _ecore_evas_buffer_cb_mouse_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
198 Evas_Event_Mouse_Up *ev;
202 evas_event_feed_mouse_up(ee->evas, ev->button, ev->flags, ev->timestamp, NULL);
206 _ecore_evas_buffer_cb_mouse_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
209 Evas_Event_Mouse_Move *ev;
214 x = ev->cur.canvas.x;
215 y = ev->cur.canvas.y;
216 _ecore_evas_buffer_coord_translate(ee, &x, &y);
217 _ecore_evas_mouse_move_process(ee, x, y, ev->timestamp);
221 _ecore_evas_buffer_cb_mouse_wheel(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
224 Evas_Event_Mouse_Wheel *ev;
228 evas_event_feed_mouse_wheel(ee->evas, ev->direction, ev->z, ev->timestamp, NULL);
232 _ecore_evas_buffer_cb_multi_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
235 Evas_Event_Multi_Down *ev;
236 Evas_Coord x, y, xx, yy;
245 _ecore_evas_buffer_coord_translate(ee, &x, &y);
246 xf = (ev->canvas.xsub - (double)xx) + (double)x;
247 yf = (ev->canvas.ysub - (double)yy) + (double)y;
248 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);
252 _ecore_evas_buffer_cb_multi_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
255 Evas_Event_Multi_Up *ev;
256 Evas_Coord x, y, xx, yy;
265 _ecore_evas_buffer_coord_translate(ee, &x, &y);
266 xf = (ev->canvas.xsub - (double)xx) + (double)x;
267 yf = (ev->canvas.ysub - (double)yy) + (double)y;
268 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);
272 _ecore_evas_buffer_cb_multi_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
275 Evas_Event_Multi_Move *ev;
276 Evas_Coord x, y, xx, yy;
281 x = ev->cur.canvas.x;
282 y = ev->cur.canvas.y;
285 _ecore_evas_buffer_coord_translate(ee, &x, &y);
286 xf = (ev->cur.canvas.xsub - (double)xx) + (double)x;
287 yf = (ev->cur.canvas.ysub - (double)yy) + (double)y;
288 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);
292 _ecore_evas_buffer_cb_free(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
297 if (ee->driver) _ecore_evas_free(ee);
301 _ecore_evas_buffer_cb_key_down(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
304 Evas_Event_Key_Down *ev;
308 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Shift"))
309 evas_key_modifier_on(e, "Shift");
311 evas_key_modifier_off(e, "Shift");
312 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Control"))
313 evas_key_modifier_on(e, "Control");
315 evas_key_modifier_off(e, "Control");
316 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Alt"))
317 evas_key_modifier_on(e, "Alt");
319 evas_key_modifier_off(e, "Alt");
320 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Meta"))
321 evas_key_modifier_on(e, "Meta");
323 evas_key_modifier_off(e, "Meta");
324 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Hyper"))
325 evas_key_modifier_on(e, "Hyper");
327 evas_key_modifier_off(e, "Hyper");
328 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Super"))
329 evas_key_modifier_on(e, "Super");
331 evas_key_modifier_off(e, "Super");
332 if (evas_key_lock_is_set(evas_key_lock_get(e), "Scroll_Lock"))
333 evas_key_lock_on(e, "Scroll_Lock");
335 evas_key_lock_off(e, "Scroll_Lock");
336 if (evas_key_lock_is_set(evas_key_lock_get(e), "Num_Lock"))
337 evas_key_lock_on(e, "Num_Lock");
339 evas_key_lock_off(e, "Num_Lock");
340 if (evas_key_lock_is_set(evas_key_lock_get(e), "Caps_Lock"))
341 evas_key_lock_on(e, "Caps_Lock");
343 evas_key_lock_off(e, "Caps_Lock");
344 evas_event_feed_key_down(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL);
348 _ecore_evas_buffer_cb_key_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
351 Evas_Event_Key_Up *ev;
355 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Shift"))
356 evas_key_modifier_on(e, "Shift");
358 evas_key_modifier_off(e, "Shift");
359 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Control"))
360 evas_key_modifier_on(e, "Control");
362 evas_key_modifier_off(e, "Control");
363 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Alt"))
364 evas_key_modifier_on(e, "Alt");
366 evas_key_modifier_off(e, "Alt");
367 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Meta"))
368 evas_key_modifier_on(e, "Meta");
370 evas_key_modifier_off(e, "Meta");
371 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Hyper"))
372 evas_key_modifier_on(e, "Hyper");
374 evas_key_modifier_off(e, "Hyper");
375 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Super"))
376 evas_key_modifier_on(e, "Super");
378 evas_key_modifier_off(e, "Super");
379 if (evas_key_lock_is_set(evas_key_lock_get(e), "Scroll_Lock"))
380 evas_key_lock_on(e, "Scroll_Lock");
382 evas_key_lock_off(e, "Scroll_Lock");
383 if (evas_key_lock_is_set(evas_key_lock_get(e), "Num_Lock"))
384 evas_key_lock_on(e, "Num_Lock");
386 evas_key_lock_off(e, "Num_Lock");
387 if (evas_key_lock_is_set(evas_key_lock_get(e), "Caps_Lock"))
388 evas_key_lock_on(e, "Caps_Lock");
390 evas_key_lock_off(e, "Caps_Lock");
391 evas_event_feed_key_up(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL);
395 _ecore_evas_buffer_cb_focus_in(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
400 ee->prop.focused = 1;
401 evas_focus_in(ee->evas);
402 if (ee->func.fn_focus_in) ee->func.fn_focus_in(ee);
406 _ecore_evas_buffer_cb_focus_out(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
411 ee->prop.focused = 0;
412 evas_focus_out(ee->evas);
413 if (ee->func.fn_focus_out) ee->func.fn_focus_out(ee);
417 _ecore_evas_buffer_cb_show(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
423 if (ee->func.fn_show) ee->func.fn_show(ee);
427 _ecore_evas_buffer_cb_hide(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
433 if (ee->func.fn_hide) ee->func.fn_hide(ee);
436 static Ecore_Evas_Engine_Func _ecore_buffer_engine_func =
438 _ecore_evas_buffer_free,
490 _ecore_evas_buffer_pix_alloc(void *data __UNUSED__, int size)
496 _ecore_evas_buffer_pix_free(void *data __UNUSED__, void *pix)
504 * FIXME: To be fixed.
507 ecore_evas_buffer_new(int w, int h)
509 return ecore_evas_buffer_allocfunc_new
510 (w, h, _ecore_evas_buffer_pix_alloc, _ecore_evas_buffer_pix_free, NULL);
514 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)
516 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
517 Evas_Engine_Info_Buffer *einfo;
521 if ((!alloc_func) || (!free_func)) return NULL;
522 rmethod = evas_render_method_lookup("buffer");
523 if (!rmethod) return NULL;
524 ee = calloc(1, sizeof(Ecore_Evas));
525 if (!ee) return NULL;
527 ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
529 _ecore_evas_buffer_init();
531 ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_buffer_engine_func;
532 ee->engine.buffer.alloc_func = alloc_func;
533 ee->engine.buffer.free_func = free_func;
534 ee->engine.buffer.data = (void *)data;
536 ee->driver = "buffer";
548 ee->prop.focused = 1;
549 ee->prop.borderless = 1;
550 ee->prop.override = 1;
551 ee->prop.maximized = 1;
552 ee->prop.fullscreen = 0;
553 ee->prop.withdrawn = 0;
557 ee->evas = evas_new();
558 evas_data_attach_set(ee->evas, ee);
559 evas_output_method_set(ee->evas, rmethod);
560 evas_output_size_set(ee->evas, w, h);
561 evas_output_viewport_set(ee->evas, 0, 0, w, h);
563 ee->engine.buffer.pixels =
564 ee->engine.buffer.alloc_func
565 (ee->engine.buffer.data, w * h * sizeof(int));
567 einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
570 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
571 einfo->info.dest_buffer = ee->engine.buffer.pixels;
572 einfo->info.dest_buffer_row_bytes = ee->w * sizeof(int);
573 einfo->info.use_color_key = 0;
574 einfo->info.alpha_threshold = 0;
575 einfo->info.func.new_update_region = NULL;
576 einfo->info.func.free_update_region = NULL;
577 if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
579 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
582 evas_key_modifier_add(ee->evas, "Shift");
583 evas_key_modifier_add(ee->evas, "Control");
584 evas_key_modifier_add(ee->evas, "Alt");
585 evas_key_modifier_add(ee->evas, "Meta");
586 evas_key_modifier_add(ee->evas, "Hyper");
587 evas_key_modifier_add(ee->evas, "Super");
588 evas_key_lock_add(ee->evas, "Caps_Lock");
589 evas_key_lock_add(ee->evas, "Num_Lock");
590 evas_key_lock_add(ee->evas, "Scroll_Lock");
592 evas_event_feed_mouse_in(ee->evas, 0, NULL);
594 ee->engine.func->fn_render = _ecore_evas_buffer_render;
595 _ecore_evas_register(ee);
604 ecore_evas_buffer_pixels_get(Ecore_Evas *ee)
606 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
607 _ecore_evas_buffer_render(ee);
608 return ee->engine.buffer.pixels;
615 ecore_evas_object_evas_get(Evas_Object *obj)
619 ee = evas_object_data_get(obj, "Ecore_Evas");
620 if (!ee) return NULL;
622 return ecore_evas_get(ee);
626 ecore_evas_object_ecore_evas_get(Evas_Object *obj)
628 return evas_object_data_get(obj, "Ecore_Evas");
632 ecore_evas_object_image_new(Ecore_Evas *ee_target)
634 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
636 Evas_Engine_Info_Buffer *einfo;
641 rmethod = evas_render_method_lookup("buffer");
642 if (!rmethod) return NULL;
643 ee = calloc(1, sizeof(Ecore_Evas));
644 if (!ee) return NULL;
646 o = evas_object_image_add(ee_target->evas);
647 evas_object_image_content_hint_set(o, EVAS_IMAGE_CONTENT_HINT_DYNAMIC);
648 evas_object_image_colorspace_set(o, EVAS_COLORSPACE_ARGB8888);
650 ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
652 _ecore_evas_buffer_init();
654 ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_buffer_engine_func;
656 ee->driver = "buffer";
668 ee->prop.focused = 0;
669 ee->prop.borderless = 1;
670 ee->prop.override = 1;
671 ee->prop.maximized = 0;
672 ee->prop.fullscreen = 0;
673 ee->prop.withdrawn = 0;
677 ee->evas = evas_new();
678 evas_data_attach_set(ee->evas, ee);
679 evas_output_method_set(ee->evas, rmethod);
680 evas_output_size_set(ee->evas, w, h);
681 evas_output_viewport_set(ee->evas, 0, 0, w, h);
683 ee->engine.buffer.image = o;
684 evas_object_data_set(ee->engine.buffer.image, "Ecore_Evas", ee);
685 evas_object_data_set(ee->engine.buffer.image, "Ecore_Evas_Parent", ee_target);
686 evas_object_image_size_set(o, ee->w, ee->h);
687 evas_object_image_alpha_set(o, 1);
688 ee->engine.buffer.pixels = evas_object_image_data_get(o, 1);
689 evas_object_image_data_set(o, ee->engine.buffer.pixels);
690 evas_object_event_callback_add(ee->engine.buffer.image,
691 EVAS_CALLBACK_MOUSE_IN,
692 _ecore_evas_buffer_cb_mouse_in, ee);
693 evas_object_event_callback_add(ee->engine.buffer.image,
694 EVAS_CALLBACK_MOUSE_OUT,
695 _ecore_evas_buffer_cb_mouse_out, ee);
696 evas_object_event_callback_add(ee->engine.buffer.image,
697 EVAS_CALLBACK_MOUSE_DOWN,
698 _ecore_evas_buffer_cb_mouse_down, ee);
699 evas_object_event_callback_add(ee->engine.buffer.image,
700 EVAS_CALLBACK_MOUSE_UP,
701 _ecore_evas_buffer_cb_mouse_up, ee);
702 evas_object_event_callback_add(ee->engine.buffer.image,
703 EVAS_CALLBACK_MOUSE_MOVE,
704 _ecore_evas_buffer_cb_mouse_move, ee);
705 evas_object_event_callback_add(ee->engine.buffer.image,
706 EVAS_CALLBACK_MOUSE_WHEEL,
707 _ecore_evas_buffer_cb_mouse_wheel, ee);
708 evas_object_event_callback_add(ee->engine.buffer.image,
709 EVAS_CALLBACK_MULTI_DOWN,
710 _ecore_evas_buffer_cb_multi_down, ee);
711 evas_object_event_callback_add(ee->engine.buffer.image,
712 EVAS_CALLBACK_MULTI_UP,
713 _ecore_evas_buffer_cb_multi_up, ee);
714 evas_object_event_callback_add(ee->engine.buffer.image,
715 EVAS_CALLBACK_MULTI_MOVE,
716 _ecore_evas_buffer_cb_multi_move, ee);
717 evas_object_event_callback_add(ee->engine.buffer.image,
719 _ecore_evas_buffer_cb_free, ee);
720 evas_object_event_callback_add(ee->engine.buffer.image,
721 EVAS_CALLBACK_KEY_DOWN,
722 _ecore_evas_buffer_cb_key_down, ee);
723 evas_object_event_callback_add(ee->engine.buffer.image,
724 EVAS_CALLBACK_KEY_UP,
725 _ecore_evas_buffer_cb_key_up, ee);
726 evas_object_event_callback_add(ee->engine.buffer.image,
727 EVAS_CALLBACK_FOCUS_IN,
728 _ecore_evas_buffer_cb_focus_in, ee);
729 evas_object_event_callback_add(ee->engine.buffer.image,
730 EVAS_CALLBACK_FOCUS_OUT,
731 _ecore_evas_buffer_cb_focus_out, ee);
732 evas_object_event_callback_add(ee->engine.buffer.image,
734 _ecore_evas_buffer_cb_show, ee);
735 evas_object_event_callback_add(ee->engine.buffer.image,
737 _ecore_evas_buffer_cb_hide, ee);
738 einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
741 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
742 einfo->info.dest_buffer = ee->engine.buffer.pixels;
743 einfo->info.dest_buffer_row_bytes = evas_object_image_stride_get(o);
744 einfo->info.use_color_key = 0;
745 einfo->info.alpha_threshold = 0;
746 einfo->info.func.new_update_region = NULL;
747 einfo->info.func.free_update_region = NULL;
748 if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
750 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
753 evas_key_modifier_add(ee->evas, "Shift");
754 evas_key_modifier_add(ee->evas, "Control");
755 evas_key_modifier_add(ee->evas, "Alt");
756 evas_key_modifier_add(ee->evas, "Meta");
757 evas_key_modifier_add(ee->evas, "Hyper");
758 evas_key_modifier_add(ee->evas, "Super");
759 evas_key_lock_add(ee->evas, "Caps_Lock");
760 evas_key_lock_add(ee->evas, "Num_Lock");
761 evas_key_lock_add(ee->evas, "Scroll_Lock");
763 ee_target->sub_ecore_evas = eina_list_append(ee_target->sub_ecore_evas, ee);
765 ee->engine.func->fn_render = _ecore_evas_buffer_render;