e_client: inherit parent's zoom when transform core update 71/291671/1
authorJunseok Kim <juns.kim@samsung.com>
Wed, 19 Apr 2023 05:11:05 +0000 (14:11 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 20 Apr 2023 06:21:28 +0000 (15:21 +0900)
Change-Id: I5f0c8415f95eadba1e335eaebe23f0eee8417c74

src/bin/e_client.c
src/bin/e_client.h
src/bin/e_desk.c

index 949ab9d..6a6fddb 100644 (file)
@@ -4252,11 +4252,20 @@ _e_client_transform_core_check_change(E_Client *ec)
                   check = EINA_TRUE;
                   ec->transform_core.parent.matrix = parent->transform_core.result.matrix;
                }
+             if (memcmp(&ec->transform_core.parent.zoom, &parent->transform_core.result.transform.zoom, sizeof(E_Util_Transform_Zoom)) != 0)
+               {
+                  check = EINA_TRUE;
+                  ec->transform_core.parent.zoom = parent->transform_core.result.transform.zoom;
+               }
           }
         else if (ec->transform_core.parent.enable)
           {
              ec->transform_core.parent.enable = EINA_FALSE;
              e_util_transform_matrix_load_identity(&ec->transform_core.parent.matrix);
+             ec->transform_core.parent.zoom.zoom_x = 1.0;
+             ec->transform_core.parent.zoom.zoom_y = 1.0;
+             ec->transform_core.parent.zoom.cx = 0;
+             ec->transform_core.parent.zoom.cy = 0;
              check = EINA_TRUE;
           }
      }
@@ -7747,6 +7756,7 @@ e_client_transform_core_update(E_Client *ec)
      {
         E_Util_Transform_Rect source_rect;
         E_Util_Transform_Matrix matrix, boundary_matrix;
+        E_Util_Transform_Zoom zoom;
         Eina_List *l;
         Eina_Bool background;
         E_Util_Transform *temp_trans;
@@ -7761,6 +7771,7 @@ e_client_transform_core_update(E_Client *ec)
           {
              e_util_transform_merge(&ec->transform_core.result.transform, temp_trans);
           }
+        zoom = ec->transform_core.result.transform.zoom;
 
         // 2.5 check viewport
         if (e_util_transform_viewport_flag_get(&ec->transform_core.result.transform))
@@ -7821,6 +7832,12 @@ e_client_transform_core_update(E_Client *ec)
                                                        &matrix);
              boundary_matrix = e_util_transform_matrix_multiply(&ec->transform_core.parent.matrix,
                                                                 &boundary_matrix);
+
+             ec->transform_core.result.transform.use_zoom = EINA_TRUE;
+             zoom.zoom_x *= ec->transform_core.parent.zoom.zoom_x;
+             zoom.zoom_y *= ec->transform_core.parent.zoom.zoom_y;
+             zoom.cx += ec->transform_core.parent.zoom.cx;
+             zoom.cy += ec->transform_core.parent.zoom.cy;
           }
 
         // 4. apply matrix to vertices
@@ -7832,6 +7849,7 @@ e_client_transform_core_update(E_Client *ec)
                                                                                           &ec->transform_core.result.vertices);
         ec->transform_core.result.boundary.vertices = e_util_transform_matrix_multiply_rect_vertex(&boundary_matrix,
                                                                                                    &ec->transform_core.result.boundary.vertices);
+        ec->transform_core.result.transform.zoom = zoom;
 
         // 5. apply vertices
         if (ec->transform_core.result.transform.use_zoom)
index b107840..7ac5598 100644 (file)
@@ -945,6 +945,7 @@ struct E_Client
       {
          Eina_Bool               enable;
          E_Util_Transform_Matrix matrix;
+         E_Util_Transform_Zoom   zoom;
       } parent;
 
       Eina_Bool direct_render;
index 910f807..160dffb 100644 (file)
@@ -1804,27 +1804,6 @@ _e_desk_object_zoom(Evas_Object *obj, double zoomx, double zoomy, Evas_Coord cx,
 }
 
 static void
-_e_desk_client_subsurface_zoom(E_Client *ec, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy)
-{
-   E_Comp_Client_Data *cdata;
-   E_Client *subc;
-   Eina_List *l;
-
-   cdata = e_client_cdata_get(ec);
-   if (!cdata) return;
-
-   EINA_LIST_FOREACH(cdata->sub.list, l, subc)
-     {
-        _e_desk_client_zoom(subc, zoomx, zoomy, cx, cy);
-     }
-
-   EINA_LIST_FOREACH(cdata->sub.below_list, l, subc)
-     {
-        _e_desk_client_zoom(subc, zoomx, zoomy, cx, cy);
-     }
-}
-
-static void
 _e_desk_client_subsurf_create(void *data, E_Client *subc)
 {
    E_Client *ec, *parent;
@@ -1849,6 +1828,8 @@ _e_desk_client_subsurf_create(void *data, E_Client *subc)
 static void
 _e_desk_client_deskzoom_set(E_Client *ec, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy)
 {
+   if (e_comp_wl_subsurface_check(ec)) return;
+
    if ((zoomx == 1.0) && (zoomy == 1.0))
      {
         if (ec->desk_zoom.transform)
@@ -1879,8 +1860,6 @@ _e_desk_client_deskzoom_set(E_Client *ec, double zoomx, double zoomy, Evas_Coord
 static void
 _e_desk_client_zoom(E_Client *ec, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy)
 {
-   Eina_Bool transformed;
-
    if (e_object_is_del(E_OBJECT(ec))) return;
    if (ec->is_cursor) return;
 
@@ -1889,15 +1868,7 @@ _e_desk_client_zoom(E_Client *ec, double zoomx, double zoomy, Evas_Coord cx, Eva
    else
      e_client_desk_zoom_enable_set(ec, EINA_TRUE);
 
-   transformed = e_client_transform_core_enable_get(ec);
-
-   if (transformed)
-     _e_desk_client_deskzoom_set(ec, zoomx, zoomy, cx, cy);
-   else
-     {
-        _e_desk_object_zoom(ec->frame, zoomx, zoomy, cx, cy);
-        _e_desk_client_subsurface_zoom(ec, zoomx, zoomy, cx, cy);
-     }
+   _e_desk_client_deskzoom_set(ec, zoomx, zoomy, cx, cy);
 
    if (evas_object_visible_get(ec->frame))
      {