From: Junseok Kim Date: Wed, 19 Apr 2023 05:11:05 +0000 (+0900) Subject: e_client: inherit parent's zoom when transform core update X-Git-Tag: accepted/tizen/7.0/unified/20230502.051241~14 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5a0dbf014fab995a050f4b65befce3d5014845f9;p=platform%2Fupstream%2Fenlightenment.git e_client: inherit parent's zoom when transform core update Change-Id: I5f0c8415f95eadba1e335eaebe23f0eee8417c74 --- diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 26be10b04d..699d259d9f 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -4236,11 +4236,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; } } @@ -7718,6 +7727,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; @@ -7732,6 +7742,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)) @@ -7792,6 +7803,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 @@ -7803,6 +7820,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 69f5fa4d80..ea8b233066 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 fd9f46a8b5..e9839bde9f 100644 --- a/src/bin/e_desk.c +++ b/src/bin/e_desk.c @@ -1802,27 +1802,6 @@ _e_desk_object_zoom(Evas_Object *obj, double zoomx, double zoomy, Evas_Coord cx, e_map_free(map); } -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) { @@ -1848,6 +1827,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) @@ -1878,8 +1859,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; @@ -1888,15 +1867,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)) {