diff --git a/src/lib/evas/canvas/evas_object_image.c b/src/lib/evas/canvas/evas_object_image.c index ebc0422185..009014b278 100644 --- a/src/lib/evas/canvas/evas_object_image.c +++ b/src/lib/evas/canvas/evas_object_image.c @@ -2815,44 +2815,6 @@ evas_object_image_render(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, v return; } - if (o->pixels->pixel_updates) - { - Eina_Rectangle *r; - Evas_Public_Data *e = obj->layer->evas; - - if ((o->cur->border.l == 0) && - (o->cur->border.r == 0) && - (o->cur->border.t == 0) && - (o->cur->border.b == 0) && - (o->cur->image.w > 0) && - (o->cur->image.h > 0) && - (!((obj->map->cur.map) && (obj->map->cur.usemap)))) - { - EINA_COW_PIXEL_WRITE_BEGIN(o, pixi_write) - { - EINA_LIST_FREE(pixi_write->pixel_updates, r) - { - e->engine.func->image_dirty_region(e->engine.data.output, - o->engine_data, r->x, r->y, r->w, r->h); - eina_rectangle_free(r); - } - } - EINA_COW_PIXEL_WRITE_END(o, pixi_write); - } - else - { - EINA_COW_PIXEL_WRITE_BEGIN(o, pixi_write) - { - EINA_LIST_FREE(pixi_write->pixel_updates, r) - eina_rectangle_free(r); - } - EINA_COW_PIXEL_WRITE_END(o, pixi_write); - - e->engine.func->image_dirty_region(e->engine.data.output, - o->engine_data, 0, 0, o->cur->image.w, o->cur->image.h); - } - } - obj->layer->evas->engine.func->context_color_set(output, context, 255, 255, 255, 255); @@ -3361,14 +3323,14 @@ evas_object_image_render_pre(Evas_Object *eo_obj, (!((obj->map->cur.map) && (obj->map->cur.usemap)))) { Eina_Rectangle *rr; - Eina_List *l; EINA_COW_PIXEL_WRITE_BEGIN(o, pixi_write) { - EINA_LIST_FOREACH(pixi_write->pixel_updates, l, rr) + EINA_LIST_FREE(pixi_write->pixel_updates, rr) { Evas_Coord idw, idh, idx, idy; int x, y, w, h; + e->engine.func->image_dirty_region(e->engine.data.output, o->engine_data, rr->x, rr->y, rr->w, rr->h); idx = evas_object_image_figure_x_fill(eo_obj, obj, o->cur->fill.x, o->cur->fill.w, &idw); idy = evas_object_image_figure_y_fill(eo_obj, obj, o->cur->fill.y, o->cur->fill.h, &idh); @@ -3413,6 +3375,16 @@ evas_object_image_render_pre(Evas_Object *eo_obj, } else { + Eina_Rectangle *r; + + EINA_COW_PIXEL_WRITE_BEGIN(o, pixi_write) + { + EINA_LIST_FREE(pixi_write->pixel_updates, r) + eina_rectangle_free(r); + } + EINA_COW_PIXEL_WRITE_END(o, pixi_write); + e->engine.func->image_dirty_region(e->engine.data.output, o->engine_data, 0, 0, o->cur->image.w, o->cur->image.h); + evas_object_render_pre_prev_cur_add(&e->clip_changes, eo_obj, obj); goto done; diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 1f9296cd50..15ef56674d 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -380,7 +380,8 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, Evas_Object *eo_obj, Eina_Array *render_objects, int restack, int *redraw_all, - Eina_Bool mapped_parent + Eina_Bool mapped_parent, + Eina_Bool src_changed #ifdef REND_DBG , int level #endif @@ -406,12 +407,12 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, Evas_Object *eo_obj, /* build active object list */ evas_object_clip_recalc(obj); - is_active = evas_object_is_active(eo_obj, obj); - obj->is_active = is_active; + if (src_changed) is_active = EINA_TRUE; + else is_active = evas_object_is_active(eo_obj, obj); RDI(level); RD(" [--- PROCESS [%p", obj); - if (obj->name) + if (obj->name) { RD(":%s", obj->name); } @@ -473,7 +474,8 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, Evas_Object *eo_obj, render_objects, obj->restack, redraw_all, - EINA_TRUE + EINA_TRUE, + src_changed #ifdef REND_DBG , level + 1 #endif @@ -511,6 +513,9 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, Evas_Object *eo_obj, RDI(level); RD(" changed + smart - render ok\n"); OBJ_ARRAY_PUSH(render_objects, obj); + + if (!is_active && obj->proxy->proxies) src_changed = EINA_TRUE; + obj->render_pre = EINA_TRUE; Evas_Object_Protected_Data *obj2; EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(eo_obj), @@ -523,7 +528,8 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, Evas_Object *eo_obj, render_objects, obj->restack, redraw_all, - mapped_parent + mapped_parent, + src_changed #ifdef REND_DBG , level + 1 #endif @@ -593,7 +599,8 @@ _evas_render_phase1_object_process(Evas_Public_Data *e, Evas_Object *eo_obj, render_objects, restack, redraw_all, - mapped_parent + mapped_parent, + src_changed #ifdef REND_DBG , level + 1 #endif @@ -674,7 +681,7 @@ _evas_render_phase1_process(Evas_Public_Data *e, { clean_them |= _evas_render_phase1_object_process (e, obj->object, active_objects, restack_objects, delete_objects, - render_objects, 0, redraw_all, EINA_FALSE + render_objects, 0, redraw_all, EINA_FALSE, EINA_FALSE #ifdef REND_DBG , 1 #endif