e_client_transform_core_update(ec);
}
+EINTERN void
+e_comp_wl_map_inv_coord_get(E_Client *ec, int x, int y, int *mx, int *my)
+{
+ const Evas_Map *map;
+ int map_c;
+ int min_x = 0, min_y = 0, max_x = 0, max_y = 0;
+ int map_x = 0, map_y = 0;
+ double diff_w, diff_h;
+
+ EINA_SAFETY_ON_NULL_RETURN(ec);
+
+ map = evas_object_map_get(ec->frame);
+ map_c = evas_map_count_get(map);
+
+ if (!map || map_c <= 0)
+ {
+ *mx = x;
+ *my = y;
+ return;
+ }
+
+ for (int i = 0; i < map_c; i++)
+ {
+ evas_map_point_coord_get(map, i, &map_x, &map_y, NULL);
+ if (i == 0)
+ {
+ min_x = max_x = map_x;
+ min_y = max_y = map_y;
+ }
+ else
+ {
+ if (min_x > map_x) min_x = map_x;
+ else if (max_x < map_x) max_x = map_x;
+
+ if (min_y > map_y) min_y = map_y;
+ else if (max_y < map_y) max_y = map_y;
+ }
+ }
+
+ diff_w = (double)(max_x - min_x) / (double)ec->w;
+ diff_h = (double)(max_y - min_y) / (double)ec->h;
+
+ *mx = (int)(x * diff_w) + min_x;
+ *my = (int)(y * diff_h) + min_y;
+}
+
static void
_e_comp_wl_evas_cb_show(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
{
ec, 0, ev->radius_x, ev->radius_y, ev->pressure, ev->angle);
_e_comp_wl_send_touch_move(ec, 0, ev->cur.canvas.x, ev->cur.canvas.y, ev->timestamp);
}
- e_pointer_touch_move(e_comp->pointer, ev->cur.output.x, ev->cur.output.y);
+
+ pointer_x = ev->cur.output.x;
+ pointer_y = ev->cur.output.y;
+
+ if (evas_object_map_enable_get(ec->frame))
+ {
+ e_comp_wl_map_inv_coord_get(ec, pointer_x, pointer_y, &pointer_x, &pointer_y);
+ }
+
+ e_pointer_touch_move(e_comp->pointer, pointer_x, pointer_y);
}
else
{
pointer_x = ev->cur.output.x;
pointer_y = ev->cur.output.y;
- if (e_client_transform_core_enable_get(ec))
- e_client_transform_core_input_inv_rect_transform(ec, pointer_x, pointer_y, &pointer_x, &pointer_y);
+
+ if (evas_object_map_enable_get(ec->frame))
+ {
+ e_comp_wl_map_inv_coord_get(ec, pointer_x, pointer_y, &pointer_x, &pointer_y);
+ }
e_pointer_mouse_move(e_comp->pointer, pointer_x, pointer_y);
if (e_config->use_cursor_timer)
_e_comp_wl_device_renew_axis(dev_name, evas_device_class_get(dev),
ec, 0, ev->radius_x, ev->radius_y, ev->pressure, ev->angle);
_e_comp_wl_evas_handle_mouse_button_to_touch(ec, ev->timestamp, ev->canvas.x, ev->canvas.y, EINA_TRUE);
- e_pointer_touch_move(e_comp->pointer, ev->output.x, ev->output.y);
+
+ pointer_x = ev->output.x;
+ pointer_y = ev->output.y;
+
+ if (evas_object_map_enable_get(ec->frame))
+ {
+ e_comp_wl_map_inv_coord_get(ec, pointer_x, pointer_y, &pointer_x, &pointer_y);
+ }
+
+ e_pointer_touch_move(e_comp->pointer, pointer_x, pointer_y);
e_comp_wl->touch.pressed |= (1 << 0);
}
else
WL_POINTER_BUTTON_STATE_PRESSED);
pointer_x = ev->output.x;
pointer_y = ev->output.y;
- if (e_client_transform_core_enable_get(ec))
- e_client_transform_core_input_inv_rect_transform(ec, pointer_x, pointer_y, &pointer_x, &pointer_y);
+
+ if (evas_object_map_enable_get(ec->frame))
+ {
+ e_comp_wl_map_inv_coord_get(ec, pointer_x, pointer_y, &pointer_x, &pointer_y);
+ }
e_pointer_mouse_move(e_comp->pointer, pointer_x, pointer_y);
if (e_config->use_cursor_timer)
{
sd->zoom.enabled = EINA_TRUE;
- evas_object_map_enable_set(desk->smart_obj, EINA_TRUE);
- EINA_LIST_FOREACH(sd->clients, l, ec)
- evas_object_map_enable_set(ec->frame, EINA_TRUE);
+ /*
+ * NOTE: evas_object_map_enable_set is called in _e_desk_client_zoom()
+ */
+ /*
+ * evas_object_map_enable_set(desk->smart_obj, EINA_TRUE);
+ * EINA_LIST_FOREACH(sd->clients, l, ec)
+ * evas_object_map_enable_set(ec->frame, EINA_TRUE);
+ */
/* FIXME TEMP disable hwc */
_e_desk_util_comp_hwc_disable_set(EINA_TRUE);
_e_desk_object_zoom(desk->smart_obj, sd->zoom.ratio_x, sd->zoom.ratio_y,
sd->zoom.cord_x, sd->zoom.cord_y);
- evas_object_map_enable_set(desk->smart_obj, EINA_FALSE);
+ /*
+ * NOTE: evas_object_map_enable_set is called in _e_desk_client_zoom()
+ */
+ /*
+ * evas_object_map_enable_set(desk->smart_obj, EINA_FALSE);
+ */
EINA_LIST_FOREACH(sd->clients, l, ec)
{
/* NOTE Is it really necessary?
Eina_Bool transformed;
transformed = e_client_transform_core_enable_get(ec);
+ if (ec->is_cursor) return;
+
if (transformed)
e_client_transform_core_update_with_desk_zoom(ec);
else