[client] spice: added basic mouse smoothing for non-capture mode

Enabled by default, can be disabled with `input:mouseSmoothing`
This commit is contained in:
Geoffrey McRae 2021-01-09 14:39:48 +11:00
parent ce96c77098
commit 579be87597
3 changed files with 27 additions and 3 deletions

View File

@ -282,6 +282,13 @@ static struct Option options[] =
.type = OPTION_TYPE_INT, .type = OPTION_TYPE_INT,
.value.x_int = 0, .value.x_int = 0,
}, },
{
.module = "input",
.name = "mouseSmoothing",
.description = "Apply simple mouse smoothing when not in capture mode (helps reduce aliasing)",
.type = OPTION_TYPE_BOOL,
.value.x_bool = true,
},
{ {
.module = "input", .module = "input",
.name = "rawMouse", .name = "rawMouse",
@ -467,6 +474,7 @@ bool config_load(int argc, char * argv[])
params.ignoreWindowsKeys = option_get_bool("input", "ignoreWindowsKeys" ); params.ignoreWindowsKeys = option_get_bool("input", "ignoreWindowsKeys" );
params.hideMouse = option_get_bool("input", "hideCursor" ); params.hideMouse = option_get_bool("input", "hideCursor" );
params.mouseSens = option_get_int ("input", "mouseSens" ); params.mouseSens = option_get_int ("input", "mouseSens" );
params.mouseSmoothing = option_get_bool("input", "mouseSmoothing" );
params.rawMouse = option_get_bool("input", "rawMouse" ); params.rawMouse = option_get_bool("input", "rawMouse" );
params.mouseRedraw = option_get_bool("input", "mouseRedraw" ); params.mouseRedraw = option_get_bool("input", "mouseRedraw" );
params.autoCapture = option_get_bool("input", "autoCapture" ); params.autoCapture = option_get_bool("input", "autoCapture" );

View File

@ -877,15 +877,21 @@ static void cursorToInt(double ex, double ey, int *x, int *y)
static void handleMouseGrabbed(double ex, double ey) static void handleMouseGrabbed(double ex, double ey)
{ {
int x, y;
/* apply sensitivity */ /* apply sensitivity */
if (g_cursor.sens != 0) if (g_cursor.sens != 0)
{ {
ex = (ex / 10.0) * (g_cursor.sens + 10); ex = (ex / 10.0) * (g_cursor.sens + 10);
ey = (ey / 10.0) * (g_cursor.sens + 10); ey = (ey / 10.0) * (g_cursor.sens + 10);
cursorToInt(ex, ey, &x, &y);
}
else
{
x = floor(ex);
y = floor(ey);
} }
int x, y;
cursorToInt(ex, ey, &x, &y);
if (x == 0 && y == 0) if (x == 0 && y == 0)
return; return;
@ -1023,7 +1029,16 @@ static void handleMouseNormal(double ex, double ey)
} }
int x, y; int x, y;
if (params.mouseSmoothing)
{
static struct DoublePoint last = { 0 };
last.x = (last.x + ex) / 2.0;
last.y = (last.y + ey) / 2.0;
cursorToInt(last.x, last.y, &x, &y);
}
else
cursorToInt(ex, ey, &x, &y); cursorToInt(ex, ey, &x, &y);
if (x == 0 && y == 0) if (x == 0 && y == 0)
return; return;

View File

@ -138,6 +138,7 @@ struct AppParams
const char * windowTitle; const char * windowTitle;
bool mouseRedraw; bool mouseRedraw;
int mouseSens; int mouseSens;
bool mouseSmoothing;
bool rawMouse; bool rawMouse;
bool autoCapture; bool autoCapture;
}; };