From: ChunEon Park Date: Thu, 31 Oct 2013 08:01:41 +0000 (+0900) Subject: evas/proxy - decide the proxy updation in the main render process. X-Git-Tag: v1.8.0-alpha1~57 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=69077d19d71983e1c9fcd47607ebc1508207cf87;p=platform%2Fupstream%2Fefl.git evas/proxy - decide the proxy updation in the main render process. because the proxy updation is decided in the proxy rendering time, it couldn't be updated at the time if the source is changed before. --- diff --git a/src/lib/evas/canvas/evas_object_image.c b/src/lib/evas/canvas/evas_object_image.c index 4e5cd3d..af42860 100644 --- a/src/lib/evas/canvas/evas_object_image.c +++ b/src/lib/evas/canvas/evas_object_image.c @@ -3311,7 +3311,6 @@ _proxy_subrender(Evas *eo_e, Evas_Object *eo_source, Evas_Object *eo_proxy, Evas Evas_Object_Protected_Data *source; void *ctx; int w, h; - Eina_Bool src_redraw = EINA_FALSE; if (!eo_source) return; source = eo_data_scope_get(eo_source, EVAS_OBJ_CLASS); @@ -3341,49 +3340,42 @@ _proxy_subrender(Evas *eo_e, Evas_Object *eo_source, Evas_Object *eo_proxy, Evas if (!proxy_write->surface) goto end; proxy_write->w = w; proxy_write->h = h; - src_redraw = EINA_TRUE; } - if (!src_redraw) - src_redraw = evas_object_smart_changed_get(eo_source); - - if (src_redraw) - { - ctx = e->engine.func->context_new(e->engine.data.output); - e->engine.func->context_color_set(e->engine.data.output, ctx, 0, 0, - 0, 0); - e->engine.func->context_render_op_set(e->engine.data.output, ctx, - EVAS_RENDER_COPY); - e->engine.func->rectangle_draw(e->engine.data.output, ctx, - proxy_write->surface, 0, 0, w, h, - do_async); - e->engine.func->context_free(e->engine.data.output, ctx); - - ctx = e->engine.func->context_new(e->engine.data.output); - - Eina_Bool source_clip; - eo_do(eo_proxy, evas_obj_image_source_clip_get(&source_clip)); - - Evas_Proxy_Render_Data proxy_render_data = { - .eo_proxy = eo_proxy, - .proxy_obj = proxy_obj, - .eo_src = eo_source, - .source_clip = source_clip - }; - evas_render_mapped(e, eo_source, source, ctx, proxy_write->surface, - -source->cur->geometry.x, - -source->cur->geometry.y, - 1, 0, 0, e->output.w, e->output.h, - &proxy_render_data + ctx = e->engine.func->context_new(e->engine.data.output); + e->engine.func->context_color_set(e->engine.data.output, ctx, 0, 0, + 0, 0); + e->engine.func->context_render_op_set(e->engine.data.output, ctx, + EVAS_RENDER_COPY); + e->engine.func->rectangle_draw(e->engine.data.output, ctx, + proxy_write->surface, 0, 0, w, h, + do_async); + e->engine.func->context_free(e->engine.data.output, ctx); + + ctx = e->engine.func->context_new(e->engine.data.output); + + Eina_Bool source_clip; + eo_do(eo_proxy, evas_obj_image_source_clip_get(&source_clip)); + + Evas_Proxy_Render_Data proxy_render_data = { + .eo_proxy = eo_proxy, + .proxy_obj = proxy_obj, + .eo_src = eo_source, + .source_clip = source_clip + }; + evas_render_mapped(e, eo_source, source, ctx, proxy_write->surface, + -source->cur->geometry.x, + -source->cur->geometry.y, + 1, 0, 0, e->output.w, e->output.h, + &proxy_render_data #ifdef REND_DBG - , 1 + , 1 #endif - , do_async); + , do_async); - e->engine.func->context_free(e->engine.data.output, ctx); - } + e->engine.func->context_free(e->engine.data.output, ctx); proxy_write->surface = e->engine.func->image_dirty_region - (e->engine.data.output, proxy_write->surface, 0, 0, w, h); + (e->engine.data.output, proxy_write->surface, 0, 0, w, h); /* ctx = e->engine.func->context_new(e->engine.data.output); if (eo_isa(source, EVAS_OBJ_SMART_CLASS)) diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 2ceca4d..3b14c28 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -293,25 +293,34 @@ _evas_render_phase1_direct(Evas_Public_Data *e, unsigned int i; Eina_List *l; Evas_Object *eo_proxy; + Eina_Bool changed; RD(" [--- PHASE 1 DIRECT\n"); for (i = 0; i < active_objects->count; i++) { - Evas_Object_Protected_Data *obj = eina_array_data_get(active_objects, i); + Evas_Object_Protected_Data *obj = + eina_array_data_get(active_objects, i); - if (obj->changed) + if (obj->changed) evas_object_clip_recalc(obj); + if (!obj->proxy->proxies) continue; + + if (obj->smart.smart) + changed = evas_object_smart_changed_get(obj->object); + else changed = obj->changed; + + if (changed) { /* Flag need redraw on proxy too */ - evas_object_clip_recalc(obj); EINA_LIST_FOREACH(obj->proxy->proxies, l, eo_proxy) { - Evas_Object_Protected_Data *proxy; - - proxy = eo_data_scope_get(eo_proxy, EVAS_OBJ_CLASS); - - EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, proxy->proxy, Evas_Object_Proxy_Data, proxy_write) - proxy_write->redraw = EINA_TRUE; - EINA_COW_WRITE_END(evas_object_proxy_cow, proxy->proxy, proxy_write); + Evas_Object_Protected_Data *proxy; + proxy = eo_data_scope_get(eo_proxy, EVAS_OBJ_CLASS); + + EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, proxy->proxy, + Evas_Object_Proxy_Data, proxy_write) + proxy_write->redraw = EINA_TRUE; + EINA_COW_WRITE_END(evas_object_proxy_cow, proxy->proxy, + proxy_write); } } }