From bdbab6bbfef596011302b595cab9b09aec147c55 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 16 Jan 2019 06:21:48 +0100 Subject: proto/mouse: add legacy input method --- proto-mouse/ftnoir_mousecontrols.ui | 201 ++++++++++++--------------- proto-mouse/ftnoir_protocol_mouse.cpp | 49 ++++--- proto-mouse/ftnoir_protocol_mouse.h | 10 +- proto-mouse/ftnoir_protocol_mouse_dialog.cpp | 19 ++- proto-mouse/lang/nl_NL.ts | 30 ++-- proto-mouse/lang/ru_RU.ts | 30 ++-- proto-mouse/lang/stub.ts | 30 ++-- proto-mouse/lang/zh_CN.ts | 30 ++-- proto-mouse/mouse-settings.hpp | 22 +-- 9 files changed, 219 insertions(+), 202 deletions(-) (limited to 'proto-mouse') diff --git a/proto-mouse/ftnoir_mousecontrols.ui b/proto-mouse/ftnoir_mousecontrols.ui index f970f887..45b33470 100644 --- a/proto-mouse/ftnoir_mousecontrols.ui +++ b/proto-mouse/ftnoir_mousecontrols.ui @@ -1,7 +1,7 @@ - UICMOUSEControls - + UI_mouse + Qt::NonModal @@ -9,70 +9,42 @@ 0 0 - 413 - 155 + 360 + 146 - 413 + 360 0 - Mouse protocol settings + Mouse protocol :/images/mouse.png:/images/mouse.png - - Qt::LeftToRight - - - false - - + + + 9 + + + 11 + + + 6 + - - - 0 - 0 - - - - Map mouse X to: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - false - - - - - - - - 0 - 0 - - - Map mouse Y to: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - false + X axis - - + + 0 @@ -81,16 +53,10 @@ - 80 + 105 16777215 - - Select Number - - - QComboBox::InsertAlphabetically - None @@ -128,8 +94,38 @@ - - + + + + Sensitivity + + + + + + + + 0 + 0 + + + + Qt::Horizontal + + + 25 + + + + + + + Y axis + + + + + 0 @@ -138,16 +134,10 @@ - 80 + 105 16777215 - - Select Number - - - QComboBox::InsertAlphabetically - None @@ -185,36 +175,17 @@ - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - 0 - 0 - - + + - X axis sensitivity - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - false + Sensitivity - - + + - + 0 0 @@ -227,38 +198,49 @@ - - + + + + Method + + + + + - + 0 0 - - Y axis sensitivity - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - false + + + 105 + 16777215 + + + + Direct input + + + + + Legacy + + - - + + - + 0 0 - - Qt::Horizontal - - - 25 + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok @@ -268,9 +250,4 @@ - - startEngineClicked() - stopEngineClicked() - cameraSettingsClicked() - diff --git a/proto-mouse/ftnoir_protocol_mouse.cpp b/proto-mouse/ftnoir_protocol_mouse.cpp index 60c04cbe..2b3af2f0 100644 --- a/proto-mouse/ftnoir_protocol_mouse.cpp +++ b/proto-mouse/ftnoir_protocol_mouse.cpp @@ -9,14 +9,11 @@ #include "api/plugin-api.hpp" #include "compat/math.hpp" + #include #include #include -#ifndef MOUSEEVENTF_MOVE_NOCOALESCE -# define MOUSEEVENTF_MOVE_NOCOALESCE 0x2000 -#endif - static const double invert[] = { 1., 1., 1., 1., -1., 1. @@ -24,8 +21,8 @@ static const double invert[] = { void mouse::pose(const double* headpose) { - const int axis_x = s.Mouse_X - 1; - const int axis_y = s.Mouse_Y - 1; + const int axis_x = s.mouse_x - 1; + const int axis_y = s.mouse_y - 1; int mouse_x = 0, mouse_y = 0; @@ -42,18 +39,38 @@ void mouse::pose(const double* headpose) const int dx = get_delta(mouse_x, last_x), dy = get_delta(mouse_y, last_y); + last_x = mouse_x; last_y = mouse_y; + if (dx || dy) { - INPUT input; - input.type = INPUT_MOUSE; - MOUSEINPUT& mi = input.mi; - mi = {}; - mi.dx = dx; - mi.dy = dy; - mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_MOVE_NOCOALESCE; - - (void)SendInput(1, &input, sizeof(input)); - last_x = mouse_x; last_y = mouse_y; + switch (s.input_method) + { + default: + eval_once(qDebug() << "proto/mouse: invalid input method"); + [[fallthrough]]; + case input_direct: + { + INPUT input; + input.type = INPUT_MOUSE; + MOUSEINPUT& mi = input.mi; + mi = {}; + mi.dx = dx; + mi.dy = dy; + mi.dwFlags = MOUSEEVENTF_MOVE; + + (void)SendInput(1, &input, sizeof(input)); + + break; + } + case input_legacy: + { + POINT pt{}; + (void)GetCursorPos(&pt); + (void)SetCursorPos(pt.x + dx, pt.y + dy); + + break; + } + } } } diff --git a/proto-mouse/ftnoir_protocol_mouse.h b/proto-mouse/ftnoir_protocol_mouse.h index c8709604..b7cf61cf 100644 --- a/proto-mouse/ftnoir_protocol_mouse.h +++ b/proto-mouse/ftnoir_protocol_mouse.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015 Stanislaw Halik +/* Copyright (c) 2015, 2019 Stanislaw Halik * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -10,10 +10,10 @@ #include "ui_ftnoir_mousecontrols.h" #include "mouse-settings.hpp" -#include "compat/tr.hpp" +#include "api/plugin-api.hpp" #include -#include "api/plugin-api.hpp" + using namespace options; class mouse : public TR, public IProtocol @@ -37,7 +37,7 @@ class MOUSEControls: public IProtocolDialog { Q_OBJECT - Ui::UICMOUSEControls ui; + Ui::UI_mouse ui; mouse_settings s; private slots: @@ -46,7 +46,7 @@ private slots: public: MOUSEControls(); - void register_protocol(IProtocol *) override {} + void register_protocol(IProtocol*) override {} void unregister_protocol() override {} }; diff --git a/proto-mouse/ftnoir_protocol_mouse_dialog.cpp b/proto-mouse/ftnoir_protocol_mouse_dialog.cpp index 77b1ff2e..5646718c 100644 --- a/proto-mouse/ftnoir_protocol_mouse_dialog.cpp +++ b/proto-mouse/ftnoir_protocol_mouse_dialog.cpp @@ -3,19 +3,25 @@ MOUSEControls::MOUSEControls() { - ui.setupUi( this ); + ui.setupUi(this); - connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(doOK())); - connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(doCancel())); + connect(ui.buttonBox, &QDialogButtonBox::accepted, this, &MOUSEControls::doOK); + connect(ui.buttonBox, &QDialogButtonBox::rejected, this, &MOUSEControls::doCancel); - tie_setting(s.Mouse_X, ui.cbxSelectMouse_X); - tie_setting(s.Mouse_Y, ui.cbxSelectMouse_Y); + tie_setting(s.mouse_x, ui.axis_x); + tie_setting(s.mouse_y, ui.axis_y); tie_setting(s.sensitivity_x, ui.sensitivity_x); tie_setting(s.sensitivity_y, ui.sensitivity_y); + + const int data[] = { input_direct, input_legacy }; + for (unsigned k = 0; k < std::size(data); k++) + ui.input_method->setItemData(k, data[k]); + tie_setting(s.input_method, ui.input_method); } -void MOUSEControls::doOK() { +void MOUSEControls::doOK() +{ s.b->save(); close(); } @@ -24,4 +30,3 @@ void MOUSEControls::doCancel() { close(); } - diff --git a/proto-mouse/lang/nl_NL.ts b/proto-mouse/lang/nl_NL.ts index 8994756b..13a75520 100644 --- a/proto-mouse/lang/nl_NL.ts +++ b/proto-mouse/lang/nl_NL.ts @@ -2,21 +2,13 @@ - UICMOUSEControls + UI_mouse - Mouse protocol settings + Mouse protocol - Map mouse X to: - - - - Map mouse Y to: - - - - Select Number + X axis @@ -48,11 +40,23 @@ - X axis sensitivity + Y axis + + + + Sensitivity + + + + Method + + + + Direct input - Y axis sensitivity + Legacy diff --git a/proto-mouse/lang/ru_RU.ts b/proto-mouse/lang/ru_RU.ts index ab5e650c..bdadb6bd 100644 --- a/proto-mouse/lang/ru_RU.ts +++ b/proto-mouse/lang/ru_RU.ts @@ -2,21 +2,13 @@ - UICMOUSEControls + UI_mouse - Mouse protocol settings + Mouse protocol - Map mouse X to: - - - - Map mouse Y to: - - - - Select Number + X axis @@ -48,11 +40,23 @@ - X axis sensitivity + Y axis + + + + Sensitivity + + + + Method + + + + Direct input - Y axis sensitivity + Legacy diff --git a/proto-mouse/lang/stub.ts b/proto-mouse/lang/stub.ts index 1bbd5991..2a811df1 100644 --- a/proto-mouse/lang/stub.ts +++ b/proto-mouse/lang/stub.ts @@ -2,21 +2,13 @@ - UICMOUSEControls + UI_mouse - Mouse protocol settings + Mouse protocol - Map mouse X to: - - - - Map mouse Y to: - - - - Select Number + X axis @@ -48,11 +40,23 @@ - X axis sensitivity + Y axis + + + + Sensitivity + + + + Method + + + + Direct input - Y axis sensitivity + Legacy diff --git a/proto-mouse/lang/zh_CN.ts b/proto-mouse/lang/zh_CN.ts index 1bbd5991..2a811df1 100644 --- a/proto-mouse/lang/zh_CN.ts +++ b/proto-mouse/lang/zh_CN.ts @@ -2,21 +2,13 @@ - UICMOUSEControls + UI_mouse - Mouse protocol settings + Mouse protocol - Map mouse X to: - - - - Map mouse Y to: - - - - Select Number + X axis @@ -48,11 +40,23 @@ - X axis sensitivity + Y axis + + + + Sensitivity + + + + Method + + + + Direct input - Y axis sensitivity + Legacy diff --git a/proto-mouse/mouse-settings.hpp b/proto-mouse/mouse-settings.hpp index c485e534..fda06166 100644 --- a/proto-mouse/mouse-settings.hpp +++ b/proto-mouse/mouse-settings.hpp @@ -2,20 +2,22 @@ #include "options/options.hpp" +enum input_method { + input_direct = 0, input_legacy = 1, +}; + namespace mouse_impl { using namespace options; -struct mouse_settings : opts { - value Mouse_X, Mouse_Y; - value sensitivity_x, sensitivity_y; - mouse_settings() : - opts("mouse-proto"), - Mouse_X(b, "mouse-x", 0), - Mouse_Y(b, "mouse-y", 0), - sensitivity_x(b, "mouse-sensitivity-x", { 200, 25, 500 }), - sensitivity_y(b, "mouse-sensitivity-y", { 200, 25, 500 }) - {} +struct mouse_settings : opts +{ + value mouse_x { b, "mouse-x", 0 }, mouse_y { b, "mouse-y", 0 }; + value sensitivity_x { b, "mouse-sensitivity-x", { 200, 25, 500 } }; + value sensitivity_y { b, "mouse-sensitivity-y", { 200, 25, 500 } }; + value input_method { b, "input-method", input_direct }; + + mouse_settings() : opts("mouse-proto") {} }; } // ns mouse_impl -- cgit v1.2.3