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;
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;
}
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.");
}
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))