From: Toni Wilen Date: Wed, 5 Dec 2012 18:19:13 +0000 (+0200) Subject: mouse counter under/overflow fix X-Git-Tag: 2510~5 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=4046bc2bcb92c2c728444957dd01e0aa53e97216;p=francis%2Fwinuae.git mouse counter under/overflow fix --- diff --git a/inputdevice.cpp b/inputdevice.cpp index 6a94a5bf..31b69fdc 100644 --- a/inputdevice.cpp +++ b/inputdevice.cpp @@ -1744,7 +1744,9 @@ static int getvelocity (int num, int subnum, int pct) return v; } -static void mouseupdate (int pct, int vsync) +#define MOUSEXY_MAX 1024 + +static void mouseupdate (int pct, bool vsync) { int v, i; int max = 120; @@ -1797,10 +1799,26 @@ static void mouseupdate (int pct, int vsync) v = getvelocity (i, 0, pct); mxd += v; mouse_x[i] += v; + if (mouse_x[i] < 0) { + mouse_x[i] += MOUSEXY_MAX; + mouse_frame_x[i] = mouse_x[i] - v; + } + if (mouse_x[i] >= MOUSEXY_MAX) { + mouse_x[i] -= MOUSEXY_MAX; + mouse_frame_x[i] = mouse_x[i] - v; + } v = getvelocity (i, 1, pct); myd += v; mouse_y[i] += v; + if (mouse_y[i] < 0) { + mouse_y[i] += MOUSEXY_MAX; + mouse_frame_y[i] = mouse_y[i] - v; + } + if (mouse_y[i] >= MOUSEXY_MAX) { + mouse_y[i] -= MOUSEXY_MAX; + mouse_frame_y[i] = mouse_y[i] - v; + } v = getvelocity (i, 2, pct); if (v > 0) @@ -1810,10 +1828,14 @@ static void mouseupdate (int pct, int vsync) if (!mouse_deltanoreset[i][2]) mouse_delta[i][2] = 0; - if (mouse_frame_x[i] - mouse_x[i] > max) + if (mouse_frame_x[i] - mouse_x[i] > max) { mouse_x[i] = mouse_frame_x[i] - max; - if (mouse_frame_x[i] - mouse_x[i] < -max) + mouse_x[i] &= MOUSEXY_MAX - 1; + } + if (mouse_frame_x[i] - mouse_x[i] < -max) { mouse_x[i] = mouse_frame_x[i] + max; + mouse_x[i] &= MOUSEXY_MAX - 1; + } if (mouse_frame_y[i] - mouse_y[i] > max) mouse_y[i] = mouse_frame_y[i] - max; @@ -1840,9 +1862,9 @@ static void readinput (void) diff = totalvpos - input_vpos; if (diff > 0) { if (diff < 10) { - mouseupdate (0, 0); + mouseupdate (0, false); } else { - mouseupdate (diff * 1000 / current_maxvpos (), 0); + mouseupdate (diff * 1000 / current_maxvpos (), false); } } input_vpos = totalvpos; @@ -3197,7 +3219,7 @@ void inputdevice_vsync (void) write_log (_T("*\n")); input_frame++; - mouseupdate (0, 1); + mouseupdate (0, true); if (!input_record) { inputdevice_read ();