create substruct for E_Comp to put canvas objects into

allow adding/removing objects in the future without breaking abi
This commit is contained in:
Mike Blumenkrantz 2016-10-25 12:01:17 -04:00
parent 989675f310
commit ef33638c42
4 changed files with 41 additions and 32 deletions

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -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