fix proxy sourcing of smart obj that updates.

SVN revision: 59536
This commit is contained in:
Carsten Haitzler 2011-05-19 13:01:44 +00:00
parent 9347b624a6
commit 88b59a9bb6
3 changed files with 37 additions and 8 deletions

View File

@ -2849,8 +2849,8 @@ evas_object_image_render_pre(Evas_Object *obj)
if ((o->cur.fill.w < 1) || (o->cur.fill.h < 1))
{
ERR("%p has invalid fill size: %dx%d. Ignored",
obj, o->cur.fill.w, o->cur.fill.h);
ERR("%p has invalid fill size: %dx%d. Ignored",
obj, o->cur.fill.w, o->cur.fill.h);
return;
}
@ -2862,13 +2862,12 @@ evas_object_image_render_pre(Evas_Object *obj)
obj->cur.clipper->func->render_pre(obj->cur.clipper);
}
/* Proxy: Do it early */
if (o->cur.source && o->cur.source->proxy.redraw)
if (o->cur.source &&
(o->cur.source->proxy.redraw || o->cur.source->changed))
{
/* XXX: Do I need to sort out the map here? */
obj->changed = 1;
evas_add_rect(&e->clip_changes,
obj->cur.geometry.x, obj->cur.geometry.y,
obj->cur.geometry.w, obj->cur.geometry.h);
evas_object_render_pre_prev_cur_add(&e->clip_changes, obj);
goto done;
}
/* now figure what changed and add draw rects */
@ -3161,6 +3160,7 @@ evas_object_image_is_opaque(Evas_Object *obj)
if (!o->engine_data) return 0;
o->cur.opaque = 1;
}
// FIXME: use proxy
if (o->cur.source) return 0; /* FIXME: Should go poke at the object */
if ((obj->cur.map) && (obj->cur.usemap)) return 0;
if (obj->cur.render_op == EVAS_RENDER_COPY) return 1;
@ -3194,6 +3194,7 @@ evas_object_image_was_opaque(Evas_Object *obj)
if (!o->engine_data) return 0;
o->prev.opaque = 1;
}
// FIXME: use proxy
if (o->prev.source) return 0; /* FIXME: Should go poke at the object */
if (obj->prev.usemap) return 0;
if (obj->prev.render_op == EVAS_RENDER_COPY) return 1;
@ -3222,6 +3223,7 @@ evas_object_image_is_inside(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
if ((x < 0) || (y < 0) || (x >= w) || (y >= h)) return 0;
if (!o->cur.has_alpha) return 1;
// FIXME: proxy needs to be honored
if (obj->cur.map)
{
x = obj->cur.map->mx;

View File

@ -98,6 +98,10 @@ evas_object_change(Evas_Object *obj)
{
EINA_LIST_FOREACH(obj->clip.clipees, l, obj2) evas_object_change(obj2);
}
EINA_LIST_FOREACH(obj->proxy.proxies, l, obj2)
{
evas_object_change(obj2);
}
if (obj->smart.parent) evas_object_change(obj->smart.parent);
}

View File

@ -152,6 +152,22 @@ _evas_render_phase1_direct(Evas *e,
Evas_Object *proxy;
RD(" [--- PHASE 1 DIRECT\n");
for (i = 0; i < active_objects->count; i++)
{
Evas_Object *obj;
obj = eina_array_data_get(active_objects, i);
if (obj->changed)
{
/* Flag need redraw on proxy too */
evas_object_clip_recalc(obj);
if (obj->proxy.proxies)
{
EINA_LIST_FOREACH(obj->proxy.proxies, l, proxy)
proxy->proxy.redraw = 1;
}
}
}
for (i = 0; i < render_objects->count; i++)
{
Evas_Object *obj;
@ -167,7 +183,14 @@ _evas_render_phase1_direct(Evas *e,
{
obj->proxy.redraw = 1;
EINA_LIST_FOREACH(obj->proxy.proxies, l, proxy)
proxy->func->render_pre(proxy);
{
proxy->func->render_pre(proxy);
_evas_render_prev_cur_clip_cache_add(e, proxy);
}
}
else if (obj->proxy.redraw)
{
_evas_render_prev_cur_clip_cache_add(e, obj);
}
if (obj->pre_render_done)
{