diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c index 3af75934a..d8dcb07ab 100644 --- a/src/bin/e_comp.c +++ b/src/bin/e_comp.c @@ -200,28 +200,28 @@ _e_comp_fps_update(void) { if (conf->fps_show) { - if (e_comp->fps_bg) return; + if (e_comp->canvas->fps_bg) return; - e_comp->fps_bg = evas_object_rectangle_add(e_comp->evas); - evas_object_color_set(e_comp->fps_bg, 0, 0, 0, 128); - evas_object_layer_set(e_comp->fps_bg, E_LAYER_MAX); - evas_object_name_set(e_comp->fps_bg, "e_comp->fps_bg"); - evas_object_lower(e_comp->fps_bg); - evas_object_show(e_comp->fps_bg); + e_comp->canvas->fps_bg = evas_object_rectangle_add(e_comp->evas); + evas_object_color_set(e_comp->canvas->fps_bg, 0, 0, 0, 128); + evas_object_layer_set(e_comp->canvas->fps_bg, E_LAYER_MAX); + evas_object_name_set(e_comp->canvas->fps_bg, "e_comp->canvas->fps_bg"); + evas_object_lower(e_comp->canvas->fps_bg); + evas_object_show(e_comp->canvas->fps_bg); - e_comp->fps_fg = evas_object_text_add(e_comp->evas); - evas_object_text_font_set(e_comp->fps_fg, "Sans", 10); - evas_object_text_text_set(e_comp->fps_fg, "???"); - evas_object_color_set(e_comp->fps_fg, 255, 255, 255, 255); - evas_object_layer_set(e_comp->fps_fg, E_LAYER_MAX); - evas_object_name_set(e_comp->fps_bg, "e_comp->fps_fg"); - evas_object_stack_above(e_comp->fps_fg, e_comp->fps_bg); - evas_object_show(e_comp->fps_fg); + e_comp->canvas->fps_fg = evas_object_text_add(e_comp->evas); + evas_object_text_font_set(e_comp->canvas->fps_fg, "Sans", 10); + evas_object_text_text_set(e_comp->canvas->fps_fg, "???"); + evas_object_color_set(e_comp->canvas->fps_fg, 255, 255, 255, 255); + evas_object_layer_set(e_comp->canvas->fps_fg, E_LAYER_MAX); + evas_object_name_set(e_comp->canvas->fps_bg, "e_comp->canvas->fps_fg"); + evas_object_stack_above(e_comp->canvas->fps_fg, e_comp->canvas->fps_bg); + evas_object_show(e_comp->canvas->fps_fg); } else { - E_FREE_FUNC(e_comp->fps_fg, evas_object_del); - E_FREE_FUNC(e_comp->fps_bg, evas_object_del); + E_FREE_FUNC(e_comp->canvas->fps_fg, evas_object_del); + E_FREE_FUNC(e_comp->canvas->fps_bg, evas_object_del); } } @@ -425,9 +425,9 @@ _e_comp_cb_update(void) if (e_comp->frameskip >= conf->fps_average_range) { e_comp->frameskip = 0; - evas_object_text_text_set(e_comp->fps_fg, buf); + evas_object_text_text_set(e_comp->canvas->fps_fg, buf); } - evas_object_geometry_get(e_comp->fps_fg, NULL, NULL, &w, &h); + evas_object_geometry_get(e_comp->canvas->fps_fg, NULL, NULL, &w, &h); w += 8; h += 8; z = e_zone_current_get(); @@ -455,9 +455,9 @@ _e_comp_cb_update(void) break; } } - evas_object_move(e_comp->fps_bg, x, y); - evas_object_resize(e_comp->fps_bg, w, h); - evas_object_move(e_comp->fps_fg, x + 4, y + 4); + evas_object_move(e_comp->canvas->fps_bg, x, y); + evas_object_resize(e_comp->canvas->fps_bg, w, h); + evas_object_move(e_comp->canvas->fps_fg, x + 4, y + 4); } if (conf->lock_fps) { @@ -581,7 +581,7 @@ _e_comp_shapes_update_object_checker_function_thingy(Evas_Object *o) Eina_List *l; E_Zone *zone; - if (o == e_comp->bg_blank_object) return EINA_TRUE; + if (o == e_comp->canvas->bg_blank_object) return EINA_TRUE; EINA_LIST_FOREACH(e_comp->zones, l, zone) { if ((o == zone->over) || (o == zone->base)) return EINA_TRUE; @@ -851,7 +851,7 @@ _e_comp_free(E_Comp *c) if (c->nocomp_delay_timer) ecore_timer_del(c->nocomp_delay_timer); if (c->nocomp_override_timer) ecore_timer_del(c->nocomp_override_timer); ecore_job_del(c->shape_job); - + free(c->canvas); free(c); } @@ -1363,6 +1363,7 @@ e_comp_new(void) CRI("CANNOT REPLACE EXISTING COMPOSITOR"); e_comp = E_OBJECT_ALLOC(E_Comp, E_COMP_TYPE, _e_comp_free); if (!e_comp) return NULL; + e_comp->canvas = E_NEW(E_Comp_Canvas, 1); e_comp->render_animator = ecore_animator_add(_e_comp_cb_animator, NULL); ecore_animator_freeze(e_comp->render_animator); diff --git a/src/bin/e_comp.h b/src/bin/e_comp.h index 5edf2e2a5..f9aa13d2a 100644 --- a/src/bin/e_comp.h +++ b/src/bin/e_comp.h @@ -76,6 +76,16 @@ typedef struct E_Comp_Screen_Iface Eina_Bool (*key_up)(Ecore_Event_Key *ev); } E_Comp_Screen_Iface; +/* struct to hold canvas objects so that abi doesn't break + * when new objects are added + */ +typedef struct E_Comp_Canvas +{ + Evas_Object *bg_blank_object; //black blocker rect to cover background artifacts + Evas_Object *fps_bg; + Evas_Object *fps_fg; +} E_Comp_Canvas; + struct _E_Comp { E_Object e_obj_inherit; @@ -85,9 +95,9 @@ struct _E_Comp Ecore_Window root; //x11 root window Ecore_Evas *ee; //canvas Ecore_Window ee_win; //canvas window + E_Comp_Canvas *canvas; Evas_Object *elm; //elm win base Evas *evas; //canvas - Evas_Object *bg_blank_object; //black blocker rect to cover background artifacts Eina_List *zones; //list of E_Zones E_Pointer *pointer; Eina_List *clients; //list of all E_Clients @@ -128,8 +138,6 @@ struct _E_Comp Ecore_Animator *render_animator; //animator for fixed time rendering Ecore_Job *shape_job; //job to update x11 input shapes Ecore_Job *update_job; //job to trigger render updates - Evas_Object *fps_bg; - Evas_Object *fps_fg; Ecore_Timer *nocomp_delay_timer; //delay before activating nocomp in x11 Ecore_Timer *nocomp_override_timer; //delay before overriding nocomp in x11 int animating; //number of animating comp objects diff --git a/src/bin/e_comp_canvas.c b/src/bin/e_comp_canvas.c index 0289b4295..deab362f0 100644 --- a/src/bin/e_comp_canvas.c +++ b/src/bin/e_comp_canvas.c @@ -289,12 +289,12 @@ e_comp_canvas_init(int w, int h) if (e_first_frame) evas_event_callback_add(e_comp->evas, EVAS_CALLBACK_RENDER_POST, _e_comp_canvas_cb_first_frame, NULL); o = evas_object_rectangle_add(e_comp->evas); - e_comp->bg_blank_object = o; + e_comp->canvas->bg_blank_object = o; evas_object_layer_set(o, E_LAYER_BOTTOM); evas_object_move(o, 0, 0); evas_object_resize(o, e_comp->w, e_comp->h); evas_object_color_set(o, 0, 0, 0, 255); - evas_object_name_set(o, "comp->bg_blank_object"); + evas_object_name_set(o, "comp->canvas->bg_blank_object"); evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, (Evas_Object_Event_Cb)_e_comp_canvas_cb_mouse_down, NULL); evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, (Evas_Object_Event_Cb)_e_comp_canvas_cb_mouse_up, NULL); evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_IN, (Evas_Object_Event_Cb)_e_comp_canvas_cb_mouse_in, NULL); @@ -346,8 +346,8 @@ e_comp_canvas_clear(void) evas_event_freeze(e_comp->evas); edje_freeze(); - E_FREE_FUNC(e_comp->fps_fg, evas_object_del); - E_FREE_FUNC(e_comp->fps_bg, evas_object_del); + E_FREE_FUNC(e_comp->canvas->fps_fg, evas_object_del); + E_FREE_FUNC(e_comp->canvas->fps_bg, evas_object_del); E_FREE_FUNC(e_comp->autoclose.rect, evas_object_del); E_FREE_FUNC(e_comp->shape_job, ecore_job_del); E_FREE_FUNC(e_comp->pointer, e_object_del); diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c index 4d830705b..714431c85 100644 --- a/src/bin/e_comp_x.c +++ b/src/bin/e_comp_x.c @@ -5457,7 +5457,7 @@ _e_comp_x_setup(Ecore_X_Window root, int w, int h) e_pointer_window_add(e_comp->pointer, e_comp->root); _e_comp_x_manage_windows(); - return !!e_comp->bg_blank_object; + return !!e_comp->canvas->bg_blank_object; } static Eina_Bool