From f1fca3e3dc8d77ccc740bab5084cf4bbc715b48f Mon Sep 17 00:00:00 2001 From: Michael Pavone Date: Wed, 14 Jun 2017 20:46:11 -0700 Subject: Fix absolute mouse mode when non-default overscan settings are used --- io.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'io.c') diff --git a/io.c b/io.c index 70a80c8..8363e16 100644 --- a/io.c +++ b/io.c @@ -614,11 +614,14 @@ void handle_mouse_moved(int mouse, uint16_t x, uint16_t y, int16_t deltax, int16 case MOUSE_NONE: break; case MOUSE_ABSOLUTE: { - float scale_x = 640.0 / ((float)render_width()); - float scale_y = 480.0 / ((float)render_height()); - float scale = scale_x > scale_y ? scale_y : scale_x; - mice[mouse].motion_port->device.mouse.cur_x = x * scale_x; - mice[mouse].motion_port->device.mouse.cur_y = y * scale_y; + float scale_x = (render_emulated_width() * 2.0f) / ((float)render_width()); + float scale_y = (render_emulated_height() * 2.0f) / ((float)render_height()); + int32_t adj_x = x * scale_x + 2 * render_overscan_left() - 2 * BORDER_LEFT; + int32_t adj_y = y * scale_y + 2 * render_overscan_top() - 4; + if (adj_x >= 0 && adj_y >= 0) { + mice[mouse].motion_port->device.mouse.cur_x = adj_x; + mice[mouse].motion_port->device.mouse.cur_y = adj_y; + } break; } case MOUSE_RELATIVE: { -- cgit v1.2.3