diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2015-10-30 09:16:32 +0100 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2015-10-30 09:16:32 +0100 | 
| commit | 0739d5b595be9492c1e574192eba12174111e52c (patch) | |
| tree | 01225d2335ff784b35b59a5438f8ea1e07535486 /proto-mouse | |
| parent | 05b2f05b72c706908e961eff8c0e4aa70dcadbd3 (diff) | |
also rename protocol -> proto
Diffstat (limited to 'proto-mouse')
| -rw-r--r-- | proto-mouse/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | proto-mouse/ftnoir_mousecontrols.ui | 188 | ||||
| -rw-r--r-- | proto-mouse/ftnoir_protocol_mouse.cpp | 54 | ||||
| -rw-r--r-- | proto-mouse/ftnoir_protocol_mouse.h | 59 | ||||
| -rw-r--r-- | proto-mouse/ftnoir_protocol_mouse_dialog.cpp | 24 | ||||
| -rw-r--r-- | proto-mouse/images/mouse.png | bin | 0 -> 1169 bytes | |||
| -rw-r--r-- | proto-mouse/win32-mouse-protocol.qrc | 5 | 
7 files changed, 333 insertions, 0 deletions
| diff --git a/proto-mouse/CMakeLists.txt b/proto-mouse/CMakeLists.txt new file mode 100644 index 00000000..b221c79c --- /dev/null +++ b/proto-mouse/CMakeLists.txt @@ -0,0 +1,3 @@ +if(WIN32) +    opentrack_boilerplate(opentrack-proto-win32-mouse) +endif() diff --git a/proto-mouse/ftnoir_mousecontrols.ui b/proto-mouse/ftnoir_mousecontrols.ui new file mode 100644 index 00000000..b1f4bcf8 --- /dev/null +++ b/proto-mouse/ftnoir_mousecontrols.ui @@ -0,0 +1,188 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UICMOUSEControls</class> + <widget class="QWidget" name="UICMOUSEControls"> +  <property name="windowModality"> +   <enum>Qt::NonModal</enum> +  </property> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>280</width> +    <height>106</height> +   </rect> +  </property> +  <property name="windowTitle"> +   <string>Mouse protocol settings</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"> +   <item row="0" column="0"> +    <widget class="QLabel" name="textLabel2_2"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> +       <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="0" column="1" colspan="2"> +    <widget class="QComboBox" name="cbxSelectMouse_X"> +     <property name="maximumSize"> +      <size> +       <width>80</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> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>X</string> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>Y</string> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>Z</string> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>Yaw</string> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>Pitch</string> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>Roll</string> +      </property> +     </item> +    </widget> +   </item> +   <item row="1" column="1" colspan="2"> +    <widget class="QComboBox" name="cbxSelectMouse_Y"> +     <property name="maximumSize"> +      <size> +       <width>80</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> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>X</string> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>Y</string> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>Z</string> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>Yaw</string> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>Pitch</string> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>Roll</string> +      </property> +     </item> +    </widget> +   </item> +   <item row="1" column="0"> +    <widget class="QLabel" name="textLabel2_3"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> +       <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> +     </property> +    </widget> +   </item> +   <item row="2" column="1"> +    <widget class="QDialogButtonBox" name="buttonBox"> +     <property name="standardButtons"> +      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> +     </property> +    </widget> +   </item> +  </layout> + </widget> + <resources> +  <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 new file mode 100644 index 00000000..c0a0a868 --- /dev/null +++ b/proto-mouse/ftnoir_protocol_mouse.cpp @@ -0,0 +1,54 @@ +/* Copyright (c) 2015 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 + * copyright notice and this permission notice appear in all copies. + */ +#include "ftnoir_protocol_mouse.h" +#include "opentrack/plugin-api.hpp" +#include <windows.h> + +#ifndef MOUSEEVENTF_MOVE_NOCOALESCE +#   define MOUSEEVENTF_MOVE_NOCOALESCE 0x2000 +#endif + +void FTNoIR_Protocol::pose(const double *headpose ) { +    RECT desktop; +    const HWND hDesktop = GetDesktopWindow(); +    if (hDesktop != NULL && GetWindowRect(hDesktop, &desktop)) { +        // XXX TODO remove axis selector, use mapping window's +        // axis selection. Mention in UI axis used. -sh 20140920 +        int axis_x = s.Mouse_X; +        int axis_y = s.Mouse_Y; +         +        int mouse_x = 0, mouse_y = 0; +         +        if (axis_x > 0 && axis_x <= 6) +            mouse_x = headpose[axis_x-1] / (axis_x <= 3 ? 100 : 180) * 10 * desktop.right/2; +     +        if (axis_y > 0 && axis_y <= 6) +            mouse_y = headpose[axis_y-1] / (axis_y <= 3 ? 100 : 180) * 10 * desktop.bottom/2; +         +        MOUSEINPUT mi; +        mi.dx = mouse_x - last_x; +        mi.dy = mouse_y - last_y; +        mi.mouseData = 0; +        mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_MOVE_NOCOALESCE; +        mi.time = 0; +        mi.dwExtraInfo = 0; +        INPUT input; +        input.type = INPUT_MOUSE; +        input.mi = mi; +        (void) SendInput(1, &input, sizeof(INPUT)); +         +        last_x = mouse_x; +        last_y = mouse_y; +    } +} + +bool FTNoIR_Protocol::correct() +{    +    return true; +} + +OPENTRACK_DECLARE_PROTOCOL(FTNoIR_Protocol, MOUSEControls, FTNoIR_ProtocolDll) diff --git a/proto-mouse/ftnoir_protocol_mouse.h b/proto-mouse/ftnoir_protocol_mouse.h new file mode 100644 index 00000000..595be393 --- /dev/null +++ b/proto-mouse/ftnoir_protocol_mouse.h @@ -0,0 +1,59 @@ +/* Copyright (c) 2015 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 + * copyright notice and this permission notice appear in all copies. + */ + +#pragma once + +#include "ui_ftnoir_mousecontrols.h" +#include <QDebug> +#include "opentrack/plugin-api.hpp" +#include "opentrack/options.hpp" +using namespace options; + +struct settings : opts { +    value<int> Mouse_X, Mouse_Y; +    settings() : +        opts("mouse-proto"), +        Mouse_X(b, "mouse-x", 0), +        Mouse_Y(b, "mouse-y", 0) +    {} +}; + +class FTNoIR_Protocol : public IProtocol +{ +public: +    FTNoIR_Protocol() : last_x(0), last_y(0) {} +    bool correct(); +    void pose( const double *headpose); +    QString game_name() { +        return "Mouse tracker"; +    } +    int last_x, last_y; +private: +    struct settings s; +}; + +class MOUSEControls: public IProtocolDialog +{ +    Q_OBJECT +public: +    MOUSEControls(); +    void register_protocol(IProtocol *) {} +    void unregister_protocol() {} +private: +    Ui::UICMOUSEControls ui; +    settings s; +private slots: +    void doOK(); +    void doCancel(); +}; + +class FTNoIR_ProtocolDll : public Metadata +{ +public: +    QString name() { return QString("mouse emulation"); } +    QIcon icon() { return QIcon(":/images/mouse.png"); } +}; diff --git a/proto-mouse/ftnoir_protocol_mouse_dialog.cpp b/proto-mouse/ftnoir_protocol_mouse_dialog.cpp new file mode 100644 index 00000000..bb5fe3b8 --- /dev/null +++ b/proto-mouse/ftnoir_protocol_mouse_dialog.cpp @@ -0,0 +1,24 @@ +#include "ftnoir_protocol_mouse.h" +#include "opentrack/plugin-api.hpp" + +MOUSEControls::MOUSEControls() +{ +    ui.setupUi( this ); + +    connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(doOK())); +    connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(doCancel())); + +    tie_setting(s.Mouse_X, ui.cbxSelectMouse_X); +    tie_setting(s.Mouse_Y, ui.cbxSelectMouse_Y); +} + +void MOUSEControls::doOK() { +    s.b->save(); +    this->close(); +} + +void MOUSEControls::doCancel() { +    s.b->reload(); +    this->close(); +} + diff --git a/proto-mouse/images/mouse.png b/proto-mouse/images/mouse.pngBinary files differ new file mode 100644 index 00000000..c6f9ea26 --- /dev/null +++ b/proto-mouse/images/mouse.png diff --git a/proto-mouse/win32-mouse-protocol.qrc b/proto-mouse/win32-mouse-protocol.qrc new file mode 100644 index 00000000..ed6a71be --- /dev/null +++ b/proto-mouse/win32-mouse-protocol.qrc @@ -0,0 +1,5 @@ +<RCC> +    <qresource prefix="/"> +        <file>images/mouse.png</file> +    </qresource> +</RCC> | 
