summaryrefslogtreecommitdiffhomepage
path: root/tracker-tobii-eyex
diff options
context:
space:
mode:
Diffstat (limited to 'tracker-tobii-eyex')
-rw-r--r--tracker-tobii-eyex/CMakeLists.txt24
-rw-r--r--tracker-tobii-eyex/images/tobii-eyex-logo.pngbin402 -> 0 bytes
-rw-r--r--tracker-tobii-eyex/lang/nl_NL.ts56
-rw-r--r--tracker-tobii-eyex/lang/ru_RU.ts56
-rw-r--r--tracker-tobii-eyex/lang/stub.ts56
-rw-r--r--tracker-tobii-eyex/lang/zh_CN.ts56
-rw-r--r--tracker-tobii-eyex/tobii-eyex-dialog.cpp25
-rw-r--r--tracker-tobii-eyex/tobii-eyex-dialog.hpp21
-rw-r--r--tracker-tobii-eyex/tobii-eyex-dialog.ui484
-rw-r--r--tracker-tobii-eyex/tobii-eyex-res.qrc5
-rw-r--r--tracker-tobii-eyex/tobii-eyex.cpp312
-rw-r--r--tracker-tobii-eyex/tobii-eyex.hpp87
-rw-r--r--tracker-tobii-eyex/tobii-settings.hpp36
13 files changed, 0 insertions, 1218 deletions
diff --git a/tracker-tobii-eyex/CMakeLists.txt b/tracker-tobii-eyex/CMakeLists.txt
deleted file mode 100644
index eead67bf..00000000
--- a/tracker-tobii-eyex/CMakeLists.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-if(WIN32)
- set(SDK_TOBII_EYEX "" CACHE PATH "")
- if(SDK_TOBII_EYEX)
- otr_module(tracker-tobii)
- set(tobii-libdir ${SDK_TOBII_EYEX}/lib/x86/)
- set(tobii-dll "${tobii-libdir}/Tobii.EyeX.Client.dll")
- # we only care about the .lib for MSVC++ build anyway
- target_link_libraries(opentrack-tracker-tobii "${tobii-libdir}/Tobii.EyeX.Client.lib")
- # we only ever use the C headers due to Microsoft CRT ABI incompatibility with GNU
- target_include_directories(opentrack-tracker-tobii SYSTEM PUBLIC "${SDK_TOBII_EYEX}/include/eyex")
-
- install(FILES "${tobii-dll}" DESTINATION "${opentrack-hier-pfx}" PERMISSIONS ${opentrack-perms-exec})
- if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
- file(TO_CMAKE_PATH "$ENV{SystemRoot}" sysroot)
- if (IS_DIRECTORY "${sysroot}/SysWOW64")
- set(src "${sysroot}/SysWOW64")
- else()
- set(src "${sysroot}/System32")
- endif()
- install(FILES "${src}/msvcp110.dll" DESTINATION ${opentrack-hier-pfx} PERMISSIONS ${opentrack-perms-exec})
- install(FILES "${src}/msvcr110.dll" DESTINATION ${opentrack-hier-pfx} PERMISSIONS ${opentrack-perms-exec})
- endif()
- endif()
-endif()
diff --git a/tracker-tobii-eyex/images/tobii-eyex-logo.png b/tracker-tobii-eyex/images/tobii-eyex-logo.png
deleted file mode 100644
index e01bc1ae..00000000
--- a/tracker-tobii-eyex/images/tobii-eyex-logo.png
+++ /dev/null
Binary files differ
diff --git a/tracker-tobii-eyex/lang/nl_NL.ts b/tracker-tobii-eyex/lang/nl_NL.ts
deleted file mode 100644
index f58d6213..00000000
--- a/tracker-tobii-eyex/lang/nl_NL.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="nl_NL">
-<context>
- <name>tobii_eyex_dialog_widgets</name>
- <message>
- <source>Tracker options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tracking settings</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Accumulative mode shifts the view toward a target that may be offscreen then fixes upon it.
-On the other hand, the snap mode allows for a quick glance outside the field of vision.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Accumulative mode settings</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Screen edge length</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Max yaw</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Max pitch</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Position output</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Enabled</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Snap mode settings</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tracking mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Speed</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/tracker-tobii-eyex/lang/ru_RU.ts b/tracker-tobii-eyex/lang/ru_RU.ts
deleted file mode 100644
index 844cb931..00000000
--- a/tracker-tobii-eyex/lang/ru_RU.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="ru_RU">
-<context>
- <name>tobii_eyex_dialog_widgets</name>
- <message>
- <source>Tracker options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tracking settings</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Accumulative mode shifts the view toward a target that may be offscreen then fixes upon it.
-On the other hand, the snap mode allows for a quick glance outside the field of vision.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Accumulative mode settings</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Screen edge length</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Max yaw</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Max pitch</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Position output</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Enabled</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Snap mode settings</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tracking mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Speed</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/tracker-tobii-eyex/lang/stub.ts b/tracker-tobii-eyex/lang/stub.ts
deleted file mode 100644
index a8702a56..00000000
--- a/tracker-tobii-eyex/lang/stub.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1">
-<context>
- <name>tobii_eyex_dialog_widgets</name>
- <message>
- <source>Tracker options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tracking settings</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Accumulative mode shifts the view toward a target that may be offscreen then fixes upon it.
-On the other hand, the snap mode allows for a quick glance outside the field of vision.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Accumulative mode settings</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Screen edge length</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Max yaw</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Max pitch</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Position output</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Enabled</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Snap mode settings</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tracking mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Speed</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/tracker-tobii-eyex/lang/zh_CN.ts b/tracker-tobii-eyex/lang/zh_CN.ts
deleted file mode 100644
index 57899430..00000000
--- a/tracker-tobii-eyex/lang/zh_CN.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1">
-<context>
- <name>tobii_eyex_dialog_widgets</name>
- <message>
- <source>Tracker options</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tracking settings</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Accumulative mode shifts the view toward a target that may be offscreen then fixes upon it.
-On the other hand, the snap mode allows for a quick glance outside the field of vision.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tracking mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Accumulative mode settings</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Screen edge length</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Speed</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Max yaw</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Max pitch</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Position output</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Enabled</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Snap mode settings</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/tracker-tobii-eyex/tobii-eyex-dialog.cpp b/tracker-tobii-eyex/tobii-eyex-dialog.cpp
deleted file mode 100644
index 807542e1..00000000
--- a/tracker-tobii-eyex/tobii-eyex-dialog.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#include "tobii-eyex-dialog.hpp"
-
-tobii_eyex_dialog::tobii_eyex_dialog()
-{
- ui.setupUi(this);
-
- connect(ui.buttonBox, &QDialogButtonBox::accepted, this, &tobii_eyex_dialog::do_ok);
- connect(ui.buttonBox, &QDialogButtonBox::rejected, this, &tobii_eyex_dialog::do_cancel);
-
- ui.tracking_mode->addItem("Snap", tobii_snap);
- ui.tracking_mode->addItem("Accumulative", tobii_acc);
-
- tie_setting(s.mode, ui.tracking_mode);
-}
-
-void tobii_eyex_dialog::do_ok()
-{
- s.b->save();
- close();
-}
-
-void tobii_eyex_dialog::do_cancel()
-{
- close();
-}
diff --git a/tracker-tobii-eyex/tobii-eyex-dialog.hpp b/tracker-tobii-eyex/tobii-eyex-dialog.hpp
deleted file mode 100644
index 67cab885..00000000
--- a/tracker-tobii-eyex/tobii-eyex-dialog.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-#pragma once
-
-#include "tobii-settings.hpp"
-
-#include "api/plugin-api.hpp"
-#include "ui_tobii-eyex-dialog.h"
-#include <QObject>
-
-class tobii_eyex_dialog final : public ITrackerDialog
-{
- Q_OBJECT
- Ui::tobii_eyex_dialog_widgets ui;
- settings s;
-private slots:
- void do_ok();
- void do_cancel();
-public:
- tobii_eyex_dialog();
- void register_tracker(ITracker*) override {}
- void unregister_tracker() override {}
-};
diff --git a/tracker-tobii-eyex/tobii-eyex-dialog.ui b/tracker-tobii-eyex/tobii-eyex-dialog.ui
deleted file mode 100644
index a6aecafb..00000000
--- a/tracker-tobii-eyex/tobii-eyex-dialog.ui
+++ /dev/null
@@ -1,484 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>tobii_eyex_dialog_widgets</class>
- <widget class="QWidget" name="tobii_eyex_dialog_widgets">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>659</width>
- <height>471</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Tracker options</string>
- </property>
- <property name="windowIcon">
- <iconset resource="tobii-eyex-res.qrc">
- <normaloff>:/images/tobii-eyex-logo.png</normaloff>:/images/tobii-eyex-logo.png</iconset>
- </property>
- <layout class="QGridLayout" name="gridLayout_4">
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <item row="0" column="0">
- <widget class="QGroupBox" name="groupBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Tracking settings</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <widget class="QLabel" name="label_2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>617</width>
- <height>0</height>
- </size>
- </property>
- <property name="text">
- <string>Accumulative mode shifts the view toward a target that may be offscreen then fixes upon it.
-On the other hand, the snap mode allows for a quick glance outside the field of vision.</string>
- </property>
- <property name="textFormat">
- <enum>Qt::PlainText</enum>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QFrame" name="frame">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <property name="horizontalSpacing">
- <number>9</number>
- </property>
- <property name="verticalSpacing">
- <number>4</number>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Tracking mode</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QComboBox" name="tracking_mode">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>10</width>
- <height>0</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QGroupBox" name="groupBox_2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Accumulative mode settings</string>
- </property>
- <layout class="QGridLayout" name="gridLayout_2">
- <item row="0" column="0">
- <widget class="QLabel" name="label_3">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Screen edge length</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QSlider" name="acc_inv_deadzone_slider">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Maximum">
- <horstretch>9</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>20</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <widget class="QLabel" name="acc_inv_deadzone_label">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
- <horstretch>10</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_4">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Speed</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_6">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Max yaw</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QSlider" name="acc_speed_slider">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Maximum">
- <horstretch>9</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QLabel" name="label_7">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Max pitch</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QComboBox" name="acc_max_yaw">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <widget class="QComboBox" name="acc_max_pitch">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_11">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Position output</string>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <widget class="QCheckBox" name="acc_pos_output">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Enabled</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QGroupBox" name="groupBox_3">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Snap mode settings</string>
- </property>
- <layout class="QGridLayout" name="gridLayout_3">
- <item row="2" column="1" rowspan="2">
- <widget class="QComboBox" name="snap_max_yaw">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item row="3" column="0" rowspan="2">
- <widget class="QLabel" name="label_10">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Max pitch</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_9">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Max yaw</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_8">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Speed</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QSlider" name="snap_inv_deazone_slider">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Maximum">
- <horstretch>8</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>20</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <widget class="QComboBox" name="snap_max_pitch">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <widget class="QLabel" name="snap_inv_deadzone_label">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>10</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QSlider" name="snap_speed_slider">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Maximum">
- <horstretch>8</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item row="0" column="0">
- <widget class="QLabel" name="label_5">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Screen edge length</string>
- </property>
- </widget>
- </item>
- <item row="5" column="1">
- <widget class="QCheckBox" name="snap_pos_output">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Enabled</string>
- </property>
- </widget>
- </item>
- <item row="5" column="0">
- <widget class="QLabel" name="label_12">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Position output</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <resources>
- <include location="tobii-eyex-res.qrc"/>
- </resources>
- <connections/>
-</ui>
diff --git a/tracker-tobii-eyex/tobii-eyex-res.qrc b/tracker-tobii-eyex/tobii-eyex-res.qrc
deleted file mode 100644
index e3395df9..00000000
--- a/tracker-tobii-eyex/tobii-eyex-res.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>images/tobii-eyex-logo.png</file>
- </qresource>
-</RCC>
diff --git a/tracker-tobii-eyex/tobii-eyex.cpp b/tracker-tobii-eyex/tobii-eyex.cpp
deleted file mode 100644
index a559c8dd..00000000
--- a/tracker-tobii-eyex/tobii-eyex.cpp
+++ /dev/null
@@ -1,312 +0,0 @@
-#include "tobii-eyex.hpp"
-#include "compat/math-imports.hpp"
-
-#include <cstdlib>
-#include <cstdio>
-
-#include <QDebug>
-#include <QMutexLocker>
-#include <QMessageBox>
-
-//#define TOBII_EYEX_DEBUG_PRINTF
-#define TOBII_EYEX_VERBOSE_PRINTF
-
-#ifdef TOBII_EYEX_VERBOSE_PRINTF
-# define dbg_verbose(msg) (qDebug() << "tobii-eyex:" << (msg))
-#else
-# define dbg_verbose(msg) (QMessageLogger().noDebug() << (msg))
-#endif
-
-#ifdef TOBII_EYEX_DEBUG_PRINTF
-# define dbg_debug(msg) (qDebug() << "tobii-eyex:" << (msg))
-#else
-# define dbg_debug(msg) (QMessageLogger().noDebug() << (msg))
-#endif
-
-#define dbg_notice(msg) (qDebug() << "tobii-eyex:" << (msg))
-
-std::atomic_flag tobii_eyex_tracker::atexit_done = ATOMIC_FLAG_INIT;
-
-static inline tobii_eyex_tracker& to_self(TX_USERPARAM param)
-{
- return *reinterpret_cast<tobii_eyex_tracker*>(param);
-}
-
-tobii_eyex_tracker::tobii_eyex_tracker() :
- dev_ctx(TX_EMPTY_HANDLE),
- conn_state_changed_ticket(TX_INVALID_TICKET),
- event_handler_ticket(TX_INVALID_TICKET),
- state_snapshot(TX_EMPTY_HANDLE),
- display_state(TX_EMPTY_HANDLE),
- yaw(0),
- pitch(0),
- do_center(false)
-{
-}
-
-void tobii_eyex_tracker::call_tx_deinit()
-{
- dbg_notice("uninitialize in atexit at _fini time");
- (void) txUninitializeEyeX();
-}
-
-tobii_eyex_tracker::~tobii_eyex_tracker()
-{
- dbg_verbose("dtor");
-
- (void) txDisableConnection(dev_ctx);
- (void) txReleaseObject(&state_snapshot);
-
- bool status = true;
- status &= txShutdownContext(dev_ctx, TX_CLEANUPTIMEOUT_FORCEIMMEDIATE, TX_FALSE) == TX_RESULT_OK;
- status &= txReleaseContext(&dev_ctx) == TX_RESULT_OK;
-
- // the API cleanup function needs to be called exactly once over image lifetime.
- // client software communicates with a service and a desktop program.
- // API is ambiguous as to what happens if the image doesn't call it or crashes.
- if (!atexit_done.test_and_set())
- std::atexit(call_tx_deinit);
-
- if (!status)
- dbg_notice("tobii-eyex: can't shutdown properly");
-}
-
-bool tobii_eyex_tracker::register_state_snapshot(TX_CONTEXTHANDLE dev_ctx, TX_HANDLE* state_snapshot_ptr)
-{
- TX_HANDLE handle = TX_EMPTY_HANDLE;
- TX_GAZEPOINTDATAPARAMS params = { TX_GAZEPOINTDATAMODE_LIGHTLYFILTERED };
-
- bool status = true;
-
- status &= txCreateGlobalInteractorSnapshot(dev_ctx, client_id, state_snapshot_ptr, &handle) == TX_RESULT_OK;
- status &= txCreateGazePointDataBehavior(handle, &params) == TX_RESULT_OK;
-
- (void) txReleaseObject(&handle);
-
- return status;
-}
-
-void tobii_eyex_tracker::process_display_state(TX_HANDLE display_state_handle)
-{
- TX_SIZE2 screen_res;
-
- if (txGetStateValueAsSize2(display_state_handle, TX_STATEPATH_EYETRACKINGSCREENBOUNDS, &screen_res) == TX_RESULT_OK)
- {
- dbg_verbose("got display resolution") << screen_res.Width << screen_res.Height;
-
- QMutexLocker l(&global_state_mtx);
-
- dev_state.display_res_x = screen_res.Width;
- dev_state.display_res_y = screen_res.Height;
- }
- else
- dbg_notice("can't get display resolution");
-}
-
-void tobii_eyex_tracker::display_state_handler(TX_CONSTHANDLE async_data_handle, TX_USERPARAM param)
-{
- tobii_eyex_tracker& self = to_self(param);
-
- TX_RESULT result = TX_RESULT_UNKNOWN;
- TX_HANDLE state = TX_EMPTY_HANDLE;
-
- if (txGetAsyncDataResultCode(async_data_handle, &result) == TX_RESULT_OK &&
- txGetAsyncDataContent(async_data_handle, &state) == TX_RESULT_OK)
- {
- self.process_display_state(state);
- txReleaseObject(&state);
- }
- else
- dbg_notice("error in display state handler");
-}
-
-void tobii_eyex_tracker::snapshot_committed_handler(TX_CONSTHANDLE async_data_handle, TX_USERPARAM)
-{
- TX_RESULT result = TX_RESULT_UNKNOWN;
- txGetAsyncDataResultCode(async_data_handle, &result);
-
- if (!(result == TX_RESULT_OK || result == TX_RESULT_CANCELLED))
- dbg_notice("snapshot bad result code") << result;
-}
-
-void tobii_eyex_tracker::connection_state_change_handler(TX_CONNECTIONSTATE state, TX_USERPARAM param)
-{
- tobii_eyex_tracker& self = to_self(param);
-
- switch (state)
- {
- case TX_CONNECTIONSTATE_CONNECTED:
- {
- bool status = txCommitSnapshotAsync(self.state_snapshot, snapshot_committed_handler, param) == TX_RESULT_OK;
- if (!status)
- dbg_notice("connected but failed to initialize data stream");
- else
- {
- txGetStateAsync(self.dev_ctx, TX_STATEPATH_EYETRACKINGSCREENBOUNDS, display_state_handler, param);
- dbg_notice("connected, data stream ok");
- }
- }
- break;
- case TX_CONNECTIONSTATE_DISCONNECTED:
- dbg_notice("connection state is now disconnected");
- break;
- case TX_CONNECTIONSTATE_TRYINGTOCONNECT:
- dbg_verbose("trying to establish connection");
- break;
- case TX_CONNECTIONSTATE_SERVERVERSIONTOOLOW:
- dbg_notice("installed driver version too low");
- break;
- case TX_CONNECTIONSTATE_SERVERVERSIONTOOHIGH:
- dbg_notice("new driver came up, we need to update sdk");
- break;
- }
-}
-
-void tobii_eyex_tracker::gaze_data_handler(TX_HANDLE gaze_data_handle)
-{
- TX_GAZEPOINTDATAEVENTPARAMS params;
-
- if (txGetGazePointDataEventParams(gaze_data_handle, &params) == TX_RESULT_OK)
- {
- {
- QMutexLocker l(&global_state_mtx);
-
- if (params.Timestamp > dev_state.last_timestamp &&
- dev_state.display_res_x > 0 &&
- // the API allows for events outside screen bounds to e.g. detect looking at keyboard.
- // closer to the screen bounds, the values get less accurate.
- // ignore events outside the screen bounds.
- params.X >= 0 && params.X < dev_state.display_res_x &&
- params.Y >= 0 && params.Y < dev_state.display_res_y)
- {
- dev_state.last_timestamp = params.Timestamp;
- dev_state.px = params.X;
- dev_state.py = params.Y;
-
-#ifdef TOBII_EYEX_DEBUG_PRINTF
- char buf[256] = {0};
- (void) std::sprintf(buf, "gaze data: (%.1f, %.1f)", params.X, params.Y);
- dbg_debug(buf);
-#endif
-
- dev_state.fresh = true;
- }
- }
- }
- else
- {
- dbg_notice("failed to interpret gaze data event packet");
- }
-}
-
-void tobii_eyex_tracker::event_handler(TX_CONSTHANDLE async_data_handle, TX_USERPARAM param)
-{
- tobii_eyex_tracker& self = to_self(param);
-
- TX_HANDLE event_handle = TX_EMPTY_HANDLE;
- TX_HANDLE behavior_handle = TX_EMPTY_HANDLE;
-
- txGetAsyncDataContent(async_data_handle, &event_handle);
-
- if (txGetEventBehavior(event_handle, &behavior_handle, TX_BEHAVIORTYPE_GAZEPOINTDATA) == TX_RESULT_OK)
- {
- self.gaze_data_handler(behavior_handle);
- txReleaseObject(&behavior_handle);
- }
-
- txReleaseObject(&event_handle);
-}
-
-module_status tobii_eyex_tracker::start_tracker(QFrame*)
-{
- bool status = true;
-
- status &= txInitializeEyeX(TX_EYEXCOMPONENTOVERRIDEFLAG_NONE, nullptr, nullptr, nullptr, nullptr) == TX_RESULT_OK;
- status &= txCreateContext(&dev_ctx, TX_FALSE) == TX_RESULT_OK;
- status &= register_state_snapshot(dev_ctx, &state_snapshot);
- status &= txRegisterConnectionStateChangedHandler(dev_ctx, &conn_state_changed_ticket, connection_state_change_handler, reinterpret_cast<TX_USERPARAM>(this)) == TX_RESULT_OK;
- status &= txRegisterEventHandler(dev_ctx, &event_handler_ticket, event_handler, reinterpret_cast<TX_USERPARAM>(this)) == TX_RESULT_OK;
- status &= txEnableConnection(dev_ctx) == TX_RESULT_OK;
-
- if (!status)
- return error(otr_tr("Connection can't be established. device missing?"));
- else
- return status_ok();
-}
-
-tobii_eyex_tracker::num tobii_eyex_tracker::gain(num x)
-{
- return 1;
-}
-
-static inline double signum(double x)
-{
- return !(x < 0) - (x < 0);
-}
-
-void tobii_eyex_tracker::data(double* data)
-{
- TX_REAL px, py, dw, dh, x_, y_;
- bool fresh;
-
- {
- QMutexLocker l(&global_state_mtx);
-
- if (!dev_state.is_valid())
- return;
-
- px = dev_state.px;
- py = dev_state.py;
- dw = dev_state.display_res_x;
- dh = dev_state.display_res_y;
-
- fresh = dev_state.fresh;
- dev_state.fresh = false;
- }
-
- x_ = (px-dw/2.) / (dw/2.);
- y_ = (py-dh/2.) / (dh/2.);
-
- data[TX] = x_ * 50;
- data[TY] = y_ * -50;
-
- if (fresh)
- {
- const double dt = t.elapsed_seconds();
- t.start();
-
- using std::fabs;
-
- constexpr double max_yaw = 45, max_pitch = 30;
- constexpr double c_yaw = 3;
- constexpr double c_pitch = c_yaw * max_pitch / max_yaw;
-
- const double yaw_delta = gain(fabs(x_)) * signum(x_) * c_yaw * dt;
- const double pitch_delta = gain(fabs(y_)) * signum(y_) * c_pitch * dt;
-
- yaw += yaw_delta;
- pitch += pitch_delta;
-
- yaw = clamp(yaw, -max_yaw, max_yaw);
- pitch = clamp(pitch, -max_pitch, max_pitch);
- }
-
- if (do_center)
- {
- do_center = false;
- yaw = 0;
- pitch = 0;
- }
-
- data[Yaw] = yaw;
- data[Pitch] = pitch;
- data[Roll] = 0;
- data[TZ] = 0; // XXX TODO
-
- // tan(x) in 0->.7 is almost linear. we don't need to adjust.
- // .7 is 40 degrees which is already quite a lot from the monitor.
-}
-
-#include "tobii-eyex-dialog.hpp"
-
-OPENTRACK_DECLARE_TRACKER(tobii_eyex_tracker, tobii_eyex_dialog, tobii_eyex_metadata)
diff --git a/tracker-tobii-eyex/tobii-eyex.hpp b/tracker-tobii-eyex/tobii-eyex.hpp
deleted file mode 100644
index 170e74c1..00000000
--- a/tracker-tobii-eyex/tobii-eyex.hpp
+++ /dev/null
@@ -1,87 +0,0 @@
-#pragma once
-
-/* Copyright (c) 2016 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 "tobii-settings.hpp"
-
-#include "api/plugin-api.hpp"
-#include "options/options.hpp"
-using namespace options;
-#include "compat/timer.hpp"
-
-#include <EyeX.h>
-
-#include <functional>
-#include <atomic>
-
-#include <QObject>
-#include <QMutex>
-
-class tobii_eyex_tracker : public ITracker
-{
-public:
- tobii_eyex_tracker();
- ~tobii_eyex_tracker() override;
- module_status start_tracker(QFrame *) override;
- void data(double *data) override;
- bool center() override
- {
- do_center = true;
- return true;
- }
-private:
- static constexpr inline const char* const client_id = "opentrack-tobii-eyex";
-
- static void call_tx_deinit();
-
- static bool register_state_snapshot(TX_CONTEXTHANDLE ctx, TX_HANDLE* state_snapshot_ptr);
- static std::atomic_flag atexit_done;
- static void TX_CALLCONVENTION connection_state_change_handler(TX_CONNECTIONSTATE state, TX_USERPARAM param);
- static void TX_CALLCONVENTION event_handler(TX_CONSTHANDLE async_data_handle, TX_USERPARAM param);
- void gaze_data_handler(TX_HANDLE gaze_data_handle);
- static void TX_CALLCONVENTION snapshot_committed_handler(TX_CONSTHANDLE async_data_handle, TX_USERPARAM param);
- static void TX_CALLCONVENTION display_state_handler(TX_CONSTHANDLE async_data_handle, TX_USERPARAM param);
- void process_display_state(TX_HANDLE display_state_handle);
-
- using num = double;
-
- num gain(num x);
-
- TX_CONTEXTHANDLE dev_ctx;
- TX_TICKET conn_state_changed_ticket;
- TX_TICKET event_handler_ticket;
- TX_HANDLE state_snapshot;
- TX_HANDLE display_state;
-
- QMutex global_state_mtx;
- settings s;
- Timer t;
-
- struct state
- {
- TX_REAL display_res_x, display_res_y;
- TX_REAL px, py;
- TX_REAL last_timestamp;
- bool fresh;
-
- state() : display_res_x(-1), display_res_y(-1), px(-1), py(-1), last_timestamp(0), fresh(false) {}
- bool is_valid() const { return !(display_res_x < 0 || px < 0); }
- } dev_state;
-
- double yaw, pitch;
- std::atomic<bool> do_center;
-};
-
-class tobii_eyex_metadata : public Metadata
-{
-public:
- QString name() { return QString("Tobii EyeX"); }
- QIcon icon() { return QIcon(":/images/tobii-eyex-logo.png"); }
-};
-
diff --git a/tracker-tobii-eyex/tobii-settings.hpp b/tracker-tobii-eyex/tobii-settings.hpp
deleted file mode 100644
index a486306d..00000000
--- a/tracker-tobii-eyex/tobii-settings.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-#pragma once
-
-#include "options/options.hpp"
-using namespace options;
-
-enum tobii_mode
-{
- tobii_snap = 0xf00d,
- tobii_acc = 0xacc,
-};
-
-enum max_yaw
-{
- y10, y15, y20, y30, y45,
-};
-
-enum max_pitch
-{
- p10, p15, p25, p35,
-};
-
-struct settings final : public opts
-{
- value<tobii_mode> mode { b, "mode", tobii_snap };
-
- value<slider_value> snap_speed {b, "snap-speed", slider_value(.1, .05, 1)},
- snap_inv_dz {b, "snap-screen-edge-length", slider_value(.35, .1, .5)};
- value<slider_value> acc_speed {b, "acc-speed", slider_value(.1, .05, 1)},
- acc_dz_len {b, "acc-screen-edge-length", slider_value(.1, .1, 1)};
- value<max_yaw> snap_yaw {b, "snap-max-yaw", y20},
- acc_yaw {b, "acc-max-yaw", y20};
- value<max_pitch> snap_pitch {b, "snap-max-pitch", p15},
- acc_pitch {b, "acc-max-pitch", p15};
-
- settings() : opts("tobii-eyex") {}
-};