diff --git a/legacy/evas/src/lib/canvas/evas_object_main.c b/legacy/evas/src/lib/canvas/evas_object_main.c index 0c74d31f1d..cfa62e1ccc 100644 --- a/legacy/evas/src/lib/canvas/evas_object_main.c +++ b/legacy/evas/src/lib/canvas/evas_object_main.c @@ -43,6 +43,9 @@ evas_object_change_reset(Evas_Object *obj) void evas_object_cur_prev(Evas_Object *obj) { + if (!obj->prev.valid_map && (obj->prev.map == obj->cur.map)) + obj->prev.map = NULL; + if (obj->cur.map != obj->prev.map) { if (obj->cache_map) evas_map_free(obj->cache_map); diff --git a/legacy/evas/src/lib/canvas/evas_render.c b/legacy/evas/src/lib/canvas/evas_render.c index 7c4c4c736a..f9546cfc9b 100644 --- a/legacy/evas/src/lib/canvas/evas_render.c +++ b/legacy/evas/src/lib/canvas/evas_render.c @@ -917,6 +917,11 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface, evas_object_change_reset(obj); } + /* mark the old map as invalid, so later we don't reuse it as a + * cache. */ + if (changed && obj->prev.map) + obj->prev.valid_map = EINA_FALSE; + // clear surface before re-render if ((changed) && (obj->cur.map->surface)) { @@ -988,6 +993,7 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface, obj->cur.map->surface = e->engine.func->image_dirty_region (e->engine.data.output, obj->cur.map->surface, 0, 0, obj->cur.map->surface_w, obj->cur.map->surface_h); + obj->cur.valid_map = EINA_TRUE; } e->engine.func->context_clip_unset(e->engine.data.output, context); diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index ad6785a719..fc3033f75d 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -533,6 +533,7 @@ struct _Evas_Object unsigned char r, g, b, a; } color; Eina_Bool usemap : 1; + Eina_Bool valid_map : 1; Eina_Bool visible : 1; Eina_Bool have_clipees : 1; Eina_Bool anti_alias : 1;