diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2019-01-16 06:21:48 +0100 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2019-01-16 07:49:13 +0100 | 
| commit | bdbab6bbfef596011302b595cab9b09aec147c55 (patch) | |
| tree | 05696f23bad81498bf131f9fe5a93d0ef6bc5809 /proto-mouse | |
| parent | b8ea949f768e47624d938d73a5de58b230d59f71 (diff) | |
proto/mouse: add legacy input method
Diffstat (limited to 'proto-mouse')
| -rw-r--r-- | proto-mouse/ftnoir_mousecontrols.ui | 201 | ||||
| -rw-r--r-- | proto-mouse/ftnoir_protocol_mouse.cpp | 49 | ||||
| -rw-r--r-- | proto-mouse/ftnoir_protocol_mouse.h | 10 | ||||
| -rw-r--r-- | proto-mouse/ftnoir_protocol_mouse_dialog.cpp | 19 | ||||
| -rw-r--r-- | proto-mouse/lang/nl_NL.ts | 30 | ||||
| -rw-r--r-- | proto-mouse/lang/ru_RU.ts | 30 | ||||
| -rw-r--r-- | proto-mouse/lang/stub.ts | 30 | ||||
| -rw-r--r-- | proto-mouse/lang/zh_CN.ts | 30 | ||||
| -rw-r--r-- | proto-mouse/mouse-settings.hpp | 22 | 
9 files changed, 219 insertions, 202 deletions
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 @@  <?xml version="1.0" encoding="UTF-8"?>  <ui version="4.0"> - <class>UICMOUSEControls</class> - <widget class="QWidget" name="UICMOUSEControls"> + <class>UI_mouse</class> + <widget class="QWidget" name="UI_mouse">    <property name="windowModality">     <enum>Qt::NonModal</enum>    </property> @@ -9,70 +9,42 @@     <rect>      <x>0</x>      <y>0</y> -    <width>413</width> -    <height>155</height> +    <width>360</width> +    <height>146</height>     </rect>    </property>    <property name="minimumSize">     <size> -    <width>413</width> +    <width>360</width>      <height>0</height>     </size>    </property>    <property name="windowTitle"> -   <string>Mouse protocol settings</string> +   <string>Mouse protocol</string>    </property>    <property name="windowIcon">     <iconset resource="win32-mouse-protocol.qrc">      <normaloff>:/images/mouse.png</normaloff>:/images/mouse.png</iconset>    </property> -  <property name="layoutDirection"> -   <enum>Qt::LeftToRight</enum> -  </property> -  <property name="autoFillBackground"> -   <bool>false</bool> -  </property> -  <layout class="QGridLayout" name="gridLayout"> +  <layout class="QFormLayout" name="formLayout"> +   <property name="leftMargin"> +    <number>9</number> +   </property> +   <property name="topMargin"> +    <number>11</number> +   </property> +   <property name="rightMargin"> +    <number>6</number> +   </property>     <item row="0" column="0">      <widget class="QLabel" name="textLabel2_2"> -     <property name="sizePolicy"> -      <sizepolicy hsizetype="Minimum" vsizetype="Maximum"> -       <horstretch>0</horstretch> -       <verstretch>0</verstretch> -      </sizepolicy> -     </property> -     <property name="text"> -      <string>Map mouse X to:</string> -     </property> -     <property name="alignment"> -      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> -     </property> -     <property name="wordWrap"> -      <bool>false</bool> -     </property> -    </widget> -   </item> -   <item row="1" column="0"> -    <widget class="QLabel" name="textLabel2_3"> -     <property name="sizePolicy"> -      <sizepolicy hsizetype="Minimum" vsizetype="Maximum"> -       <horstretch>0</horstretch> -       <verstretch>0</verstretch> -      </sizepolicy> -     </property>       <property name="text"> -      <string>Map mouse Y to:</string> -     </property> -     <property name="alignment"> -      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> -     </property> -     <property name="wordWrap"> -      <bool>false</bool> +      <string>X axis</string>       </property>      </widget>     </item> -   <item row="0" column="1" colspan="2"> -    <widget class="QComboBox" name="cbxSelectMouse_X"> +   <item row="0" column="1"> +    <widget class="QComboBox" name="axis_x">       <property name="sizePolicy">        <sizepolicy hsizetype="Preferred" vsizetype="Maximum">         <horstretch>0</horstretch> @@ -81,16 +53,10 @@       </property>       <property name="maximumSize">        <size> -       <width>80</width> +       <width>105</width>         <height>16777215</height>        </size>       </property> -     <property name="toolTip"> -      <string>Select Number</string> -     </property> -     <property name="insertPolicy"> -      <enum>QComboBox::InsertAlphabetically</enum> -     </property>       <item>        <property name="text">         <string>None</string> @@ -128,8 +94,38 @@       </item>      </widget>     </item> -   <item row="1" column="1" colspan="2"> -    <widget class="QComboBox" name="cbxSelectMouse_Y"> +   <item row="1" column="0"> +    <widget class="QLabel" name="textLabel2_6"> +     <property name="text"> +      <string>Sensitivity</string> +     </property> +    </widget> +   </item> +   <item row="1" column="1"> +    <widget class="QSlider" name="sensitivity_x"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="orientation"> +      <enum>Qt::Horizontal</enum> +     </property> +     <property name="tickInterval"> +      <number>25</number> +     </property> +    </widget> +   </item> +   <item row="2" column="0"> +    <widget class="QLabel" name="textLabel2_3"> +     <property name="text"> +      <string>Y axis</string> +     </property> +    </widget> +   </item> +   <item row="2" column="1"> +    <widget class="QComboBox" name="axis_y">       <property name="sizePolicy">        <sizepolicy hsizetype="Preferred" vsizetype="Maximum">         <horstretch>0</horstretch> @@ -138,16 +134,10 @@       </property>       <property name="maximumSize">        <size> -       <width>80</width> +       <width>105</width>         <height>16777215</height>        </size>       </property> -     <property name="toolTip"> -      <string>Select Number</string> -     </property> -     <property name="insertPolicy"> -      <enum>QComboBox::InsertAlphabetically</enum> -     </property>       <item>        <property name="text">         <string>None</string> @@ -185,36 +175,17 @@       </item>      </widget>     </item> -   <item row="4" column="1"> -    <widget class="QDialogButtonBox" name="buttonBox"> -     <property name="standardButtons"> -      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> -     </property> -    </widget> -   </item> -   <item row="2" column="0"> -    <widget class="QLabel" name="textLabel2_4"> -     <property name="sizePolicy"> -      <sizepolicy hsizetype="Minimum" vsizetype="Maximum"> -       <horstretch>0</horstretch> -       <verstretch>0</verstretch> -      </sizepolicy> -     </property> +   <item row="3" column="0"> +    <widget class="QLabel" name="textLabel2_7">       <property name="text"> -      <string>X axis sensitivity</string> -     </property> -     <property name="alignment"> -      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> -     </property> -     <property name="wordWrap"> -      <bool>false</bool> +      <string>Sensitivity</string>       </property>      </widget>     </item> -   <item row="2" column="1"> -    <widget class="QSlider" name="sensitivity_x"> +   <item row="3" column="1"> +    <widget class="QSlider" name="sensitivity_y">       <property name="sizePolicy"> -      <sizepolicy hsizetype="Expanding" vsizetype="Maximum"> +      <sizepolicy hsizetype="Preferred" vsizetype="Minimum">         <horstretch>0</horstretch>         <verstretch>0</verstretch>        </sizepolicy> @@ -227,38 +198,49 @@       </property>      </widget>     </item> -   <item row="3" column="0"> -    <widget class="QLabel" name="textLabel2_5"> +   <item row="4" column="0"> +    <widget class="QLabel" name="label"> +     <property name="text"> +      <string>Method</string> +     </property> +    </widget> +   </item> +   <item row="4" column="1"> +    <widget class="QComboBox" name="input_method">       <property name="sizePolicy"> -      <sizepolicy hsizetype="Minimum" vsizetype="Maximum"> +      <sizepolicy hsizetype="Preferred" vsizetype="Maximum">         <horstretch>0</horstretch>         <verstretch>0</verstretch>        </sizepolicy>       </property> -     <property name="text"> -      <string>Y axis sensitivity</string> -     </property> -     <property name="alignment"> -      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> -     </property> -     <property name="wordWrap"> -      <bool>false</bool> +     <property name="maximumSize"> +      <size> +       <width>105</width> +       <height>16777215</height> +      </size>       </property> +     <item> +      <property name="text"> +       <string>Direct input</string> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>Legacy</string> +      </property> +     </item>      </widget>     </item> -   <item row="3" column="1"> -    <widget class="QSlider" name="sensitivity_y"> +   <item row="5" column="0" colspan="2"> +    <widget class="QDialogButtonBox" name="buttonBox">       <property name="sizePolicy"> -      <sizepolicy hsizetype="Expanding" vsizetype="Maximum"> +      <sizepolicy hsizetype="Expanding" vsizetype="Preferred">         <horstretch>0</horstretch>         <verstretch>0</verstretch>        </sizepolicy>       </property> -     <property name="orientation"> -      <enum>Qt::Horizontal</enum> -     </property> -     <property name="tickInterval"> -      <number>25</number> +     <property name="standardButtons"> +      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>       </property>      </widget>     </item> @@ -268,9 +250,4 @@    <include location="win32-mouse-protocol.qrc"/>   </resources>   <connections/> - <slots> -  <slot>startEngineClicked()</slot> -  <slot>stopEngineClicked()</slot> -  <slot>cameraSettingsClicked()</slot> - </slots>  </ui> 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 <cmath>  #include <algorithm>  #include <windows.h> -#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 <sthalik@misaki.pl> +/* Copyright (c) 2015, 2019 Stanislaw Halik <sthalik@misaki.pl>   *   * 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 <QDebug> -#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 @@  <!DOCTYPE TS>  <TS version="2.1" language="nl_NL">  <context> -    <name>UICMOUSEControls</name> +    <name>UI_mouse</name>      <message> -        <source>Mouse protocol settings</source> +        <source>Mouse protocol</source>          <translation type="unfinished"></translation>      </message>      <message> -        <source>Map mouse X to:</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <source>Map mouse Y to:</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <source>Select Number</source> +        <source>X axis</source>          <translation type="unfinished"></translation>      </message>      <message> @@ -48,11 +40,23 @@          <translation type="unfinished"></translation>      </message>      <message> -        <source>X axis sensitivity</source> +        <source>Y axis</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Sensitivity</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Method</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Direct input</source>          <translation type="unfinished"></translation>      </message>      <message> -        <source>Y axis sensitivity</source> +        <source>Legacy</source>          <translation type="unfinished"></translation>      </message>  </context> 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 @@  <!DOCTYPE TS>  <TS version="2.1" language="ru_RU">  <context> -    <name>UICMOUSEControls</name> +    <name>UI_mouse</name>      <message> -        <source>Mouse protocol settings</source> +        <source>Mouse protocol</source>          <translation type="unfinished"></translation>      </message>      <message> -        <source>Map mouse X to:</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <source>Map mouse Y to:</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <source>Select Number</source> +        <source>X axis</source>          <translation type="unfinished"></translation>      </message>      <message> @@ -48,11 +40,23 @@          <translation type="unfinished"></translation>      </message>      <message> -        <source>X axis sensitivity</source> +        <source>Y axis</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Sensitivity</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Method</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Direct input</source>          <translation type="unfinished"></translation>      </message>      <message> -        <source>Y axis sensitivity</source> +        <source>Legacy</source>          <translation type="unfinished"></translation>      </message>  </context> 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 @@  <!DOCTYPE TS>  <TS version="2.1">  <context> -    <name>UICMOUSEControls</name> +    <name>UI_mouse</name>      <message> -        <source>Mouse protocol settings</source> +        <source>Mouse protocol</source>          <translation type="unfinished"></translation>      </message>      <message> -        <source>Map mouse X to:</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <source>Map mouse Y to:</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <source>Select Number</source> +        <source>X axis</source>          <translation type="unfinished"></translation>      </message>      <message> @@ -48,11 +40,23 @@          <translation type="unfinished"></translation>      </message>      <message> -        <source>X axis sensitivity</source> +        <source>Y axis</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Sensitivity</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Method</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Direct input</source>          <translation type="unfinished"></translation>      </message>      <message> -        <source>Y axis sensitivity</source> +        <source>Legacy</source>          <translation type="unfinished"></translation>      </message>  </context> 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 @@  <!DOCTYPE TS>  <TS version="2.1">  <context> -    <name>UICMOUSEControls</name> +    <name>UI_mouse</name>      <message> -        <source>Mouse protocol settings</source> +        <source>Mouse protocol</source>          <translation type="unfinished"></translation>      </message>      <message> -        <source>Map mouse X to:</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <source>Map mouse Y to:</source> -        <translation type="unfinished"></translation> -    </message> -    <message> -        <source>Select Number</source> +        <source>X axis</source>          <translation type="unfinished"></translation>      </message>      <message> @@ -48,11 +40,23 @@          <translation type="unfinished"></translation>      </message>      <message> -        <source>X axis sensitivity</source> +        <source>Y axis</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Sensitivity</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Method</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Direct input</source>          <translation type="unfinished"></translation>      </message>      <message> -        <source>Y axis sensitivity</source> +        <source>Legacy</source>          <translation type="unfinished"></translation>      </message>  </context> 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<int> Mouse_X, Mouse_Y; -    value<slider_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<int> mouse_x { b, "mouse-x", 0 }, mouse_y { b, "mouse-y", 0 }; +    value<slider_value> sensitivity_x { b, "mouse-sensitivity-x", { 200, 25, 500 } }; +    value<slider_value> sensitivity_y { b, "mouse-sensitivity-y", { 200, 25, 500 } }; +    value<input_method> input_method { b, "input-method", input_direct }; + +    mouse_settings() : opts("mouse-proto") {}  };  } // ns mouse_impl  | 
