evas: refactor the creation of the output info logic in libevas.

This commit is contained in:
Cedric BAIL 2017-08-25 10:48:17 -07:00
parent 46e1df839b
commit 22beae8b73
3 changed files with 23 additions and 25 deletions

View File

@ -1044,16 +1044,7 @@ evas_output_method_set(Evas *eo_e, int render_method)
Eina_List *l;
EINA_LIST_FOREACH(e->outputs, l, output)
if (!output->info)
{
output->info = calloc(1, e->engine.func->info_size);
if (!output->info) continue ;
output->info->magic = rand();
output->info_magic = output->info->magic;
if (e->engine.func->output_info_setup)
e->engine.func->output_info_setup(output->info);
}
efl_canvas_output_info_get(e, output);
}
else
{

View File

@ -19,6 +19,25 @@ _efl_canvas_output_async_block(Efl_Canvas_Output *output)
return e;
}
void
efl_canvas_output_info_get(Evas_Public_Data *e, Efl_Canvas_Output *output)
{
if (output->info) return ;
if (!e->engine.func->info_size)
{
CRI("Engine not up to date no info size provided.");
return ;
}
output->info = calloc(1, e->engine.func->info_size);
if (!output->info) return;
output->info->magic = rand();
output->info_magic = output->info->magic;
if (e->engine.func->output_info_setup)
e->engine.func->output_info_setup(output->info);
}
EAPI Efl_Canvas_Output *
efl_canvas_output_add(Evas *canvas)
{
@ -38,22 +57,8 @@ efl_canvas_output_add(Evas *canvas)
// The engine is already initialized, use it
// right away to setup the info structure
if (e->engine.func->info_size)
{
r->info = calloc(1, e->engine.func->info_size);
if (!r->info) goto on_error;
r->info->magic = rand();
r->info_magic = r->info->magic;
efl_canvas_output_info_get(e, r);
if (e->engine.func->output_info_setup)
e->engine.func->output_info_setup(r->info);
}
else
{
CRI("Engine not up to date no info size provided.");
}
on_error:
return r;
}

View File

@ -2090,6 +2090,8 @@ Eina_List *_evas_pointer_list_in_rect_get(Evas_Public_Data *edata,
Evas_Object_Protected_Data *obj_data,
int w, int h);
void efl_canvas_output_info_get(Evas_Public_Data *e, Efl_Canvas_Output *output);
extern Eina_Cow *evas_object_proxy_cow;
extern Eina_Cow *evas_object_map_cow;
extern Eina_Cow *evas_object_state_cow;