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 (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); e_comp->canvas->fps_bg = evas_object_rectangle_add(e_comp->evas);
evas_object_color_set(e_comp->fps_bg, 0, 0, 0, 128); evas_object_color_set(e_comp->canvas->fps_bg, 0, 0, 0, 128);
evas_object_layer_set(e_comp->fps_bg, E_LAYER_MAX); evas_object_layer_set(e_comp->canvas->fps_bg, E_LAYER_MAX);
evas_object_name_set(e_comp->fps_bg, "e_comp->fps_bg"); evas_object_name_set(e_comp->canvas->fps_bg, "e_comp->canvas->fps_bg");
evas_object_lower(e_comp->fps_bg); evas_object_lower(e_comp->canvas->fps_bg);
evas_object_show(e_comp->fps_bg); evas_object_show(e_comp->canvas->fps_bg);
e_comp->fps_fg = evas_object_text_add(e_comp->evas); e_comp->canvas->fps_fg = evas_object_text_add(e_comp->evas);
evas_object_text_font_set(e_comp->fps_fg, "Sans", 10); evas_object_text_font_set(e_comp->canvas->fps_fg, "Sans", 10);
evas_object_text_text_set(e_comp->fps_fg, "???"); evas_object_text_text_set(e_comp->canvas->fps_fg, "???");
evas_object_color_set(e_comp->fps_fg, 255, 255, 255, 255); evas_object_color_set(e_comp->canvas->fps_fg, 255, 255, 255, 255);
evas_object_layer_set(e_comp->fps_fg, E_LAYER_MAX); evas_object_layer_set(e_comp->canvas->fps_fg, E_LAYER_MAX);
evas_object_name_set(e_comp->fps_bg, "e_comp->fps_fg"); evas_object_name_set(e_comp->canvas->fps_bg, "e_comp->canvas->fps_fg");
evas_object_stack_above(e_comp->fps_fg, e_comp->fps_bg); evas_object_stack_above(e_comp->canvas->fps_fg, e_comp->canvas->fps_bg);
evas_object_show(e_comp->fps_fg); evas_object_show(e_comp->canvas->fps_fg);
} }
else else
{ {
E_FREE_FUNC(e_comp->fps_fg, evas_object_del); E_FREE_FUNC(e_comp->canvas->fps_fg, evas_object_del);
E_FREE_FUNC(e_comp->fps_bg, 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) if (e_comp->frameskip >= conf->fps_average_range)
{ {
e_comp->frameskip = 0; 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; w += 8;
h += 8; h += 8;
z = e_zone_current_get(); z = e_zone_current_get();
@ -455,9 +455,9 @@ _e_comp_cb_update(void)
break; break;
} }
} }
evas_object_move(e_comp->fps_bg, x, y); evas_object_move(e_comp->canvas->fps_bg, x, y);
evas_object_resize(e_comp->fps_bg, w, h); evas_object_resize(e_comp->canvas->fps_bg, w, h);
evas_object_move(e_comp->fps_fg, x + 4, y + 4); evas_object_move(e_comp->canvas->fps_fg, x + 4, y + 4);
} }
if (conf->lock_fps) if (conf->lock_fps)
{ {
@ -581,7 +581,7 @@ _e_comp_shapes_update_object_checker_function_thingy(Evas_Object *o)
Eina_List *l; Eina_List *l;
E_Zone *zone; 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) EINA_LIST_FOREACH(e_comp->zones, l, zone)
{ {
if ((o == zone->over) || (o == zone->base)) return EINA_TRUE; 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_delay_timer) ecore_timer_del(c->nocomp_delay_timer);
if (c->nocomp_override_timer) ecore_timer_del(c->nocomp_override_timer); if (c->nocomp_override_timer) ecore_timer_del(c->nocomp_override_timer);
ecore_job_del(c->shape_job); ecore_job_del(c->shape_job);
free(c->canvas);
free(c); free(c);
} }
@ -1363,6 +1363,7 @@ e_comp_new(void)
CRI("CANNOT REPLACE EXISTING COMPOSITOR"); CRI("CANNOT REPLACE EXISTING COMPOSITOR");
e_comp = E_OBJECT_ALLOC(E_Comp, E_COMP_TYPE, _e_comp_free); e_comp = E_OBJECT_ALLOC(E_Comp, E_COMP_TYPE, _e_comp_free);
if (!e_comp) return NULL; 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); e_comp->render_animator = ecore_animator_add(_e_comp_cb_animator, NULL);
ecore_animator_freeze(e_comp->render_animator); 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); Eina_Bool (*key_up)(Ecore_Event_Key *ev);
} E_Comp_Screen_Iface; } 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 struct _E_Comp
{ {
E_Object e_obj_inherit; E_Object e_obj_inherit;
@ -85,9 +95,9 @@ struct _E_Comp
Ecore_Window root; //x11 root window Ecore_Window root; //x11 root window
Ecore_Evas *ee; //canvas Ecore_Evas *ee; //canvas
Ecore_Window ee_win; //canvas window Ecore_Window ee_win; //canvas window
E_Comp_Canvas *canvas;
Evas_Object *elm; //elm win base Evas_Object *elm; //elm win base
Evas *evas; //canvas Evas *evas; //canvas
Evas_Object *bg_blank_object; //black blocker rect to cover background artifacts
Eina_List *zones; //list of E_Zones Eina_List *zones; //list of E_Zones
E_Pointer *pointer; E_Pointer *pointer;
Eina_List *clients; //list of all E_Clients 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_Animator *render_animator; //animator for fixed time rendering
Ecore_Job *shape_job; //job to update x11 input shapes Ecore_Job *shape_job; //job to update x11 input shapes
Ecore_Job *update_job; //job to trigger render updates 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_delay_timer; //delay before activating nocomp in x11
Ecore_Timer *nocomp_override_timer; //delay before overriding nocomp in x11 Ecore_Timer *nocomp_override_timer; //delay before overriding nocomp in x11
int animating; //number of animating comp objects 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) if (e_first_frame)
evas_event_callback_add(e_comp->evas, EVAS_CALLBACK_RENDER_POST, _e_comp_canvas_cb_first_frame, NULL); 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); 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_layer_set(o, E_LAYER_BOTTOM);
evas_object_move(o, 0, 0); evas_object_move(o, 0, 0);
evas_object_resize(o, e_comp->w, e_comp->h); evas_object_resize(o, e_comp->w, e_comp->h);
evas_object_color_set(o, 0, 0, 0, 255); 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_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_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); 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); evas_event_freeze(e_comp->evas);
edje_freeze(); edje_freeze();
E_FREE_FUNC(e_comp->fps_fg, evas_object_del); E_FREE_FUNC(e_comp->canvas->fps_fg, evas_object_del);
E_FREE_FUNC(e_comp->fps_bg, 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->autoclose.rect, evas_object_del);
E_FREE_FUNC(e_comp->shape_job, ecore_job_del); E_FREE_FUNC(e_comp->shape_job, ecore_job_del);
E_FREE_FUNC(e_comp->pointer, e_object_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_pointer_window_add(e_comp->pointer, e_comp->root);
_e_comp_x_manage_windows(); _e_comp_x_manage_windows();
return !!e_comp->bg_blank_object; return !!e_comp->canvas->bg_blank_object;
} }
static Eina_Bool static Eina_Bool