From: Doyoun Kang Date: Fri, 19 Feb 2021 09:30:15 +0000 (+0900) Subject: e_desk: check whether Evas_Map is changed or not before applying zoom X-Git-Tag: accepted/tizen/6.0/unified/20210308.210653~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1ddfe841749ef0a73d4b6a036a281d2ba3b7ab8a;p=platform%2Fupstream%2Fenlightenment.git e_desk: check whether Evas_Map is changed or not before applying zoom Change-Id: I86c0ddc405c37bf0cb1fe993a49f8b63db633261 --- diff --git a/src/bin/e_desk.c b/src/bin/e_desk.c index cd6c78fd43..6d9733ecaf 100644 --- a/src/bin/e_desk.c +++ b/src/bin/e_desk.c @@ -1678,10 +1678,50 @@ _e_desk_util_comp_hwc_disable_set(Eina_Bool disable) e_comp_hwc_deactive_set(disable); } +static Eina_Bool +_e_desk_check_map_changed(const Evas_Map *old_map, Evas_Map *new_map) +{ + int i; + double old_u, old_v; + double new_u, new_v; + int old_x, old_y, old_z; + int new_x, new_y, new_z; + Eina_Bool is_changed = EINA_FALSE; + + if (!old_map) + return EINA_TRUE; + + for (i = 0; i < 4; i++) + { + old_u = old_v = new_u = new_v = 0; + old_x = old_y = old_z = new_x = new_y = new_z = 0; + + evas_map_point_image_uv_get(old_map, i, &old_u, &old_v); + evas_map_point_image_uv_get(new_map, i, &new_u, &new_v); + if ((old_u != new_u) || (old_v != new_v)) + { + is_changed = EINA_TRUE; + break; + } + + evas_map_point_coord_get(old_map, i, &old_x, &old_y, &old_z); + evas_map_point_coord_get(new_map, i, &new_x, &new_y, &new_z); + if ((old_x != new_x) || (old_y != new_y) || (old_z != new_z)) + { + is_changed = EINA_TRUE; + break; + } + } + + return is_changed; +} + static void _e_desk_object_zoom(Evas_Object *obj, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy) { Evas_Map *map; + const Evas_Map *old_map; + Eina_Bool is_map_changed = EINA_FALSE; Eina_Bool enabled; if (!obj) return; @@ -1690,7 +1730,12 @@ _e_desk_object_zoom(Evas_Object *obj, double zoomx, double zoomy, Evas_Coord cx, evas_map_util_object_move_sync_set(map, EINA_TRUE); evas_map_util_points_populate_from_object(map, obj); evas_map_util_zoom(map, zoomx, zoomy, cx, cy); - evas_object_map_set(obj, map); + + old_map = evas_object_map_get(obj); + is_map_changed = _e_desk_check_map_changed(old_map, map); + if (is_map_changed) + evas_object_map_set(obj, map); + enabled = ((zoomx != 1.0) || (zoomy != 1.0)); evas_object_map_enable_set(obj, enabled); evas_map_free(map);