e_comp_wl: use transformed position when checking inside constraint region 83/312783/1
authorduna.oh <duna.oh@samsung.com>
Wed, 12 Jun 2024 05:51:11 +0000 (14:51 +0900)
committerduna.oh <duna.oh@samsung.com>
Fri, 14 Jun 2024 06:35:12 +0000 (15:35 +0900)
Change-Id: I3eb33cf13e0c55d16e7b6f06474c07629777d175

src/bin/e_comp_wl_input.c

index 9c267076f36c8398c2617241a9c51ae5734faa52..8443cb15ba6e2866677a65a81ee8f2e14852162a 100644 (file)
@@ -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))