e_desk: check whether Evas_Map is changed or not before applying zoom 27/253927/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Fri, 19 Feb 2021 09:30:15 +0000 (18:30 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Fri, 19 Feb 2021 10:14:22 +0000 (19:14 +0900)
Change-Id: I86c0ddc405c37bf0cb1fe993a49f8b63db633261

src/bin/e_desk.c

index cd6c78fd43803fed47f94b3e84b58593705ec19d..6d9733ecaf65894603bd4bcea2f93fce71b9fd7e 100644 (file)
@@ -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);