diff --git a/Engine/ac/gamesetup.h b/Engine/ac/gamesetup.h index bfec617336..ad34faf2b2 100644 --- a/Engine/ac/gamesetup.h +++ b/Engine/ac/gamesetup.h @@ -108,7 +108,9 @@ struct GameConfig float MouseSpeed = 1.f; // Touch-to-mouse emulation mode (how the touches are handled overall) TouchMouseEmulation TouchEmulateMouse = kTouchMouse_None; // touch-to-mouse style - bool TouchMotionRelative = false; // touch control abs/relative mode + bool TouchMotionRelative = false; // touch control abs/relative mode + // Mouse-to-touch emulation (LMB creates touch events) + bool MouseEmulateTouch = false; // Cache options size_t SpriteCacheSize = DefSpriteCacheSize; // in KB diff --git a/Engine/device/mousew32.cpp b/Engine/device/mousew32.cpp index 79c5530cb2..4094138ca0 100644 --- a/Engine/device/mousew32.cpp +++ b/Engine/device/mousew32.cpp @@ -193,6 +193,11 @@ void Mouse::SetTouch2MouseMode(TouchMouseEmulation mode, bool relative, float sp ags_touch_set_mouse_emulation(mode, relative, speed); } +void Mouse::SetMouse2Touch(bool enable) +{ + SDL_SetHint(SDL_HINT_MOUSE_TOUCH_EVENTS, enable ? "1" : "0"); +} + void Mouse::SetSpeedUnit(float f) { SpeedUnit = f; diff --git a/Engine/device/mousew32.h b/Engine/device/mousew32.h index 000c9b7d4a..57785c8da3 100644 --- a/Engine/device/mousew32.h +++ b/Engine/device/mousew32.h @@ -34,8 +34,10 @@ namespace Mouse void SetMovementControl(bool on); // Tell if the mouse movement control is enabled bool IsControlEnabled(); - // Set the touch2mouse motion mode: absolute/relative + // Set the touch2mouse emulation mode and absolute/relative motion mode void SetTouch2MouseMode(TouchMouseEmulation mode, bool relative, float speed); + // Set the mouse2touch emulation mode + void SetMouse2Touch(bool enable); // Set base speed factor, which would serve as a mouse speed unit void SetSpeedUnit(float f); // Get base speed factor diff --git a/Engine/main/config.cpp b/Engine/main/config.cpp index b0384ab84c..0d3e9b27d3 100644 --- a/Engine/main/config.cpp +++ b/Engine/main/config.cpp @@ -257,6 +257,7 @@ void load_common_config(const ConfigTree &cfg, GameConfig &setup) CfgReadString(cfg, "touch", "emul_mouse_mode", "one_finger"), CstrArr{ "off", "one_finger", "two_fingers" }, setup.TouchEmulateMouse); setup.TouchMotionRelative = CfgReadBoolInt(cfg, "touch", "emul_mouse_relative"); + setup.MouseEmulateTouch = CfgReadBoolInt(cfg, "touch", "mouse_as_touch", setup.MouseEmulateTouch); // Translation / localization setup.Translation = CfgReadString(cfg, "language", "translation"); diff --git a/Engine/main/engine_setup.cpp b/Engine/main/engine_setup.cpp index 271170f908..952402a319 100644 --- a/Engine/main/engine_setup.cpp +++ b/Engine/main/engine_setup.cpp @@ -129,8 +129,11 @@ void engine_post_gfxmode_mouse_setup(const Size &init_desktop) Debug::Printf(kDbgMsg_Info, "Mouse speed control: %s, unit: %f, user value: %f", usetup.MouseCtrlEnabled ? "enabled" : "disabled", Mouse::GetSpeedUnit(), Mouse::GetSpeed()); Mouse::SetTouch2MouseMode(usetup.TouchEmulateMouse, usetup.TouchMotionRelative, usetup.MouseSpeed); - Debug::Printf(kDbgMsg_Info, "Touch-to-mouse motion mode: %s", - usetup.TouchMotionRelative ? "relative" : "absolute"); + Mouse::SetMouse2Touch(usetup.MouseEmulateTouch); + const char *emul_mode_names[] = { "none", "one finger", "two fingers" }; + Debug::Printf(kDbgMsg_Info, "Touch-to-mouse emulation: %s, motion: %s", + emul_mode_names[usetup.TouchEmulateMouse], usetup.TouchMotionRelative ? "relative" : "absolute"); + Debug::Printf(kDbgMsg_Info, "Mouse-to-touch emulation: %s", usetup.MouseEmulateTouch ? "enabled" : "disabled"); on_coordinates_scaling_changed();