diff --git a/legacy/evas/src/lib/canvas/evas_map.c b/legacy/evas/src/lib/canvas/evas_map.c index 5fe61aa1f8..5dcb7604dd 100644 --- a/legacy/evas/src/lib/canvas/evas_map.c +++ b/legacy/evas/src/lib/canvas/evas_map.c @@ -374,9 +374,11 @@ evas_object_map_enable_set(Evas_Object *obj, Eina_Bool enabled) MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); return; MAGIC_CHECK_END(); + Eina_Bool pchange = EINA_FALSE; enabled = !!enabled; if (obj->cur.usemap == enabled) return; + pchange = obj->changed; obj->cur.usemap = enabled; if (enabled) { @@ -405,6 +407,8 @@ evas_object_map_enable_set(Evas_Object *obj, Eina_Bool enabled) /* This is a bit heavy handed, but it fixes the case of same geometry, but * changed colour or UV settings. */ evas_object_change(obj); + if (!obj->changed_pchange) obj->changed_pchange = pchange; + obj->changed_map = EINA_TRUE; } EAPI Eina_Bool diff --git a/legacy/evas/src/lib/canvas/evas_render.c b/legacy/evas/src/lib/canvas/evas_render.c index c23cdee1f2..32ce988bcf 100644 --- a/legacy/evas/src/lib/canvas/evas_render.c +++ b/legacy/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 @@ -1640,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)) @@ -1651,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) diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index 2e9eb79cb6..bf0cfc55a6 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -615,6 +615,8 @@ struct _Evas_Object Eina_Bool changed_move : 1; Eina_Bool changed_move_only : 1; Eina_Bool changed_nomove : 1; + Eina_Bool changed_map : 1; + Eina_Bool changed_pchange : 1; Eina_Bool del_ref : 1; Eina_Bool is_frame : 1;