evas/proxy - redraw proxy source properly.

This patch fixes the proxy drawing problem that source won't be updated in some case

If the image object is the one member of the smart that has the proxy,
the proxy(image part) won't be redrawed properly unless evas tries to draw the image object.
This can be heppend if the image object is inactive cause of some reasone(ie. outside of the screen)
So, the proxy object never can be never updated even the image part is changed.
Now let try to be active if the parent is both active and source object.

and revert previous change with regarded to a739716cee,
that's no more required now.

@fix
This commit is contained in:
ChunEon Park 2014-03-27 15:47:00 +09:00
parent 42c7f55c2f
commit 25391697e6
2 changed files with 27 additions and 48 deletions

View File

@ -3788,44 +3788,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);
@ -4325,14 +4287,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);
@ -4377,6 +4339,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;

View File

@ -420,7 +420,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
@ -446,12 +447,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);
}
@ -513,7 +514,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
@ -551,6 +553,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),
@ -563,7 +568,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
@ -633,7 +639,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
@ -714,7 +721,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