From 89391e7c949216d7edec461e9bb2cb6c787475c6 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sun, 27 Jul 2014 21:33:11 +0200 Subject: vo: different hack for VOs which need to mangle mouse input Follow up on commit 760548da. Mouse handling is a bit confusing, because there are at least 3 coordinate systems associated with it, and it should be cleaned up. But that is hard, so just apply a hack which gets the currently-annoying issue (VO backends needing access to the VO) out of the way. --- input/input.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'input/input.c') diff --git a/input/input.c b/input/input.c index c035187126..97943e05b3 100644 --- a/input/input.c +++ b/input/input.c @@ -159,6 +159,9 @@ struct input_ctx { // Unlike mouse_x/y, this can be used to resolve mouse click bindings. int mouse_vo_x, mouse_vo_y; + bool mouse_mangle, mouse_src_mangle; + struct mp_rect mouse_src, mouse_dst; + bool test; bool default_bindings; @@ -738,11 +741,37 @@ void mp_input_put_axis(struct input_ctx *ictx, int direction, double value) input_unlock(ictx); } +void mp_input_set_mouse_transform(struct input_ctx *ictx, struct mp_rect *dst, + struct mp_rect *src) +{ + input_lock(ictx); + ictx->mouse_mangle = dst || src; + if (ictx->mouse_mangle) { + ictx->mouse_dst = *dst; + ictx->mouse_src_mangle = !!src; + if (ictx->mouse_src_mangle) + ictx->mouse_src = *src; + } + input_unlock(ictx); +} + void mp_input_set_mouse_pos(struct input_ctx *ictx, int x, int y) { input_lock(ictx); MP_DBG(ictx, "mouse move %d/%d\n", x, y); + if (ictx->mouse_mangle) { + struct mp_rect *src = &ictx->mouse_src; + struct mp_rect *dst = &ictx->mouse_dst; + x = MPCLAMP(x, dst->x0, dst->x1) - dst->x0; + y = MPCLAMP(y, dst->y0, dst->y1) - dst->y0; + if (ictx->mouse_src_mangle) { + x = x * 1.0 / (dst->x1 - dst->x0) * (src->x1 - src->x0) + src->x0; + y = y * 1.0 / (dst->y1 - dst->y0) * (src->y1 - src->y0) + src->y0; + } + MP_DBG(ictx, "-> %d/%d\n", x, y); + } + ictx->mouse_event_counter++; ictx->mouse_vo_x = x; ictx->mouse_vo_y = y; -- cgit v1.2.3