From 07b66ed7c1af1c67b02c2bc577ece3be7771339a Mon Sep 17 00:00:00 2001 From: "duna.oh" Date: Wed, 12 Jun 2024 14:51:11 +0900 Subject: [PATCH] e_comp_wl: use transformed position when checking inside constraint region Change-Id: I3eb33cf13e0c55d16e7b6f06474c07629777d175 --- src/bin/e_comp_wl_input.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/bin/e_comp_wl_input.c b/src/bin/e_comp_wl_input.c index 9c267076f3..8443cb15ba 100644 --- a/src/bin/e_comp_wl_input.c +++ b/src/bin/e_comp_wl_input.c @@ -676,8 +676,8 @@ _e_comp_wl_input_pointer_constraint_destroy(E_Comp_Wl_Pointer_Constraint *constr static Eina_Bool _e_comp_wl_input_is_position_inside_constraint_region(E_Comp_Wl_Pointer_Constraint *constraint, - wl_fixed_t fx, - wl_fixed_t fy) + int fx, + int fy) { pixman_region32_t *region = &constraint->region; pixman_region32_t cregion; @@ -692,15 +692,15 @@ _e_comp_wl_input_is_position_inside_constraint_region(E_Comp_Wl_Pointer_Constrai pixman_region32_intersect(&cregion, &input_region, region); Eina_Bool inside = pixman_region32_contains_point(&cregion, - wl_fixed_to_int(fx), - wl_fixed_to_int(fy), + fx, + fy, NULL); pixman_region32_fini(&cregion); pixman_region32_fini(&input_region); if (!inside) - INF("(%d, %d) is not inside of constraint region.", wl_fixed_to_int(fx), wl_fixed_to_int(fy)); + INF("(%d, %d) is not inside of constraint region.", fx, fy); return inside; } @@ -748,6 +748,8 @@ _e_comp_wl_input_pointer_constraint_enable(E_Comp_Wl_Pointer_Constraint *constra static void _e_comp_wl_input_pointer_constraints_check_enable(E_Comp_Wl_Pointer_Constraint *constraint) { + int px, py, cx, cy; + if (!constraint || !constraint->ec) { ERR("Invalid constraint or ec of it."); @@ -755,8 +757,20 @@ _e_comp_wl_input_pointer_constraints_check_enable(E_Comp_Wl_Pointer_Constraint * } E_Client *ec = constraint->ec; - wl_fixed_t cx = e_comp_wl->ptr.x - wl_fixed_from_int(ec->client.x); - wl_fixed_t cy = e_comp_wl->ptr.y - wl_fixed_from_int(ec->client.y); + px = wl_fixed_to_int(e_comp_wl->ptr.x); + py = wl_fixed_to_int(e_comp_wl->ptr.y); + + if (e_client_transform_core_enable_get(ec)) + { + int trans_x, trans_y; + e_client_transform_core_input_transform(ec, px, py, &trans_x, &trans_y); + INF("Constraint check. ptr(%d, %d) trans(%d, %d) ec(%p)", px, py, trans_x, trans_y, ec); + px = E_CLAMP(trans_x, ec->client.y, ec->client.x + ec->client.w - 1); + py = E_CLAMP(trans_y, ec->client.y, ec->client.y + ec->client.h - 1); + } + cx = px - ec->client.x; + cy = py - ec->client.y; + INF("Constraint check. ptr(%d, %d) cx/cy(%d, %d) ec(%p)", px, py, cx, cy, ec); if ((!e_comp_wl->ptr.ec) || (e_comp_wl->ptr.ec != ec) || (!ec->pointer_enter_sent)) -- 2.34.1