Add option to enable mouse acceleration for remote desktop usage

This commit is contained in:
Cameron Gutman 2018-09-09 13:21:11 -07:00
parent af17d56cbd
commit 9e2fd67487
7 changed files with 35 additions and 8 deletions

View file

@ -423,10 +423,10 @@ ScrollView {
id: gamepadSettingsGroupBox id: gamepadSettingsGroupBox
width: (parent.width - parent.padding) width: (parent.width - parent.padding)
padding: 12 padding: 12
title: "<font color=\"skyblue\">Gamepad Settings</font>" title: "<font color=\"skyblue\">Input Settings</font>"
font.pointSize: 12 font.pointSize: 12
Column { Row {
anchors.fill: parent anchors.fill: parent
spacing: 5 spacing: 5
@ -439,6 +439,16 @@ ScrollView {
prefs.multiController = checked prefs.multiController = checked
} }
} }
CheckBox {
id: mouseAccelerationCheck
text: "<font color=\"white\">Enable mouse acceleration</font>"
font.pointSize: 12
checked: prefs.mouseAcceleration
onCheckedChanged: {
prefs.mouseAcceleration = checked
}
}
} }
} }
@ -449,13 +459,15 @@ ScrollView {
title: "<font color=\"skyblue\">Host Settings</font>" title: "<font color=\"skyblue\">Host Settings</font>"
font.pointSize: 12 font.pointSize: 12
Column { Row {
anchors.fill: parent anchors.fill: parent
spacing: 5 spacing: 5
CheckBox { CheckBox {
id: optimizeGameSettingsCheck id: optimizeGameSettingsCheck
text: "<font color=\"white\">Optimize game settings</font>" text: "<font color=\"white\">Optimize game settings</font>"
// HACK: Match width of the other checkbox to make the UI not look bad
width: multiControllerCheck.width
font.pointSize: 12 font.pointSize: 12
checked: prefs.gameOptimizations checked: prefs.gameOptimizations
onCheckedChanged: { onCheckedChanged: {

View file

@ -14,7 +14,7 @@ ApplicationWindow {
id: window id: window
visible: true visible: true
width: 1280 width: 1280
height: 700 height: 600
Material.theme: Material.Dark Material.theme: Material.Dark
Material.accent: Material.Purple Material.accent: Material.Purple

View file

@ -20,6 +20,7 @@
#define SER_WINDOWMODE "windowmode" #define SER_WINDOWMODE "windowmode"
#define SER_UNSUPPORTEDFPS "unsupportedfps" #define SER_UNSUPPORTEDFPS "unsupportedfps"
#define SER_MDNS "mdns" #define SER_MDNS "mdns"
#define SER_MOUSEACCELERATION "mouseacceleration"
StreamingPreferences::StreamingPreferences() StreamingPreferences::StreamingPreferences()
{ {
@ -40,6 +41,7 @@ void StreamingPreferences::reload()
multiController = settings.value(SER_MULTICONT, true).toBool(); multiController = settings.value(SER_MULTICONT, true).toBool();
unsupportedFps = settings.value(SER_UNSUPPORTEDFPS, false).toBool(); unsupportedFps = settings.value(SER_UNSUPPORTEDFPS, false).toBool();
enableMdns = settings.value(SER_MDNS, true).toBool(); enableMdns = settings.value(SER_MDNS, true).toBool();
mouseAcceleration = settings.value(SER_MOUSEACCELERATION, false).toBool();
audioConfig = static_cast<AudioConfig>(settings.value(SER_AUDIOCFG, audioConfig = static_cast<AudioConfig>(settings.value(SER_AUDIOCFG,
static_cast<int>(AudioConfig::AC_FORCE_STEREO)).toInt()); static_cast<int>(AudioConfig::AC_FORCE_STEREO)).toInt());
videoCodecConfig = static_cast<VideoCodecConfig>(settings.value(SER_VIDEOCFG, videoCodecConfig = static_cast<VideoCodecConfig>(settings.value(SER_VIDEOCFG,
@ -66,6 +68,7 @@ void StreamingPreferences::save()
settings.setValue(SER_MULTICONT, multiController); settings.setValue(SER_MULTICONT, multiController);
settings.setValue(SER_UNSUPPORTEDFPS, unsupportedFps); settings.setValue(SER_UNSUPPORTEDFPS, unsupportedFps);
settings.setValue(SER_MDNS, enableMdns); settings.setValue(SER_MDNS, enableMdns);
settings.setValue(SER_MOUSEACCELERATION, mouseAcceleration);
settings.setValue(SER_AUDIOCFG, static_cast<int>(audioConfig)); settings.setValue(SER_AUDIOCFG, static_cast<int>(audioConfig));
settings.setValue(SER_VIDEOCFG, static_cast<int>(videoCodecConfig)); settings.setValue(SER_VIDEOCFG, static_cast<int>(videoCodecConfig));
settings.setValue(SER_VIDEODEC, static_cast<int>(videoDecoderSelection)); settings.setValue(SER_VIDEODEC, static_cast<int>(videoDecoderSelection));

View file

@ -70,6 +70,7 @@ public:
Q_PROPERTY(bool multiController MEMBER multiController NOTIFY multiControllerChanged) Q_PROPERTY(bool multiController MEMBER multiController NOTIFY multiControllerChanged)
Q_PROPERTY(bool unsupportedFps MEMBER unsupportedFps NOTIFY unsupportedFpsChanged) Q_PROPERTY(bool unsupportedFps MEMBER unsupportedFps NOTIFY unsupportedFpsChanged)
Q_PROPERTY(bool enableMdns MEMBER enableMdns NOTIFY enableMdnsChanged) Q_PROPERTY(bool enableMdns MEMBER enableMdns NOTIFY enableMdnsChanged)
Q_PROPERTY(bool mouseAcceleration MEMBER mouseAcceleration NOTIFY mouseAccelerationChanged)
Q_PROPERTY(AudioConfig audioConfig MEMBER audioConfig NOTIFY audioConfigChanged) Q_PROPERTY(AudioConfig audioConfig MEMBER audioConfig NOTIFY audioConfigChanged)
Q_PROPERTY(VideoCodecConfig videoCodecConfig MEMBER videoCodecConfig NOTIFY videoCodecConfigChanged) Q_PROPERTY(VideoCodecConfig videoCodecConfig MEMBER videoCodecConfig NOTIFY videoCodecConfigChanged)
Q_PROPERTY(VideoDecoderSelection videoDecoderSelection MEMBER videoDecoderSelection NOTIFY videoDecoderSelectionChanged) Q_PROPERTY(VideoDecoderSelection videoDecoderSelection MEMBER videoDecoderSelection NOTIFY videoDecoderSelectionChanged)
@ -86,6 +87,7 @@ public:
bool multiController; bool multiController;
bool unsupportedFps; bool unsupportedFps;
bool enableMdns; bool enableMdns;
bool mouseAcceleration;
AudioConfig audioConfig; AudioConfig audioConfig;
VideoCodecConfig videoCodecConfig; VideoCodecConfig videoCodecConfig;
VideoDecoderSelection videoDecoderSelection; VideoDecoderSelection videoDecoderSelection;
@ -100,6 +102,7 @@ signals:
void multiControllerChanged(); void multiControllerChanged();
void unsupportedFpsChanged(); void unsupportedFpsChanged();
void enableMdnsChanged(); void enableMdnsChanged();
void mouseAccelerationChanged();
void audioConfigChanged(); void audioConfigChanged();
void videoCodecConfigChanged(); void videoCodecConfigChanged();
void videoDecoderSelectionChanged(); void videoDecoderSelectionChanged();

View file

@ -22,13 +22,20 @@ const int SdlInputHandler::k_ButtonMap[] = {
UP_FLAG, DOWN_FLAG, LEFT_FLAG, RIGHT_FLAG UP_FLAG, DOWN_FLAG, LEFT_FLAG, RIGHT_FLAG
}; };
SdlInputHandler::SdlInputHandler(bool multiController) SdlInputHandler::SdlInputHandler(StreamingPreferences& prefs)
: m_LastMouseMotionTime(0), : m_LastMouseMotionTime(0),
m_MultiController(multiController) m_MultiController(prefs.multiController)
{ {
// Allow gamepad input when the app doesn't have focus // Allow gamepad input when the app doesn't have focus
SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1");
// If mouse acceleration is enabled, use relative mode warp (which
// is via normal motion events that are influenced by mouse acceleration).
// Otherwise, we'll use raw input capture which is straight from the device
// without modification by the OS.
SDL_SetHint(SDL_HINT_MOUSE_RELATIVE_MODE_WARP,
prefs.mouseAcceleration ? "1" : "0");
// We need to reinit this each time, since you only get // We need to reinit this each time, since you only get
// an initial set of gamepad arrival events once per init. // an initial set of gamepad arrival events once per init.
SDL_assert(!SDL_WasInit(SDL_INIT_GAMECONTROLLER)); SDL_assert(!SDL_WasInit(SDL_INIT_GAMECONTROLLER));

View file

@ -1,5 +1,7 @@
#pragma once #pragma once
#include "settings/streamingpreferences.h"
#include <SDL.h> #include <SDL.h>
struct GamepadState { struct GamepadState {
@ -18,7 +20,7 @@ struct GamepadState {
class SdlInputHandler class SdlInputHandler
{ {
public: public:
explicit SdlInputHandler(bool multiController); explicit SdlInputHandler(StreamingPreferences& prefs);
~SdlInputHandler(); ~SdlInputHandler();

View file

@ -728,7 +728,7 @@ void Session::exec(int displayOriginX, int displayOriginY)
// Initialize the gamepad code with our preferences // Initialize the gamepad code with our preferences
StreamingPreferences prefs; StreamingPreferences prefs;
SdlInputHandler inputHandler(prefs.multiController); SdlInputHandler inputHandler(prefs);
// The UI should have ensured the old game was already quit // The UI should have ensured the old game was already quit
// if we decide to stream a different game. // if we decide to stream a different game.