From c963d75dfdeec11f82e79e727062fbf89afa2c04 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Sun, 22 Apr 2012 09:19:23 +1000 Subject: Update EFL to latest beta. --- libraries/evas/src/lib/canvas/evas_render.c | 63 ++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 14 deletions(-) (limited to 'libraries/evas/src/lib/canvas/evas_render.c') diff --git a/libraries/evas/src/lib/canvas/evas_render.c b/libraries/evas/src/lib/canvas/evas_render.c index cdedaec..32ce988 100644 --- a/libraries/evas/src/lib/canvas/evas_render.c +++ b/libraries/evas/src/lib/canvas/evas_render.c @@ -612,6 +612,8 @@ pending_change(void *data, void *gdata __UNUSED__) obj->changed_move_only = 0; obj->changed_nomove = 0; obj->changed_move = 0; + obj->changed_map = 0; + obj->changed_pchange = 0; } return obj->changed ? EINA_TRUE : EINA_FALSE; } @@ -984,6 +986,8 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface, o2->changed_move_only = 0; o2->changed_nomove = 0; o2->changed_move = 0; + o2->changed_map = 0; + o2->changed_pchange = 0; continue; } if (o2->changed) @@ -994,6 +998,8 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface, o2->changed_move_only = 0; o2->changed_nomove = 0; o2->changed_move = 0; + o2->changed_map = 0; + o2->changed_pchange = 0; break; } } @@ -1002,16 +1008,21 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface, obj->changed_move_only = 0; obj->changed_nomove = 0; obj->changed_move = 0; + obj->changed_map = 0; + obj->changed_pchange = 0; } else { if (obj->changed) { - changed = 1; + if ((obj->changed_pchange) && (obj->changed_map)) + changed = 1; obj->changed = 0; obj->changed_move_only = 0; obj->changed_nomove = 0; obj->changed_move = 0; + obj->changed_map = 0; + obj->changed_pchange = 0; } } @@ -1144,10 +1155,12 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface, e->engine.data.context, ecx, ecy, ecw, ech); if (obj->cur.cache.clip.visible) - obj->layer->evas->engine.func->image_map_draw - (e->engine.data.output, e->engine.data.context, surface, - obj->cur.map->surface, obj->cur.map->count, pts, - obj->cur.map->smooth, 0); + { + obj->layer->evas->engine.func->image_map_draw + (e->engine.data.output, e->engine.data.context, surface, + obj->cur.map->surface, obj->cur.map->count, pts, + obj->cur.map->smooth, 0); + } // FIXME: needs to cache these maps and // keep them only rendering updates // obj->layer->evas->engine.func->image_map_surface_free @@ -1500,6 +1513,12 @@ evas_render_updates_internal(Evas *e, off_x = cx - ux; off_y = cy - uy; /* build obscuring objects list (in order from bottom to top) */ + if (alpha) + { + e->engine.func->context_clip_set(e->engine.data.output, + e->engine.data.context, + ux + off_x, uy + off_y, uw, uh); + } for (i = 0; i < e->obscuring_objects.count; ++i) { obj = (Evas_Object *)eina_array_data_get @@ -1515,9 +1534,6 @@ evas_render_updates_internal(Evas *e, } if (alpha) { - e->engine.func->context_clip_set(e->engine.data.output, - e->engine.data.context, - ux + off_x, uy + off_y, uw, uh); e->engine.func->context_color_set(e->engine.data.output, e->engine.data.context, 0, 0, 0, 0); @@ -1548,7 +1564,7 @@ evas_render_updates_internal(Evas *e, (obj->cur.visible) && (!obj->delete_me) && (obj->cur.cache.clip.visible) && - // (!obj->smart.smart) && +// (!obj->smart.smart) && ((obj->cur.color.a > 0 || obj->cur.render_op != EVAS_RENDER_BLEND))) { int x, y, w, h; @@ -1579,6 +1595,9 @@ evas_render_updates_internal(Evas *e, else e->engine.func->context_mask_unset(e->engine.data.output, e->engine.data.context); + e->engine.func->context_clip_set(e->engine.data.output, + e->engine.data.context, + x, y, w, h); #if 1 /* FIXME: this can slow things down... figure out optimum... coverage */ for (j = offset; j < e->temporary_objects.count; ++j) { @@ -1589,9 +1608,6 @@ evas_render_updates_internal(Evas *e, _evas_render_cutout_add(e, obj2, off_x, off_y); } #endif - e->engine.func->context_clip_set(e->engine.data.output, - e->engine.data.context, - x, y, w, h); clean_them |= evas_render_mapped(e, obj, e->engine.data.context, surface, off_x, off_y, 0, cx, cy, cw, ch @@ -1637,6 +1653,8 @@ evas_render_updates_internal(Evas *e, obj->changed_move_only = 0; obj->changed_nomove = 0; obj->changed_move = 0; + obj->changed_map = 0; + obj->changed_pchange = 0; } else if ((obj->cur.map != obj->prev.map) || (obj->cur.usemap != obj->prev.usemap)) @@ -1648,6 +1666,8 @@ evas_render_updates_internal(Evas *e, obj->changed_move_only = 0; obj->changed_nomove = 0; obj->changed_move = 0; + obj->changed_map = 0; + obj->changed_pchange = 0; } /* moved to other pre-process phase 1 if (obj->delete_me == 2) @@ -1684,6 +1704,7 @@ evas_render_updates_internal(Evas *e, e->framespace.changed = 0; e->invalidate = 0; + // always clean... lots of mem waste! /* If their are some object to restack or some object to delete, * it's useless to keep the render object list around. */ if (clean_them) @@ -1693,6 +1714,17 @@ evas_render_updates_internal(Evas *e, eina_array_clean(&e->restack_objects); eina_array_clean(&e->delete_objects); eina_array_clean(&e->obscuring_objects); + eina_array_clean(&e->temporary_objects); + eina_array_clean(&e->clip_changes); +/* we should flush here and have a mempool system for this + eina_array_flush(&e->active_objects); + eina_array_flush(&e->render_objects); + eina_array_flush(&e->restack_objects); + eina_array_flush(&e->delete_objects); + eina_array_flush(&e->obscuring_objects); + eina_array_flush(&e->temporary_objects); + eina_array_flush(&e->clip_changes); + */ e->invalidate = 1; } @@ -1768,11 +1800,14 @@ evas_render_idle_flush(Evas *e) (e->engine.data.output)) e->engine.func->output_idle_flush(e->engine.data.output); - eina_array_flush(&e->delete_objects); eina_array_flush(&e->active_objects); - eina_array_flush(&e->restack_objects); eina_array_flush(&e->render_objects); + eina_array_flush(&e->restack_objects); + eina_array_flush(&e->delete_objects); + eina_array_flush(&e->obscuring_objects); + eina_array_flush(&e->temporary_objects); eina_array_flush(&e->clip_changes); + eina_array_flush(&e->temporary_objects); e->invalidate = 1; } -- cgit v1.1