From a76e751eb471359ae3693d5123182d7d6a397be4 Mon Sep 17 00:00:00 2001 From: ChunEon Park Date: Mon, 6 Jan 2014 13:54:58 +0900 Subject: [PATCH] evas - fixed side effect caused by f4d24e962dba33bef8f990ce3359c06eed8771d0 since the map_changed is reset right after the map is updated, it could not decide to redraw the map surface properly. now map_update() returns the value to redraw the map surface properly. --- src/lib/evas/canvas/evas_map.c | 14 ++++++++++---- src/lib/evas/canvas/evas_render.c | 3 ++- src/lib/evas/include/evas_private.h | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/lib/evas/canvas/evas_map.c b/src/lib/evas/canvas/evas_map.c index f10cde077b..6ef034a37e 100644 --- a/src/lib/evas/canvas/evas_map.c +++ b/src/lib/evas/canvas/evas_map.c @@ -1217,7 +1217,11 @@ evas_map_util_clockwise_get(Evas_Map *m) return EINA_FALSE; } -void + +/****************************************************************************/ +/* If the return value is true, the map surface should be redrawn. */ +/****************************************************************************/ +Eina_Bool evas_object_map_update(Evas_Object *eo_obj, int x, int y, int imagew, int imageh, @@ -1227,7 +1231,7 @@ evas_object_map_update(Evas_Object *eo_obj, const Evas_Map_Point *p, *p_end; RGBA_Map_Point *pts, *pt; - if (!obj) return; + if (!obj) return EINA_FALSE; if (obj->map->spans) { if (obj->map->spans->x != x || obj->map->spans->y != y || @@ -1240,7 +1244,7 @@ evas_object_map_update(Evas_Object *eo_obj, obj->changed_map = EINA_TRUE; } - if (!obj->changed_map) return; + if (!obj->changed_map) return EINA_FALSE; if (obj->map->cur.map && obj->map->spans && obj->map->cur.map->count != obj->map->spans->count) { @@ -1264,7 +1268,7 @@ evas_object_map_update(Evas_Object *eo_obj, EINA_COW_WRITE_END(evas_object_map_cow, obj->map, map_write); } - if (!obj->map->spans) return; + if (!obj->map->spans) return EINA_FALSE; EINA_COW_WRITE_BEGIN(evas_object_map_cow, obj->map, Evas_Object_Map_Data, map_write) { @@ -1319,4 +1323,6 @@ evas_object_map_update(Evas_Object *eo_obj, // Request engine to update it's point obj->changed_map = EINA_FALSE; + + return obj->changed_pchange; } diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index a6b576861d..2c3c336b86 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -1227,7 +1227,8 @@ evas_render_mapped(Evas_Public_Data *e, Evas_Object *eo_obj, RD(" }\n"); return clean_them; } - evas_object_map_update(eo_obj, off_x, off_y, sw, sh, sw, sh); + + changed = evas_object_map_update(eo_obj, off_x, off_y, sw, sh, sw, sh); if (obj->map->surface) { diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index bf2bb3fc81..a3cc06be60 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1262,7 +1262,7 @@ void evas_render_object_recalc(Evas_Object *obj); Eina_Bool evas_map_inside_get(const Evas_Map *m, Evas_Coord x, Evas_Coord y); Eina_Bool evas_map_coords_get(const Evas_Map *m, Evas_Coord x, Evas_Coord y, Evas_Coord *mx, Evas_Coord *my, int grab); -void evas_object_map_update(Evas_Object *obj, int x, int y, int imagew, int imageh, int uvw, int uvh); +Eina_Bool evas_object_map_update(Evas_Object *obj, int x, int y, int imagew, int imageh, int uvw, int uvh); Eina_List *evas_module_engine_list(void);