Eina_Bool proxy_src_clip : 1;
Eina_Bool written : 1;
Eina_Bool direct_render : 1;
+ struct
+ {
+ Eina_Bool video_move : 1;
+ Eina_Bool video_resize : 1;
+ Eina_Bool video_show : 1;
+ Eina_Bool video_hide : 1;
+ } delayed;
};
/* private methods for image objects */
{
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJ_CLASS);
Evas_Object_Image *o = eo_data_scope_get(eo_obj, MY_CLASS);
- Evas_Public_Data *e = obj->layer->evas;
if (obj->cur->cache.clip.x != obj->prev->cache.clip.x ||
obj->cur->cache.clip.y != obj->prev->cache.clip.y ||
o->created || !o->video_visible)
- o->pixels->video.move(o->pixels->video.data, eo_obj, &o->pixels->video,
- obj->cur->cache.clip.x + e->framespace.x,
- obj->cur->cache.clip.y + e->framespace.y);
+ o->delayed.video_move = EINA_TRUE;
+
if (obj->cur->cache.clip.w != obj->prev->cache.clip.w ||
obj->cur->cache.clip.h != obj->prev->cache.clip.h ||
o->created || !o->video_visible)
- o->pixels->video.resize(o->pixels->video.data, eo_obj, &o->pixels->video, obj->cur->cache.clip.w, obj->cur->cache.clip.h);
+ o->delayed.video_resize = EINA_TRUE;
+
if (!o->video_visible || o->created)
{
- o->pixels->video.show(o->pixels->video.data, eo_obj, &o->pixels->video);
+ o->delayed.video_show = EINA_TRUE;
+ o->delayed.video_hide = EINA_FALSE;
}
else
{
Evas_Object_Image *o = eo_data_scope_get(eo_obj, MY_CLASS);
if (o->video_visible || o->created)
- o->pixels->video.hide(o->pixels->video.data, eo_obj, &o->pixels->video);
+ {
+ o->delayed.video_hide = EINA_TRUE;
+ o->delayed.video_show = EINA_FALSE;
+ }
if (evas_object_is_visible(eo_obj, obj))
o->pixels->video.update_pixels(o->pixels->video.data, eo_obj, &o->pixels->video);
o->video_visible = EINA_FALSE;
o->created = EINA_FALSE;
}
+void
+_evas_object_image_video_overlay_do(Evas_Object *eo_obj)
+{
+ Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJ_CLASS);
+ Evas_Object_Image *o = eo_data_scope_get(eo_obj, MY_CLASS);
+ Evas_Public_Data *e = obj->layer->evas;
+
+ if (o->delayed.video_move)
+ o->pixels->video.move(o->pixels->video.data, eo_obj, &o->pixels->video,
+ obj->cur->cache.clip.x + e->framespace.x,
+ obj->cur->cache.clip.y + e->framespace.y);
+
+ if (o->delayed.video_resize)
+ o->pixels->video.resize(o->pixels->video.data, eo_obj,
+ &o->pixels->video,
+ obj->cur->cache.clip.w,
+ obj->cur->cache.clip.h);
+
+ if (o->delayed.video_show)
+ o->pixels->video.show(o->pixels->video.data, eo_obj, &o->pixels->video);
+ else if (o->delayed.video_hide)
+ o->pixels->video.hide(o->pixels->video.data, eo_obj, &o->pixels->video);
+
+ o->delayed.video_move = EINA_FALSE;
+ o->delayed.video_resize = EINA_FALSE;
+ o->delayed.video_show = EINA_FALSE;
+ o->delayed.video_hide = EINA_FALSE;
+}
+
static void
_class_constructor(Eo_Class *klass)
{
}
else if (haveup)
{
+ EINA_LIST_FOREACH(e->video_objects, ll, eo_obj)
+ {
+ _evas_object_image_video_overlay_do(eo_obj);
+ }
evas_event_callback_call(eo_e, EVAS_CALLBACK_RENDER_FLUSH_PRE, NULL);
e->engine.func->output_flush(e->engine.data.output,
EVAS_RENDER_MODE_SYNC);
/* flush redraws */
if (haveup)
{
+ Eina_List *ll;
+ Evas_Object *eo_obj;
+ EINA_LIST_FOREACH(e->video_objects, ll, eo_obj)
+ {
+ _evas_object_image_video_overlay_do(eo_obj);
+ }
evas_event_callback_call(eo_e, EVAS_CALLBACK_RENDER_FLUSH_PRE, NULL);
e->engine.func->output_flush(e->engine.data.output,
EVAS_RENDER_MODE_ASYNC_END);