From af3537fd1fbf2d3b4a212689d5818450457f358d Mon Sep 17 00:00:00 2001 From: Junseok Kim Date: Wed, 19 Apr 2023 14:11:05 +0900 Subject: [PATCH] e_client: inherit parent's zoom when transform core update Change-Id: I5f0c8415f95eadba1e335eaebe23f0eee8417c74 --- src/bin/e_client.c | 18 ++++++++++++++++++ src/bin/e_client.h | 1 + src/bin/e_desk.c | 35 +++-------------------------------- 3 files changed, 22 insertions(+), 32 deletions(-) diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 949ab9d..6a6fddb 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -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) diff --git a/src/bin/e_client.h b/src/bin/e_client.h index b107840..7ac5598 100644 --- a/src/bin/e_client.h +++ b/src/bin/e_client.h @@ -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; diff --git a/src/bin/e_desk.c b/src/bin/e_desk.c index 910f807..160dffb 100644 --- a/src/bin/e_desk.c +++ b/src/bin/e_desk.c @@ -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)) { -- 2.7.4