summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2013-07-22 14:33:42 -0700
committerKristian Høgsberg <krh@bitplanet.net>2013-07-25 09:50:15 -0700
commit98c774f1c0f3fc4891c9dd6fc2dbe67bb70938d6 (patch)
treec9e0165474cd8a68c2615436444fde68fb581547 /src
parent5addaa1820704cbbac85b541b5871289f5e5a00a (diff)
downloadweston-98c774f1c0f3fc4891c9dd6fc2dbe67bb70938d6.tar.gz
weston-98c774f1c0f3fc4891c9dd6fc2dbe67bb70938d6.tar.bz2
weston-98c774f1c0f3fc4891c9dd6fc2dbe67bb70938d6.zip
compositor: Move device coordinate transform helper to compositor.c
This function transform input coordinates from output space to compositor space and is useful for X input as well as touch screen input.
Diffstat (limited to 'src')
-rw-r--r--src/compositor-x11.c67
-rw-r--r--src/compositor.c51
-rw-r--r--src/compositor.h4
3 files changed, 61 insertions, 61 deletions
diff --git a/src/compositor-x11.c b/src/compositor-x11.c
index 5a0bcf0d..51ae35df 100644
--- a/src/compositor-x11.c
+++ b/src/compositor-x11.c
@@ -1059,61 +1059,6 @@ x11_compositor_deliver_button_event(struct x11_compositor *c,
}
static void
-x11_output_transform_coordinate(struct x11_output *x11_output,
- wl_fixed_t *x, wl_fixed_t *y)
-{
- struct weston_output *output = &x11_output->base;
- wl_fixed_t tx, ty;
- wl_fixed_t width = wl_fixed_from_int(output->width * output->scale - 1);
- wl_fixed_t height = wl_fixed_from_int(output->height * output->scale - 1);
-
- switch(output->transform) {
- case WL_OUTPUT_TRANSFORM_NORMAL:
- default:
- tx = *x;
- ty = *y;
- break;
- case WL_OUTPUT_TRANSFORM_90:
- tx = *y;
- ty = height - *x;
- break;
- case WL_OUTPUT_TRANSFORM_180:
- tx = width - *x;
- ty = height - *y;
- break;
- case WL_OUTPUT_TRANSFORM_270:
- tx = width - *y;
- ty = *x;
- break;
- case WL_OUTPUT_TRANSFORM_FLIPPED:
- tx = width - *x;
- ty = *y;
- break;
- case WL_OUTPUT_TRANSFORM_FLIPPED_90:
- tx = width - *y;
- ty = height - *x;
- break;
- case WL_OUTPUT_TRANSFORM_FLIPPED_180:
- tx = *x;
- ty = height - *y;
- break;
- case WL_OUTPUT_TRANSFORM_FLIPPED_270:
- tx = *y;
- ty = *x;
- break;
- }
-
- tx /= output->scale;
- ty /= output->scale;
-
- tx += wl_fixed_from_int(output->x);
- ty += wl_fixed_from_int(output->y);
-
- *x = tx;
- *y = ty;
-}
-
-static void
x11_compositor_deliver_motion_event(struct x11_compositor *c,
xcb_generic_event_t *event)
{
@@ -1125,9 +1070,9 @@ x11_compositor_deliver_motion_event(struct x11_compositor *c,
if (!c->has_xkb)
update_xkb_state_from_core(c, motion_notify->state);
output = x11_compositor_find_output(c, motion_notify->event);
- x = wl_fixed_from_int(motion_notify->event_x);
- y = wl_fixed_from_int(motion_notify->event_y);
- x11_output_transform_coordinate(output, &x, &y);
+ weston_output_transform_coordinate(&output->base,
+ motion_notify->event_x,
+ motion_notify->event_y, &x, &y);
notify_motion(&c->core_seat, weston_compositor_get_time(),
x - c->prev_x, y - c->prev_y);
@@ -1150,9 +1095,9 @@ x11_compositor_deliver_enter_event(struct x11_compositor *c,
if (!c->has_xkb)
update_xkb_state_from_core(c, enter_notify->state);
output = x11_compositor_find_output(c, enter_notify->event);
- x = wl_fixed_from_int(enter_notify->event_x);
- y = wl_fixed_from_int(enter_notify->event_y);
- x11_output_transform_coordinate(output, &x, &y);
+ weston_output_transform_coordinate(&output->base,
+ enter_notify->event_x,
+ enter_notify->event_y, &x, &y);
notify_pointer_focus(&c->core_seat, &output->base, x, y);
diff --git a/src/compositor.c b/src/compositor.c
index e9e1166c..2cadb45d 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -2751,6 +2751,57 @@ weston_output_init(struct weston_output *output, struct weston_compositor *c,
wl_signal_emit(&c->output_created_signal, output);
}
+WL_EXPORT void
+weston_output_transform_coordinate(struct weston_output *output,
+ int device_x, int device_y,
+ wl_fixed_t *x, wl_fixed_t *y)
+{
+ wl_fixed_t tx, ty;
+ wl_fixed_t width, height;
+
+ width = wl_fixed_from_int(output->width * output->scale - 1);
+ height = wl_fixed_from_int(output->height * output->scale - 1);
+
+ switch(output->transform) {
+ case WL_OUTPUT_TRANSFORM_NORMAL:
+ default:
+ tx = wl_fixed_from_int(device_x);
+ ty = wl_fixed_from_int(device_y);
+ break;
+ case WL_OUTPUT_TRANSFORM_90:
+ tx = wl_fixed_from_int(device_y);
+ ty = height - wl_fixed_from_int(device_x);
+ break;
+ case WL_OUTPUT_TRANSFORM_180:
+ tx = width - wl_fixed_from_int(device_x);
+ ty = height - wl_fixed_from_int(device_y);
+ break;
+ case WL_OUTPUT_TRANSFORM_270:
+ tx = width - wl_fixed_from_int(device_y);
+ ty = wl_fixed_from_int(device_x);
+ break;
+ case WL_OUTPUT_TRANSFORM_FLIPPED:
+ tx = width - wl_fixed_from_int(device_x);
+ ty = wl_fixed_from_int(device_y);
+ break;
+ case WL_OUTPUT_TRANSFORM_FLIPPED_90:
+ tx = width - wl_fixed_from_int(device_y);
+ ty = height - wl_fixed_from_int(device_x);
+ break;
+ case WL_OUTPUT_TRANSFORM_FLIPPED_180:
+ tx = wl_fixed_from_int(device_x);
+ ty = height - wl_fixed_from_int(device_y);
+ break;
+ case WL_OUTPUT_TRANSFORM_FLIPPED_270:
+ tx = wl_fixed_from_int(device_y);
+ ty = wl_fixed_from_int(device_x);
+ break;
+ }
+
+ *x = tx / output->scale + wl_fixed_from_int(output->x);
+ *y = ty / output->scale + wl_fixed_from_int(output->y);
+}
+
static void
compositor_bind(struct wl_client *client,
void *data, uint32_t version, uint32_t id)
diff --git a/src/compositor.h b/src/compositor.h
index 84f39e22..acaecbb5 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -1075,6 +1075,10 @@ weston_output_init(struct weston_output *output, struct weston_compositor *c,
int x, int y, int width, int height, uint32_t transform, int32_t scale);
void
weston_output_destroy(struct weston_output *output);
+void
+weston_output_transform_coordinate(struct weston_output *x11_output,
+ int device_x, int device_y,
+ wl_fixed_t *x, wl_fixed_t *y);
void
weston_seat_init(struct weston_seat *seat, struct weston_compositor *ec,