From b113f555e0ea0b0261ad870fca35d427a415c20e Mon Sep 17 00:00:00 2001 From: ChunEon Park Date: Sun, 8 Dec 2013 02:40:35 +0900 Subject: [PATCH] evas/render - make sure render pre in proxy rendering. if the some of children are the mapped object in source object tree as well as the the mappped object is invisible, then they wont be render_pre() called. this make sure those render_pre() in proxy rendering. --- src/lib/evas/canvas/evas_render.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index d33cd42421..a60026e7ff 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -312,6 +312,22 @@ _evas_proxy_redraw_set(Evas_Public_Data *e, Evas_Object_Protected_Data *obj, } } +static void +_evas_proxy_render_pre(Evas_Object_Protected_Data *obj) +{ + Evas_Object_Protected_Data *obj2; + + /* render_pre() won't be called if the children were the invisible + mapped object. So here make sure render_pre() for the children. */ + obj->func->render_pre(obj->object, obj, obj->private_data); + + EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(obj->object), + obj2) + { + if (obj2->changed) _evas_proxy_render_pre(obj2); + } +} + static void _evas_render_phase1_direct(Evas_Public_Data *e, Eina_Array *active_objects, @@ -354,9 +370,13 @@ _evas_render_phase1_direct(Evas_Public_Data *e, if (obj->changed) { evas_object_clip_recalc(obj); - obj->func->render_pre(eo_obj, obj, obj->private_data); if (obj->proxy->redraw) - _evas_render_prev_cur_clip_cache_add(e, obj); + { + _evas_proxy_render_pre(obj); + _evas_render_prev_cur_clip_cache_add(e, obj); + } + else obj->func->render_pre(eo_obj, obj, obj->private_data); + if (obj->proxy->proxies) { if (obj->smart.smart && evas_object_smart_changed_get(eo_obj))