forked from enlightenment/efl
evas_render: Refactor plane code
It's just tidier this way. Signed-off-by: Derek Foreman <derek.foreman.samsung@gmail.com> Reviewed-by: Cedric BAIL <cedric.bail@free.fr> Differential Revision: https://phab.enlightenment.org/D7193
This commit is contained in:
parent
ac065749a6
commit
9362bc9bb2
|
@ -3136,6 +3136,52 @@ _evas_overlay_output_find(Efl_Canvas_Output *output,
|
||||||
return EVAS_3STATE_INSIDE;
|
return EVAS_3STATE_INSIDE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_evas_planes(Evas_Public_Data *evas)
|
||||||
|
{
|
||||||
|
Evas_Active_Entry *ao;
|
||||||
|
|
||||||
|
/* check if individual image objects can be dropped into hardware planes */
|
||||||
|
if (ENFN->image_plane_assign)
|
||||||
|
EINA_INARRAY_FOREACH(&evas->active_objects, ao)
|
||||||
|
{
|
||||||
|
Evas_Object_Protected_Data *obj2;
|
||||||
|
Evas_Object *eo_obj2;
|
||||||
|
Efl_Canvas_Output *output;
|
||||||
|
Evas_3State state;
|
||||||
|
Eina_List *lo;
|
||||||
|
|
||||||
|
obj2 = ao->obj;
|
||||||
|
eo_obj2 = obj2->object;
|
||||||
|
|
||||||
|
if (!efl_isa(eo_obj2, EFL_CANVAS_IMAGE_INTERNAL_CLASS)) continue;
|
||||||
|
|
||||||
|
/* Find the output the object was in */
|
||||||
|
EINA_LIST_FOREACH(evas->outputs, lo, output)
|
||||||
|
{
|
||||||
|
if (!output->output) continue ;
|
||||||
|
if (!eina_list_data_find(output->planes, obj2)) continue;
|
||||||
|
_evas_object_image_plane_release(eo_obj2, obj2, output);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (evas_object_is_visible(eo_obj2, obj2))
|
||||||
|
EINA_LIST_FOREACH(evas->outputs, lo, output)
|
||||||
|
{
|
||||||
|
/* A video object can only be in one output at a time, check that first */
|
||||||
|
state = _evas_overlay_output_find(output, obj2);
|
||||||
|
if (state == EVAS_3STATE_OUTSIDE) continue;
|
||||||
|
|
||||||
|
if (!_evas_render_can_use_overlay(evas, eo_obj2, output))
|
||||||
|
{
|
||||||
|
/* This may free up things temporarily allocated by
|
||||||
|
* _can_use_overlay() testing in the engine */
|
||||||
|
_evas_object_image_plane_release(eo_obj2, obj2, output);
|
||||||
|
} else break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
evas_render_updates_internal(Evas *eo_e,
|
evas_render_updates_internal(Evas *eo_e,
|
||||||
unsigned char make_updates,
|
unsigned char make_updates,
|
||||||
|
@ -3155,7 +3201,6 @@ evas_render_updates_internal(Evas *eo_e,
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
Phase1_Context p1ctx;
|
Phase1_Context p1ctx;
|
||||||
int redraw_all = 0;
|
int redraw_all = 0;
|
||||||
Evas_Active_Entry *ao;
|
|
||||||
Evas_Render_Mode render_mode = !do_async ?
|
Evas_Render_Mode render_mode = !do_async ?
|
||||||
EVAS_RENDER_MODE_SYNC :
|
EVAS_RENDER_MODE_SYNC :
|
||||||
EVAS_RENDER_MODE_ASYNC_INIT;
|
EVAS_RENDER_MODE_ASYNC_INIT;
|
||||||
|
@ -3368,44 +3413,7 @@ evas_render_updates_internal(Evas *eo_e,
|
||||||
else
|
else
|
||||||
_evas_object_image_video_overlay_hide(eo_obj);
|
_evas_object_image_video_overlay_hide(eo_obj);
|
||||||
}
|
}
|
||||||
|
_evas_planes(e);
|
||||||
/* check if individual image objects can be dropped into hardware planes */
|
|
||||||
if (ENFN->image_plane_assign)
|
|
||||||
EINA_INARRAY_FOREACH(&evas->active_objects, ao)
|
|
||||||
{
|
|
||||||
Evas_Object_Protected_Data *obj2;
|
|
||||||
Evas_Object *eo_obj2;
|
|
||||||
Efl_Canvas_Output *output;
|
|
||||||
Evas_3State state;
|
|
||||||
Eina_List *lo;
|
|
||||||
|
|
||||||
obj2 = ao->obj;
|
|
||||||
eo_obj2 = obj2->object;
|
|
||||||
|
|
||||||
if (!efl_isa(eo_obj2, EFL_CANVAS_IMAGE_INTERNAL_CLASS)) continue;
|
|
||||||
|
|
||||||
if (evas_object_image_video_surface_get(eo_obj2)) continue;
|
|
||||||
|
|
||||||
/* Find the output the object was in */
|
|
||||||
EINA_LIST_FOREACH(e->outputs, lo, output)
|
|
||||||
{
|
|
||||||
if (!output->output) continue ;
|
|
||||||
if (!eina_list_data_find(output->planes, obj2)) continue ;
|
|
||||||
_evas_object_image_plane_release(eo_obj2, obj2, output);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* A video object can only be in one output at a time, check that first */
|
|
||||||
state = _evas_overlay_output_find(out, obj2);
|
|
||||||
if (state == EVAS_3STATE_OUTSIDE) continue ;
|
|
||||||
|
|
||||||
if (!_evas_render_can_use_overlay(e, eo_obj2, out))
|
|
||||||
{
|
|
||||||
/* This may free up things temporarily allocated by
|
|
||||||
* _can_use_overlay() testing in the engine */
|
|
||||||
_evas_object_image_plane_release(eo_obj2, obj2, out);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
eina_evlog("-render_phase7", eo_e, 0.0, NULL);
|
eina_evlog("-render_phase7", eo_e, 0.0, NULL);
|
||||||
|
|
||||||
/* phase 8. go thru each update rect and render objects in it*/
|
/* phase 8. go thru each update rect and render objects in it*/
|
||||||
|
|
Loading…
Reference in New Issue