11 #include "ecore_private.h"
12 #include <Ecore_Input.h>
14 #include "ecore_evas_private.h"
15 #include "Ecore_Evas.h"
17 EAPI int ECORE_EVAS_EWS_EVENT_MANAGER_CHANGE = 0;
18 EAPI int ECORE_EVAS_EWS_EVENT_ADD = 0;
19 EAPI int ECORE_EVAS_EWS_EVENT_DEL = 0;
20 EAPI int ECORE_EVAS_EWS_EVENT_RESIZE = 0;
21 EAPI int ECORE_EVAS_EWS_EVENT_MOVE = 0;
22 EAPI int ECORE_EVAS_EWS_EVENT_SHOW = 0;
23 EAPI int ECORE_EVAS_EWS_EVENT_HIDE = 0;
24 EAPI int ECORE_EVAS_EWS_EVENT_FOCUS = 0;
25 EAPI int ECORE_EVAS_EWS_EVENT_UNFOCUS = 0;
26 EAPI int ECORE_EVAS_EWS_EVENT_RAISE = 0;
27 EAPI int ECORE_EVAS_EWS_EVENT_LOWER = 0;
28 EAPI int ECORE_EVAS_EWS_EVENT_ACTIVATE = 0;
30 EAPI int ECORE_EVAS_EWS_EVENT_ICONIFIED_CHANGE = 0;
31 EAPI int ECORE_EVAS_EWS_EVENT_MAXIMIZED_CHANGE = 0;
32 EAPI int ECORE_EVAS_EWS_EVENT_LAYER_CHANGE = 0;
33 EAPI int ECORE_EVAS_EWS_EVENT_FULLSCREEN_CHANGE = 0;
34 EAPI int ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE = 0;
36 #ifdef BUILD_ECORE_EVAS_EWS
37 static int _ecore_evas_init_count = 0;
39 static Ecore_Evas *_ews_ee = NULL;
40 static Evas_Object *_ews_bg = NULL;
41 static Eina_List *_ews_children = NULL;
42 static const void *_ews_manager = NULL;
43 static char *_ews_engine = NULL;
44 static char *_ews_options = NULL;
45 static int _ews_x = 0;
46 static int _ews_y = 0;
47 static int _ews_w = 1024;
48 static int _ews_h = 768;
49 static Eina_Bool _ews_defaults_engine = EINA_TRUE;
50 static Eina_Bool _ews_defaults_geo = EINA_TRUE;
52 static const char EWS_ENGINE_NAME[] = "ews";
55 _ecore_evas_ews_pre_free(Ecore_Evas *ee __UNUSED__)
57 DBG("EWS backing store free'd");
58 _ews_children = eina_list_free(_ews_children);
64 _ecore_evas_ews_del_request(Ecore_Evas *ee __UNUSED__)
66 INF("EWS backing store deletion is forbidden!");
70 _ecore_evas_ews_ee_new(void)
72 Ecore_Evas *ee = ecore_evas_new(_ews_engine, _ews_x, _ews_y, _ews_w, _ews_h,
75 ERR("Failed: ecore_evas_new(%s, %d, %d, %d, %d, %s)",
76 _ews_engine, _ews_x, _ews_y, _ews_w, _ews_h, _ews_options);
79 ecore_evas_size_min_set(ee, _ews_w, _ews_h);
80 ecore_evas_size_max_set(ee, _ews_w, _ews_h);
81 ecore_evas_callback_pre_free_set(ee, _ecore_evas_ews_pre_free);
82 ecore_evas_callback_delete_request_set(ee, _ecore_evas_ews_del_request);
83 ecore_evas_name_class_set(ee, "ecore_evas_ews", "ews");
85 (ee, "EWS: Ecore + Evas Single Process Windowing System");
93 _ecore_evas_ews_env_setup(void)
95 const char *env = getenv("ECORE_EVAS_EWS");
98 if (_ews_defaults_engine)
105 if (_ews_defaults_geo)
113 if ((!env) || (!*env)) return;
115 p = tmp = strdup(env);
120 if (_ews_defaults_engine) _ews_engine = strdup(p);
127 if (_ews_defaults_geo) _ews_x = atoi(p);
133 if (_ews_defaults_geo) _ews_y = atoi(p);
139 if (_ews_defaults_geo) _ews_w = atoi(p);
144 if (_ews_defaults_geo) _ews_h = atoi(p);
148 if (_ews_defaults_engine) _ews_options = strdup(p);
155 _ecore_evas_ews_event_free(void *data __UNUSED__, void *ev)
158 _ecore_evas_unref(ee);
162 _ecore_evas_ews_event(Ecore_Evas *ee, int event)
165 ecore_event_add(event, ee, _ecore_evas_ews_event_free, NULL);
169 _ecore_evas_ews_event_free_del(void *data __UNUSED__, void *ev __UNUSED__)
171 _ecore_evas_ews_shutdown();
175 _ecore_evas_ews_free(Ecore_Evas *ee)
177 evas_object_del(ee->engine.ews.image);
178 _ews_ee->sub_ecore_evas = eina_list_remove(_ews_ee->sub_ecore_evas, ee);
180 ecore_event_add(ECORE_EVAS_EWS_EVENT_DEL, ee, _ecore_evas_ews_event_free_del, NULL);
184 _ecore_evas_ews_move(Ecore_Evas *ee, int x, int y)
189 if ((x == ee->x) && (y == ee->y)) return;
192 evas_object_move(ee->engine.ews.image, x, y);
193 if (ee->func.fn_move) ee->func.fn_move(ee);
195 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_MOVE);
199 _ecore_evas_ews_managed_move(Ecore_Evas *ee, int x, int y)
204 if ((x == ee->x) && (y == ee->y)) return;
207 if (ee->func.fn_move) ee->func.fn_move(ee);
208 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_MOVE);
212 _ecore_evas_ews_resize_internal(Ecore_Evas *ee, int w, int h)
214 Evas_Engine_Info_Buffer *einfo;
218 evas_output_size_set(ee->evas, w, h);
219 evas_output_viewport_set(ee->evas, 0, 0, w, h);
220 evas_damage_rectangle_add(ee->evas, 0, 0, w, h);
222 evas_object_image_size_set(ee->engine.ews.image, w, h);
223 evas_object_image_fill_set(ee->engine.ews.image, 0, 0, w, h);
224 evas_object_resize(ee->engine.ews.image, w, h);
226 pixels = evas_object_image_data_get(ee->engine.ews.image, 1);
227 evas_object_image_data_set(ee->engine.ews.image, pixels); // refcount
228 stride = evas_object_image_stride_get(ee->engine.ews.image);
230 einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
231 EINA_SAFETY_ON_NULL_RETURN(einfo);
233 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
234 einfo->info.dest_buffer = pixels;
235 einfo->info.dest_buffer_row_bytes = stride;
236 einfo->info.use_color_key = 0;
237 einfo->info.alpha_threshold = 0;
238 einfo->info.func.new_update_region = NULL;
239 einfo->info.func.free_update_region = NULL;
240 evas_object_image_data_set(ee->engine.ews.image, pixels);
241 if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
243 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
248 _ecore_evas_ews_resize(Ecore_Evas *ee, int w, int h)
256 if ((w == ee->w) && (h == ee->h)) return;
259 _ecore_evas_ews_resize_internal(ee, w, h);
260 if (ee->func.fn_resize) ee->func.fn_resize(ee);
261 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_RESIZE);
265 _ecore_evas_ews_move_resize(Ecore_Evas *ee, int x, int y, int w, int h)
267 _ecore_evas_ews_move(ee, x, y);
268 _ecore_evas_ews_resize(ee, w, h);
272 _ecore_evas_ews_rotation_set(Ecore_Evas *ee, int rot, int resize __UNUSED__)
274 if (ee->rotation == rot) return;
277 ERR("TODO: rot=%d, resize=%d", rot, resize);
279 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
283 _ecore_evas_ews_shaped_set(Ecore_Evas *ee, int val)
285 if (ee->shaped == val) return;
287 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
291 _ecore_evas_ews_show(Ecore_Evas *ee)
293 ee->should_be_visible = EINA_TRUE;
294 evas_object_show(ee->engine.ews.image);
295 if (ee->prop.fullscreen)
296 evas_object_focus_set(ee->engine.ews.image, EINA_TRUE);
298 if (ee->func.fn_show) ee->func.fn_show(ee);
299 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_SHOW);
303 _ecore_evas_ews_hide(Ecore_Evas *ee)
305 ee->should_be_visible = EINA_FALSE;
306 evas_object_hide(ee->engine.ews.image);
308 if (ee->func.fn_hide) ee->func.fn_hide(ee);
309 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_HIDE);
313 _ecore_evas_ews_raise(Ecore_Evas *ee)
315 evas_object_raise(ee->engine.ews.image);
316 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_RAISE);
320 _ecore_evas_ews_lower(Ecore_Evas *ee)
322 evas_object_lower(ee->engine.ews.image);
323 evas_object_lower(_ews_bg);
324 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_LOWER);
328 _ecore_evas_ews_activate(Ecore_Evas *ee)
330 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_ACTIVATE);
334 _ecore_evas_ews_title_set(Ecore_Evas *ee, const char *t)
336 if (ee->prop.title) free(ee->prop.title);
337 ee->prop.title = NULL;
338 if (t) ee->prop.title = strdup(t);
339 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
343 _ecore_evas_ews_name_class_set(Ecore_Evas *ee, const char *n, const char *c)
345 if (ee->prop.name) free(ee->prop.name);
346 if (ee->prop.clas) free(ee->prop.clas);
347 ee->prop.name = NULL;
348 ee->prop.clas = NULL;
349 if (n) ee->prop.name = strdup(n);
350 if (c) ee->prop.clas = strdup(c);
351 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
355 _ecore_evas_ews_size_min_set(Ecore_Evas *ee, int w, int h)
359 if ((ee->prop.min.w == w) && (ee->prop.min.h == h)) return;
362 evas_object_size_hint_min_set(ee->engine.ews.image, w, h);
363 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
367 _ecore_evas_ews_size_max_set(Ecore_Evas *ee, int w, int h)
371 if ((ee->prop.max.w == w) && (ee->prop.max.h == h)) return;
374 evas_object_size_hint_max_set(ee->engine.ews.image, w, h);
375 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
379 _ecore_evas_ews_size_base_set(Ecore_Evas *ee, int w, int h)
383 if ((ee->prop.base.w == w) && (ee->prop.base.h == h)) return;
386 evas_object_size_hint_request_set(ee->engine.ews.image, w, h);
387 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
391 _ecore_evas_ews_size_step_set(Ecore_Evas *ee, int w, int h)
395 if ((ee->prop.step.w == w) && (ee->prop.step.h == h)) return;
398 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
402 _ecore_evas_ews_object_cursor_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
404 Ecore_Evas *ee = data;
405 ee->prop.cursor.object = NULL;
409 _ecore_evas_ews_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y)
413 if (ee->prop.cursor.object) evas_object_del(ee->prop.cursor.object);
417 ee->prop.cursor.object = NULL;
418 ee->prop.cursor.layer = 0;
419 ee->prop.cursor.hot.x = 0;
420 ee->prop.cursor.hot.y = 0;
424 ee->prop.cursor.object = obj;
425 ee->prop.cursor.layer = layer;
426 ee->prop.cursor.hot.x = hot_x;
427 ee->prop.cursor.hot.y = hot_y;
428 evas_pointer_output_xy_get(ee->evas, &x, &y);
429 evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer);
430 evas_object_move(ee->prop.cursor.object,
431 x - ee->prop.cursor.hot.x,
432 y - ee->prop.cursor.hot.y);
433 evas_object_pass_events_set(ee->prop.cursor.object, 1);
434 if (evas_pointer_inside_get(ee->evas))
435 evas_object_show(ee->prop.cursor.object);
437 evas_object_event_callback_add
438 (obj, EVAS_CALLBACK_DEL, _ecore_evas_ews_object_cursor_del, ee);
440 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
444 _ecore_evas_ews_layer_set(Ecore_Evas *ee, int layer)
446 if (layer < EVAS_LAYER_MIN + 1)
447 layer = EVAS_LAYER_MIN + 1;
448 else if (layer > EVAS_LAYER_MAX)
449 layer = EVAS_LAYER_MAX;
451 if (ee->prop.layer == layer) return;
452 ee->prop.layer = layer;
453 evas_object_layer_set(ee->engine.ews.image, layer);
454 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_LAYER_CHANGE);
458 _ecore_evas_ews_focus_set(Ecore_Evas *ee, int val)
460 evas_object_focus_set(ee->engine.ews.image, val);
461 ee->prop.focused = val;
464 evas_focus_in(ee->evas);
465 if (ee->func.fn_focus_in) ee->func.fn_focus_in(ee);
466 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_FOCUS);
470 evas_focus_out(ee->evas);
471 if (ee->func.fn_focus_out) ee->func.fn_focus_out(ee);
472 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_UNFOCUS);
477 _ecore_evas_ews_iconified_set(Ecore_Evas *ee, int val)
479 if (ee->prop.iconified == val) return;
480 ee->prop.iconified = val;
481 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_ICONIFIED_CHANGE);
485 _ecore_evas_ews_borderless_set(Ecore_Evas *ee, int val)
487 if (ee->prop.borderless == val) return;
488 ee->prop.borderless = val;
489 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
493 _ecore_evas_ews_override_set(Ecore_Evas *ee, int val)
495 if (ee->prop.override == val) return;
496 if (ee->visible) evas_object_show(ee->engine.ews.image);
497 if (ee->prop.focused) evas_object_focus_set(ee->engine.ews.image, EINA_TRUE);
498 ee->prop.override = val;
499 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
503 _ecore_evas_ews_maximized_set(Ecore_Evas *ee, int val)
505 if (ee->prop.maximized == val) return;
506 ee->prop.maximized = val;
507 if (val) evas_object_show(ee->engine.ews.image);
508 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_MAXIMIZED_CHANGE);
512 _ecore_evas_ews_fullscreen_set(Ecore_Evas *ee, int val)
514 if (ee->prop.fullscreen == val) return;
515 ee->prop.fullscreen = val;
519 evas_object_move(ee->engine.ews.image, ee->x, ee->y);
520 evas_object_resize(ee->engine.ews.image, ee->w, ee->h);
525 ecore_evas_geometry_get(_ews_ee, NULL, NULL, &w, &h);
526 evas_object_move(ee->engine.ews.image, 0, 0);
527 evas_object_resize(ee->engine.ews.image, w, h);
528 evas_object_focus_set(ee->engine.ews.image, EINA_TRUE);
531 if (ee->should_be_visible)
532 evas_object_show(ee->engine.ews.image);
534 evas_object_hide(ee->engine.ews.image);
536 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_FULLSCREEN_CHANGE);
540 _ecore_evas_ews_avoid_damage_set(Ecore_Evas *ee, int val)
542 if (ee->prop.avoid_damage == val) return;
543 ee->prop.avoid_damage = val;
544 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
548 _ecore_evas_ews_withdrawn_set(Ecore_Evas *ee, int val)
550 if (ee->prop.withdrawn == val) return;
551 ee->prop.withdrawn = val;
552 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
556 _ecore_evas_ews_sticky_set(Ecore_Evas *ee, int val)
558 if (ee->prop.sticky == val) return;
559 ee->prop.sticky = val;
560 if ((val) && (ee->func.fn_sticky)) ee->func.fn_sticky(ee);
561 else if ((!val) && (ee->func.fn_unsticky)) ee->func.fn_unsticky(ee);
562 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
566 _ecore_evas_ews_ignore_events_set(Ecore_Evas *ee, int val)
568 if (ee->ignore_events == val) return;
569 ee->ignore_events = val;
570 evas_object_pass_events_set(ee->engine.ews.image, val);
571 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
575 _ecore_evas_ews_alpha_set(Ecore_Evas *ee, int val)
577 if (ee->alpha == val) return;
579 evas_object_image_alpha_set(ee->engine.ews.image, val);
580 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
584 _ecore_evas_ews_transparent_set(Ecore_Evas *ee, int val)
586 if (ee->transparent == val) return;
587 ee->transparent = val;
588 evas_object_image_alpha_set(ee->engine.ews.image, val);
589 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE);
593 _ecore_evas_ews_render(Ecore_Evas *ee)
595 Eina_List *updates = NULL, *l, *ll;
601 EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2)
603 if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
604 rend |= _ecore_evas_ews_render(ee2);
605 if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
608 evas_object_image_size_get(ee->engine.ews.image, &w, &h);
609 if ((w != ee->w) || (h != ee->h))
610 ecore_evas_resize(ee, w, h);
612 pixels = evas_object_image_data_get(ee->engine.ews.image, 1);
615 updates = evas_render_updates(ee->evas);
617 evas_object_image_data_set(ee->engine.ews.image, pixels);
619 EINA_LIST_FOREACH(updates, l, r)
620 evas_object_image_data_update_add(ee->engine.ews.image,
621 r->x, r->y, r->w, r->h);
625 evas_render_updates_free(updates);
626 _ecore_evas_idle_timeout_update(ee);
629 return updates ? 1 : rend;
633 _ecore_evas_ews_screen_geometry_get(const Ecore_Evas *ee __UNUSED__, int *x, int *y, int *w, int *h)
635 ecore_evas_geometry_get(_ews_ee, x, y, w, h);
638 static const Ecore_Evas_Engine_Func _ecore_ews_engine_func =
640 _ecore_evas_ews_free,
655 _ecore_evas_ews_move,
656 _ecore_evas_ews_managed_move,
657 _ecore_evas_ews_resize,
658 _ecore_evas_ews_move_resize,
659 _ecore_evas_ews_rotation_set,
660 _ecore_evas_ews_shaped_set,
661 _ecore_evas_ews_show,
662 _ecore_evas_ews_hide,
663 _ecore_evas_ews_raise,
664 _ecore_evas_ews_lower,
665 _ecore_evas_ews_activate,
666 _ecore_evas_ews_title_set,
667 _ecore_evas_ews_name_class_set,
668 _ecore_evas_ews_size_min_set,
669 _ecore_evas_ews_size_max_set,
670 _ecore_evas_ews_size_base_set,
671 _ecore_evas_ews_size_step_set,
672 _ecore_evas_ews_object_cursor_set,
673 _ecore_evas_ews_layer_set,
674 _ecore_evas_ews_focus_set,
675 _ecore_evas_ews_iconified_set,
676 _ecore_evas_ews_borderless_set,
677 _ecore_evas_ews_override_set,
678 _ecore_evas_ews_maximized_set,
679 _ecore_evas_ews_fullscreen_set,
680 _ecore_evas_ews_avoid_damage_set,
681 _ecore_evas_ews_withdrawn_set,
682 _ecore_evas_ews_sticky_set,
683 _ecore_evas_ews_ignore_events_set,
684 _ecore_evas_ews_alpha_set,
685 _ecore_evas_ews_transparent_set,
686 NULL, // profiles_set
695 _ecore_evas_ews_render,
696 _ecore_evas_ews_screen_geometry_get
700 _ecore_evas_ews_events_init(void)
702 if (ECORE_EVAS_EWS_EVENT_MANAGER_CHANGE != 0) return;
703 ECORE_EVAS_EWS_EVENT_MANAGER_CHANGE = ecore_event_type_new();
704 ECORE_EVAS_EWS_EVENT_ADD = ecore_event_type_new();
705 ECORE_EVAS_EWS_EVENT_DEL = ecore_event_type_new();
706 ECORE_EVAS_EWS_EVENT_RESIZE = ecore_event_type_new();
707 ECORE_EVAS_EWS_EVENT_MOVE = ecore_event_type_new();
708 ECORE_EVAS_EWS_EVENT_SHOW = ecore_event_type_new();
709 ECORE_EVAS_EWS_EVENT_HIDE = ecore_event_type_new();
710 ECORE_EVAS_EWS_EVENT_FOCUS = ecore_event_type_new();
711 ECORE_EVAS_EWS_EVENT_UNFOCUS = ecore_event_type_new();
712 ECORE_EVAS_EWS_EVENT_RAISE = ecore_event_type_new();
713 ECORE_EVAS_EWS_EVENT_LOWER = ecore_event_type_new();
714 ECORE_EVAS_EWS_EVENT_ACTIVATE = ecore_event_type_new();
715 ECORE_EVAS_EWS_EVENT_ICONIFIED_CHANGE = ecore_event_type_new();
716 ECORE_EVAS_EWS_EVENT_MAXIMIZED_CHANGE = ecore_event_type_new();
717 ECORE_EVAS_EWS_EVENT_LAYER_CHANGE = ecore_event_type_new();
718 ECORE_EVAS_EWS_EVENT_FULLSCREEN_CHANGE = ecore_event_type_new();
719 ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE = ecore_event_type_new();
723 _ecore_evas_ews_init(void)
725 _ecore_evas_init_count++;
726 if (_ecore_evas_init_count > 1) return _ecore_evas_init_count;
728 _ecore_evas_ews_env_setup();
730 return _ecore_evas_init_count;
734 _ecore_evas_ews_shutdown(void)
736 _ecore_evas_init_count--;
737 if (_ecore_evas_init_count == 0)
741 ecore_evas_free(_ews_ee);
746 eina_list_free(_ews_children);
747 _ews_children = NULL;
754 _ews_defaults_engine = EINA_TRUE;
755 _ews_defaults_geo = EINA_TRUE;
758 if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
759 return _ecore_evas_init_count;
763 _ecore_evas_ews_coord_translate(Ecore_Evas *ee, Evas_Coord *x, Evas_Coord *y)
765 Evas_Coord xx, yy, ww, hh, fx, fy, fw, fh;
767 evas_object_geometry_get(ee->engine.ews.image, &xx, &yy, &ww, &hh);
768 evas_object_image_fill_get(ee->engine.ews.image, &fx, &fy, &fw, &fh);
773 if ((fx == 0) && (fy == 0) && (fw == ww) && (fh == hh))
775 *x = (ee->w * (*x - xx)) / fw;
776 *y = (ee->h * (*y - yy)) / fh;
781 while (xx < 0) xx += fw;
782 while (xx > fw) xx -= fw;
783 *x = (ee->w * xx) / fw;
786 while (yy < 0) yy += fh;
787 while (yy > fh) yy -= fh;
788 *y = (ee->h * yy) / fh;
793 _ecore_evas_ews_modifiers_apply(Ecore_Evas *ee, const Evas_Modifier *modifier)
797 if (evas_key_modifier_is_set(modifier, "Shift"))
798 evas_key_modifier_on(e, "Shift");
799 else evas_key_modifier_off(e, "Shift");
801 if (evas_key_modifier_is_set(modifier, "Control"))
802 evas_key_modifier_on(e, "Control");
803 else evas_key_modifier_off(e, "Control");
805 if (evas_key_modifier_is_set(modifier, "Alt"))
806 evas_key_modifier_on(e, "Alt");
807 else evas_key_modifier_off(e, "Alt");
809 if (evas_key_modifier_is_set(modifier, "Super"))
810 evas_key_modifier_on(e, "Super");
811 else evas_key_modifier_off(e, "Super");
813 if (evas_key_modifier_is_set(modifier, "Hyper"))
814 evas_key_modifier_on(e, "Hyper");
815 else evas_key_modifier_off(e, "Hyper");
817 if (evas_key_modifier_is_set(modifier, "Scroll_Lock"))
818 evas_key_lock_on(e, "Scroll_Lock");
819 else evas_key_lock_off(e, "Scroll_Lock");
821 if (evas_key_modifier_is_set(modifier, "Num_Lock"))
822 evas_key_lock_on(e, "Num_Lock");
823 else evas_key_lock_off(e, "Num_Lock");
825 if (evas_key_modifier_is_set(modifier, "Caps_Lock"))
826 evas_key_lock_on(e, "Caps_Lock");
827 else evas_key_lock_off(e, "Caps_Lock");
829 if (evas_key_modifier_is_set(modifier, "Shift_Lock"))
830 evas_key_lock_on(e, "Shift_Lock");
831 else evas_key_lock_off(e, "Shift_Lock");
835 _ecore_evas_ews_cb_mouse_in(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
837 Ecore_Evas *ee = data;
838 Evas_Event_Mouse_In *ev = event_info;
839 Evas_Coord x = ev->canvas.x;
840 Evas_Coord y = ev->canvas.y;
841 _ecore_evas_ews_coord_translate(ee, &x, &y);
842 if (ee->func.fn_mouse_in) ee->func.fn_mouse_in(ee);
843 _ecore_evas_ews_modifiers_apply(ee, ev->modifiers);
844 evas_event_feed_mouse_in(ee->evas, ev->timestamp, NULL);
845 _ecore_evas_mouse_move_process(ee, x, y, ev->timestamp);
849 _ecore_evas_ews_cb_mouse_out(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
851 Ecore_Evas *ee = data;
852 Evas_Event_Mouse_Out *ev = event_info;
853 Evas_Coord x = ev->canvas.x;
854 Evas_Coord y = ev->canvas.y;
855 // TODO: consider grab mode in EWS
856 _ecore_evas_ews_coord_translate(ee, &x, &y);
857 if (ee->func.fn_mouse_out) ee->func.fn_mouse_out(ee);
858 _ecore_evas_ews_modifiers_apply(ee, ev->modifiers);
859 evas_event_feed_mouse_out(ee->evas, ev->timestamp, NULL);
860 if (ee->prop.cursor.object) evas_object_hide(ee->prop.cursor.object);
861 _ecore_evas_mouse_move_process(ee, x, y, ev->timestamp);
865 _ecore_evas_ews_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
867 Ecore_Evas *ee = data;
868 Evas_Event_Mouse_Down *ev = event_info;
869 _ecore_evas_ews_modifiers_apply(ee, ev->modifiers);
870 evas_event_feed_mouse_down(ee->evas, ev->button, ev->flags, ev->timestamp, NULL);
874 _ecore_evas_ews_cb_mouse_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
876 Ecore_Evas *ee = data;
877 Evas_Event_Mouse_Up *ev = event_info;
878 _ecore_evas_ews_modifiers_apply(ee, ev->modifiers);
879 evas_event_feed_mouse_up(ee->evas, ev->button, ev->flags, ev->timestamp, NULL);
883 _ecore_evas_ews_cb_mouse_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
885 Ecore_Evas *ee = data;
886 Evas_Event_Mouse_Move *ev = event_info;
887 Evas_Coord x = ev->cur.canvas.x;
888 Evas_Coord y = ev->cur.canvas.y;
889 _ecore_evas_ews_coord_translate(ee, &x, &y);
890 _ecore_evas_ews_modifiers_apply(ee, ev->modifiers);
891 _ecore_evas_mouse_move_process(ee, x, y, ev->timestamp);
895 _ecore_evas_ews_cb_mouse_wheel(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
897 Ecore_Evas *ee = data;
898 Evas_Event_Mouse_Wheel *ev = event_info;
899 _ecore_evas_ews_modifiers_apply(ee, ev->modifiers);
900 evas_event_feed_mouse_wheel(ee->evas, ev->direction, ev->z, ev->timestamp, NULL);
904 _ecore_evas_ews_cb_multi_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
906 Ecore_Evas *ee = data;
907 Evas_Event_Multi_Down *ev = event_info;
908 Evas_Coord x, y, xx, yy;
915 _ecore_evas_ews_coord_translate(ee, &x, &y);
916 xf = (ev->canvas.xsub - (double)xx) + (double)x;
917 yf = (ev->canvas.ysub - (double)yy) + (double)y;
918 _ecore_evas_ews_modifiers_apply(ee, ev->modifiers);
919 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);
923 _ecore_evas_ews_cb_multi_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
925 Ecore_Evas *ee = data;
926 Evas_Event_Multi_Up *ev = event_info;
927 Evas_Coord x, y, xx, yy;
934 _ecore_evas_ews_coord_translate(ee, &x, &y);
935 xf = (ev->canvas.xsub - (double)xx) + (double)x;
936 yf = (ev->canvas.ysub - (double)yy) + (double)y;
937 _ecore_evas_ews_modifiers_apply(ee, ev->modifiers);
938 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);
942 _ecore_evas_ews_cb_multi_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
944 Ecore_Evas *ee = data;
945 Evas_Event_Multi_Move *ev = event_info;
946 Evas_Coord x, y, xx, yy;
949 x = ev->cur.canvas.x;
950 y = ev->cur.canvas.y;
953 _ecore_evas_ews_coord_translate(ee, &x, &y);
954 xf = (ev->cur.canvas.xsub - (double)xx) + (double)x;
955 yf = (ev->cur.canvas.ysub - (double)yy) + (double)y;
956 _ecore_evas_ews_modifiers_apply(ee, ev->modifiers);
957 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);
961 _ecore_evas_ews_cb_free(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
963 Ecore_Evas *ee = data;
964 if (ee->driver) _ecore_evas_free(ee);
968 _ecore_evas_ews_cb_key_down(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
970 Ecore_Evas *ee = data;
971 Evas_Event_Key_Down *ev = event_info;
973 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Shift"))
974 evas_key_modifier_on(ee->evas, "Shift");
976 evas_key_modifier_off(ee->evas, "Shift");
977 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Control"))
978 evas_key_modifier_on(ee->evas, "Control");
980 evas_key_modifier_off(ee->evas, "Control");
981 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Alt"))
982 evas_key_modifier_on(ee->evas, "Alt");
984 evas_key_modifier_off(ee->evas, "Alt");
985 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Meta"))
986 evas_key_modifier_on(ee->evas, "Meta");
988 evas_key_modifier_off(ee->evas, "Meta");
989 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Hyper"))
990 evas_key_modifier_on(ee->evas, "Hyper");
992 evas_key_modifier_off(ee->evas, "Hyper");
993 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Super"))
994 evas_key_modifier_on(ee->evas, "Super");
996 evas_key_modifier_off(ee->evas, "Super");
997 if (evas_key_lock_is_set(evas_key_lock_get(e), "Scroll_Lock"))
998 evas_key_lock_on(ee->evas, "Scroll_Lock");
1000 evas_key_lock_off(ee->evas, "Scroll_Lock");
1001 if (evas_key_lock_is_set(evas_key_lock_get(e), "Num_Lock"))
1002 evas_key_lock_on(ee->evas, "Num_Lock");
1004 evas_key_lock_off(ee->evas, "Num_Lock");
1005 if (evas_key_lock_is_set(evas_key_lock_get(e), "Caps_Lock"))
1006 evas_key_lock_on(ee->evas, "Caps_Lock");
1008 evas_key_lock_off(ee->evas, "Caps_Lock");
1009 evas_event_feed_key_down(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL);
1013 _ecore_evas_ews_cb_key_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info)
1015 Ecore_Evas *ee = data;
1016 Evas_Event_Key_Up *ev = event_info;
1018 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Shift"))
1019 evas_key_modifier_on(ee->evas, "Shift");
1021 evas_key_modifier_off(ee->evas, "Shift");
1022 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Control"))
1023 evas_key_modifier_on(ee->evas, "Control");
1025 evas_key_modifier_off(ee->evas, "Control");
1026 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Alt"))
1027 evas_key_modifier_on(ee->evas, "Alt");
1029 evas_key_modifier_off(ee->evas, "Alt");
1030 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Meta"))
1031 evas_key_modifier_on(ee->evas, "Meta");
1033 evas_key_modifier_off(ee->evas, "Meta");
1034 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Hyper"))
1035 evas_key_modifier_on(ee->evas, "Hyper");
1037 evas_key_modifier_off(ee->evas, "Hyper");
1038 if (evas_key_modifier_is_set(evas_key_modifier_get(e), "Super"))
1039 evas_key_modifier_on(ee->evas, "Super");
1041 evas_key_modifier_off(ee->evas, "Super");
1042 if (evas_key_lock_is_set(evas_key_lock_get(e), "Scroll_Lock"))
1043 evas_key_lock_on(ee->evas, "Scroll_Lock");
1045 evas_key_lock_off(ee->evas, "Scroll_Lock");
1046 if (evas_key_lock_is_set(evas_key_lock_get(e), "Num_Lock"))
1047 evas_key_lock_on(ee->evas, "Num_Lock");
1049 evas_key_lock_off(ee->evas, "Num_Lock");
1050 if (evas_key_lock_is_set(evas_key_lock_get(e), "Caps_Lock"))
1051 evas_key_lock_on(ee->evas, "Caps_Lock");
1053 evas_key_lock_off(ee->evas, "Caps_Lock");
1054 evas_event_feed_key_up(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL);
1058 _ecore_evas_ews_cb_focus_in(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1060 Ecore_Evas *ee = data;
1061 ecore_evas_focus_set(ee, EINA_TRUE);
1065 _ecore_evas_ews_cb_focus_out(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1067 Ecore_Evas *ee = data;
1068 if (ee->deleted) return;
1069 ecore_evas_focus_set(ee, EINA_FALSE);
1073 _ecore_evas_ews_cb_show(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1075 Ecore_Evas *ee = data;
1076 ecore_evas_show(ee);
1080 _ecore_evas_ews_cb_hide(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1082 Ecore_Evas *ee = data;
1083 if (ee->deleted) return;
1084 ecore_evas_hide(ee);
1089 ecore_evas_ews_new(int x, int y, int w, int h)
1091 // basically a copy of ecore_evas_buffer_new() keep in sync...
1092 #ifdef BUILD_ECORE_EVAS_EWS
1094 Evas_Engine_Info_Buffer *einfo;
1098 if (_ecore_evas_ews_init() < 1) return NULL;
1100 if (!_ews_ee) _ews_ee = _ecore_evas_ews_ee_new();
1103 ERR("Could not create EWS backing store");
1104 _ecore_evas_ews_shutdown();
1108 rmethod = evas_render_method_lookup("buffer");
1109 if (!rmethod) return NULL;
1110 ee = calloc(1, sizeof(Ecore_Evas));
1111 if (!ee) return NULL;
1116 o = evas_object_image_add(_ews_ee->evas);
1117 evas_object_image_content_hint_set(o, EVAS_IMAGE_CONTENT_HINT_DYNAMIC);
1118 evas_object_image_colorspace_set(o, EVAS_COLORSPACE_ARGB8888);
1119 evas_object_image_size_set(o, w, h);
1120 evas_object_image_alpha_set(o, 1);
1122 ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
1124 ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_ews_engine_func;
1126 ee->driver = EWS_ENGINE_NAME;
1137 /* init evas here */
1138 ee->evas = evas_new();
1139 evas_data_attach_set(ee->evas, ee);
1140 evas_output_method_set(ee->evas, rmethod);
1141 evas_output_size_set(ee->evas, w, h);
1142 evas_output_viewport_set(ee->evas, 0, 0, w, h);
1144 evas_object_move(o, x, y);
1145 evas_object_resize(o, w, h);
1146 evas_object_image_fill_set(o, 0, 0, w, h);
1148 ee->engine.ews.image = o;
1149 evas_object_data_set(ee->engine.ews.image, "Ecore_Evas", ee);
1150 evas_object_event_callback_add(ee->engine.ews.image,
1151 EVAS_CALLBACK_MOUSE_IN,
1152 _ecore_evas_ews_cb_mouse_in, ee);
1153 evas_object_event_callback_add(ee->engine.ews.image,
1154 EVAS_CALLBACK_MOUSE_OUT,
1155 _ecore_evas_ews_cb_mouse_out, ee);
1156 evas_object_event_callback_add(ee->engine.ews.image,
1157 EVAS_CALLBACK_MOUSE_DOWN,
1158 _ecore_evas_ews_cb_mouse_down, ee);
1159 evas_object_event_callback_add(ee->engine.ews.image,
1160 EVAS_CALLBACK_MOUSE_UP,
1161 _ecore_evas_ews_cb_mouse_up, ee);
1162 evas_object_event_callback_add(ee->engine.ews.image,
1163 EVAS_CALLBACK_MOUSE_MOVE,
1164 _ecore_evas_ews_cb_mouse_move, ee);
1165 evas_object_event_callback_add(ee->engine.ews.image,
1166 EVAS_CALLBACK_MOUSE_WHEEL,
1167 _ecore_evas_ews_cb_mouse_wheel, ee);
1168 evas_object_event_callback_add(ee->engine.ews.image,
1169 EVAS_CALLBACK_MULTI_DOWN,
1170 _ecore_evas_ews_cb_multi_down, ee);
1171 evas_object_event_callback_add(ee->engine.ews.image,
1172 EVAS_CALLBACK_MULTI_UP,
1173 _ecore_evas_ews_cb_multi_up, ee);
1174 evas_object_event_callback_add(ee->engine.ews.image,
1175 EVAS_CALLBACK_MULTI_MOVE,
1176 _ecore_evas_ews_cb_multi_move, ee);
1177 evas_object_event_callback_add(ee->engine.ews.image,
1179 _ecore_evas_ews_cb_free, ee);
1180 evas_object_event_callback_add(ee->engine.ews.image,
1181 EVAS_CALLBACK_KEY_DOWN,
1182 _ecore_evas_ews_cb_key_down, ee);
1183 evas_object_event_callback_add(ee->engine.ews.image,
1184 EVAS_CALLBACK_KEY_UP,
1185 _ecore_evas_ews_cb_key_up, ee);
1186 evas_object_event_callback_add(ee->engine.ews.image,
1187 EVAS_CALLBACK_FOCUS_IN,
1188 _ecore_evas_ews_cb_focus_in, ee);
1189 evas_object_event_callback_add(ee->engine.ews.image,
1190 EVAS_CALLBACK_FOCUS_OUT,
1191 _ecore_evas_ews_cb_focus_out, ee);
1192 evas_object_event_callback_add(ee->engine.ews.image,
1194 _ecore_evas_ews_cb_show, ee);
1195 evas_object_event_callback_add(ee->engine.ews.image,
1197 _ecore_evas_ews_cb_hide, ee);
1198 einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ee->evas);
1201 void *pixels = evas_object_image_data_get(o, 1);
1202 evas_object_image_data_set(o, pixels); // refcount
1203 einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
1204 einfo->info.dest_buffer = pixels;
1205 einfo->info.dest_buffer_row_bytes = evas_object_image_stride_get(o);
1206 einfo->info.use_color_key = 0;
1207 einfo->info.alpha_threshold = 0;
1208 einfo->info.func.new_update_region = NULL;
1209 einfo->info.func.free_update_region = NULL;
1210 evas_object_image_data_set(o, pixels);
1211 if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
1213 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
1214 ecore_evas_free(ee);
1220 ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
1221 ecore_evas_free(ee);
1224 evas_key_modifier_add(ee->evas, "Shift");
1225 evas_key_modifier_add(ee->evas, "Control");
1226 evas_key_modifier_add(ee->evas, "Alt");
1227 evas_key_modifier_add(ee->evas, "Meta");
1228 evas_key_modifier_add(ee->evas, "Hyper");
1229 evas_key_modifier_add(ee->evas, "Super");
1230 evas_key_lock_add(ee->evas, "Caps_Lock");
1231 evas_key_lock_add(ee->evas, "Num_Lock");
1232 evas_key_lock_add(ee->evas, "Scroll_Lock");
1234 _ews_ee->sub_ecore_evas = eina_list_append(_ews_ee->sub_ecore_evas, ee);
1235 _ews_children = eina_list_append(_ews_children, ee);
1237 _ecore_evas_ews_event(ee, ECORE_EVAS_EWS_EVENT_ADD);
1250 ecore_evas_ews_backing_store_get(const Ecore_Evas *ee)
1252 #ifdef BUILD_ECORE_EVAS_EWS
1253 if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
1255 ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
1256 "ecore_evas_ews_backing_store_get");
1259 return ee->engine.ews.image;
1267 ecore_evas_ews_delete_request(Ecore_Evas *ee)
1269 #ifdef BUILD_ECORE_EVAS_EWS
1270 if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
1272 ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
1273 "ecore_evas_ews_delete_request");
1276 if (ee->func.fn_delete_request) ee->func.fn_delete_request(ee);
1277 else ecore_evas_free(ee);
1285 ecore_evas_ews_engine_set(const char *engine, const char *options)
1287 #ifdef BUILD_ECORE_EVAS_EWS
1288 if (_ews_ee) return EINA_FALSE;
1293 _ews_engine = engine ? strdup(engine) : NULL;
1294 _ews_options = options ? strdup(options) : NULL;
1296 if ((engine) && (!_ews_engine)) return EINA_FALSE;
1297 if ((options) && (!_ews_options)) return EINA_FALSE;
1299 _ews_defaults_engine = EINA_FALSE;
1309 ecore_evas_ews_setup(int x, int y, int w, int h)
1311 #ifdef BUILD_ECORE_EVAS_EWS
1312 Eina_Bool ret = EINA_TRUE;
1314 _ews_defaults_geo = EINA_FALSE;
1320 if (!_ews_ee) return EINA_TRUE;
1322 /* move-resize is not as implemented as move + resize */
1323 ecore_evas_move(_ews_ee, x, y);
1324 ecore_evas_size_min_set(_ews_ee, w, h);
1325 ecore_evas_size_max_set(_ews_ee, w, h);
1326 ecore_evas_resize(_ews_ee, w, h);
1328 ecore_evas_geometry_get(_ews_ee, &x, &y, &w, &h);
1330 #define TST(n) if ((n != _ews_##n)) \
1332 WRN("Asked %d, got %d for "#n, _ews_##n, n); \
1351 ecore_evas_ews_ecore_evas_get(void)
1353 #ifdef BUILD_ECORE_EVAS_EWS
1354 if (!_ews_ee) _ews_ee = _ecore_evas_ews_ee_new();
1362 ecore_evas_ews_evas_get(void)
1364 #ifdef BUILD_ECORE_EVAS_EWS
1365 return ecore_evas_get(ecore_evas_ews_ecore_evas_get());
1372 ecore_evas_ews_background_get(void)
1374 #ifdef BUILD_ECORE_EVAS_EWS
1381 #ifdef BUILD_ECORE_EVAS_EWS
1383 _ecore_evas_ews_background_free(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
1386 ecore_evas_ews_background_set(NULL);
1391 ecore_evas_ews_background_set(Evas_Object *o)
1393 #ifdef BUILD_ECORE_EVAS_EWS
1394 if ((o) && (o == _ews_bg)) return;
1398 evas_object_del(_ews_bg);
1402 if ((!o) && (_ews_ee))
1404 o = evas_object_rectangle_add(ecore_evas_get(_ews_ee));
1405 evas_object_color_set(o, 0, 0, 0, 255);
1411 Evas *e = ecore_evas_get(_ews_ee);
1413 if (e != evas_object_evas_get(o))
1415 ERR("background not in ecore_evas_ews_evas_get() canvas!");
1419 evas_output_viewport_get(e, NULL, NULL, &w, &h);
1420 evas_object_move(o, 0, 0);
1421 evas_object_resize(o, w, h);
1422 evas_object_layer_set(o, EVAS_LAYER_MIN);
1423 evas_object_lower(o);
1424 evas_object_show(o);
1426 evas_object_event_callback_add
1427 (o, EVAS_CALLBACK_FREE, _ecore_evas_ews_background_free, NULL);
1438 EAPI const Eina_List *
1439 ecore_evas_ews_children_get(void)
1441 #ifdef BUILD_ECORE_EVAS_EWS
1442 return _ews_children;
1449 ecore_evas_ews_manager_set(const void *manager)
1451 #ifdef BUILD_ECORE_EVAS_EWS
1452 if (_ews_manager == manager) return;
1453 _ews_manager = manager;
1454 ecore_event_add(ECORE_EVAS_EWS_EVENT_MANAGER_CHANGE, NULL, NULL, NULL);
1461 ecore_evas_ews_manager_get(void)
1463 #ifdef BUILD_ECORE_EVAS_EWS
1464 return _ews_manager;