From ab77b86507c65c56ec8aeda181bb43cc96cebc18 Mon Sep 17 00:00:00 2001 From: Wim Vriend Date: Fri, 19 Nov 2010 14:55:47 +0000 Subject: Donation buttons and layout improved git-svn-id: svn+ssh://svn.code.sf.net/p/facetracknoir/code@28 19e81ba0-9b1a-49c3-bd6c-561e1906d5fb --- FaceTrackNoIR/FGServer.cpp | 188 +++- FaceTrackNoIR/FGServer.h | 34 +- FaceTrackNoIR/FaceTrackNoIR.cpp | 25 +- FaceTrackNoIR/FaceTrackNoIR.h | 9 +- FaceTrackNoIR/FaceTrackNoIR.qrc | 1 + FaceTrackNoIR/FaceTrackNoIR.ui | 1052 ++++++++++++----------- FaceTrackNoIR/FaceTrackNoIR.vcproj | 30 + FaceTrackNoIR/UIElements/aboutFaceTrackNoIR.png | Bin 20682 -> 28784 bytes 8 files changed, 825 insertions(+), 514 deletions(-) (limited to 'FaceTrackNoIR') diff --git a/FaceTrackNoIR/FGServer.cpp b/FaceTrackNoIR/FGServer.cpp index ef6987aa..6b96d249 100644 --- a/FaceTrackNoIR/FGServer.cpp +++ b/FaceTrackNoIR/FGServer.cpp @@ -40,6 +40,8 @@ FGServer::FGServer( Tracker *parent ) { // Create events m_StopThread = CreateEvent(0, TRUE, FALSE, 0); m_WaitThread = CreateEvent(0, TRUE, FALSE, 0); + + loadSettings(); } // @@ -87,8 +89,8 @@ int no_bytes; // //! [1] - no_bytes = outSocket->writeDatagram((const char *) &TestData, sizeof( TestData ), - QHostAddress::LocalHost, 5550); +// no_bytes = outSocket->writeDatagram((const char *) &TestData, sizeof( TestData ), QHostAddress::LocalHost, 5550); + no_bytes = outSocket->writeDatagram((const char *) &TestData, sizeof( TestData ), destIP, destPort); if ( no_bytes > 0) { // qDebug() << "FGServer::writePendingDatagrams says: bytes send =" << no_bytes << sizeof( double ); } @@ -116,7 +118,8 @@ void FGServer::run() { outSocket = new QUdpSocket(); // Connect the inSocket to the port, to receive readyRead messages - inSocket->bind(QHostAddress::LocalHost, 5551); +// inSocket->bind(QHostAddress::LocalHost, 5551); + inSocket->bind(QHostAddress::Any, destPort+1); // Connect the inSocket to the member-function, to read FlightGear commands connect(inSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()), Qt::DirectConnection); @@ -135,4 +138,183 @@ void FGServer::terminate() { delete outSocket; } +// +// Load the current Settings from the currently 'active' INI-file. +// +void FGServer::loadSettings() { + + QSettings settings("Abbequerque Inc.", "FaceTrackNoIR"); // Registry settings (in HK_USER) + + QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString(); + QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file) + + iniFile.beginGroup ( "FG" ); + + bool blnLocalPC = iniFile.value ( "LocalPCOnly", 1 ).toBool(); + if (blnLocalPC) { + destIP = QHostAddress::LocalHost; + } + else { + QString destAddr = iniFile.value ( "IP-1", 192 ).toString() + "." + iniFile.value ( "IP-2", 168 ).toString() + "." + iniFile.value ( "IP-3", 2 ).toString() + "." + iniFile.value ( "IP-4", 1 ).toString(); + destIP = QHostAddress( destAddr ); + } + destPort = iniFile.value ( "PortNumber", 5550 ).toInt(); + + iniFile.endGroup (); +} + +// +// Constructor for server-settings-dialog +// +FGControls::FGControls( QWidget *parent, Qt::WindowFlags f ) : +QWidget( parent , f) +{ + ui.setupUi( this ); + + QPoint offsetpos(100, 100); + this->move(parent->pos() + offsetpos); + + // Connect Qt signals to member-functions + connect(ui.btnOK, SIGNAL(clicked()), this, SLOT(doOK())); + connect(ui.btnCancel, SIGNAL(clicked()), this, SLOT(doCancel())); + connect(ui.chkLocalPC, SIGNAL(stateChanged(int)), this, SLOT(chkLocalPCOnlyChanged())); + connect(ui.spinIPFirstNibble, SIGNAL(valueChanged(int)), this, SLOT(settingChanged())); + connect(ui.spinIPSecondNibble, SIGNAL(valueChanged(int)), this, SLOT(settingChanged())); + connect(ui.spinIPThirdNibble, SIGNAL(valueChanged(int)), this, SLOT(settingChanged())); + connect(ui.spinIPFourthNibble, SIGNAL(valueChanged(int)), this, SLOT(settingChanged())); + connect(ui.spinPortNumber, SIGNAL(valueChanged(int)), this, SLOT(settingChanged())); + + // Load the settings from the current .INI-file + loadSettings(); +} + +// +// Destructor for server-dialog +// +FGControls::~FGControls() { + qDebug() << "~FGControls() says: started"; +} + +// +// OK clicked on server-dialog +// +void FGControls::doOK() { + save(); + this->close(); +} + +// override show event +void FGControls::showEvent ( QShowEvent * event ) { + loadSettings(); +} + +// +// Cancel clicked on server-dialog +// +void FGControls::doCancel() { + // + // Ask if changed Settings should be saved + // + if (settingsDirty) { + int ret = QMessageBox::question ( this, "Settings have changed", "Do you want to save the settings?", QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Discard ); + + qDebug() << "doCancel says: answer =" << ret; + + switch (ret) { + case QMessageBox::Save: + save(); + this->close(); + break; + case QMessageBox::Discard: + this->close(); + break; + case QMessageBox::Cancel: + // Cancel was clicked + break; + default: + // should never be reached + break; + } + } + else { + this->close(); + } +} + +// +// Load the current Settings from the currently 'active' INI-file. +// +void FGControls::loadSettings() { + +// qDebug() << "loadSettings says: Starting "; + QSettings settings("Abbequerque Inc.", "FaceTrackNoIR"); // Registry settings (in HK_USER) + + QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString(); + QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file) + +// qDebug() << "loadSettings says: iniFile = " << currentFile; + + iniFile.beginGroup ( "FG" ); + ui.chkLocalPC->setChecked (iniFile.value ( "LocalPCOnly", 1 ).toBool()); + + ui.spinIPFirstNibble->setValue( iniFile.value ( "IP-1", 192 ).toInt() ); + ui.spinIPSecondNibble->setValue( iniFile.value ( "IP-2", 168 ).toInt() ); + ui.spinIPThirdNibble->setValue( iniFile.value ( "IP-3", 2 ).toInt() ); + ui.spinIPFourthNibble->setValue( iniFile.value ( "IP-4", 1 ).toInt() ); + + ui.spinPortNumber->setValue( iniFile.value ( "PortNumber", 5550 ).toInt() ); + iniFile.endGroup (); + + chkLocalPCOnlyChanged(); + settingsDirty = false; + +} + +// +// Save the current Settings to the currently 'active' INI-file. +// +void FGControls::save() { + + QSettings settings("Abbequerque Inc.", "FaceTrackNoIR"); // Registry settings (in HK_USER) + + QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString(); + QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file) + + iniFile.beginGroup ( "FG" ); + iniFile.setValue ( "LocalPCOnly", ui.chkLocalPC->isChecked() ); + iniFile.setValue ( "IP-1", ui.spinIPFirstNibble->value() ); + iniFile.setValue ( "IP-2", ui.spinIPSecondNibble->value() ); + iniFile.setValue ( "IP-3", ui.spinIPThirdNibble->value() ); + iniFile.setValue ( "IP-4", ui.spinIPFourthNibble->value() ); + iniFile.setValue ( "PortNumber", ui.spinPortNumber->value() ); + iniFile.endGroup (); + + settingsDirty = false; +} + +// +// Handle change of the checkbox. +// +void FGControls::chkLocalPCOnlyChanged() { + + if ( ui.chkLocalPC->isChecked() ) { + ui.spinIPFirstNibble->setValue( 127 ); + ui.spinIPFirstNibble->setEnabled ( false ); + ui.spinIPSecondNibble->setValue( 0 ); + ui.spinIPSecondNibble->setEnabled ( false ); + ui.spinIPThirdNibble->setValue( 0 ); + ui.spinIPThirdNibble->setEnabled ( false ); + ui.spinIPFourthNibble->setValue( 1 ); + ui.spinIPFourthNibble->setEnabled ( false ); + } + else { + ui.spinIPFirstNibble->setEnabled ( true ); + ui.spinIPSecondNibble->setEnabled ( true ); + ui.spinIPThirdNibble->setEnabled ( true ); + ui.spinIPFourthNibble->setEnabled ( true ); + } + + settingsDirty = true; +} + //END diff --git a/FaceTrackNoIR/FGServer.h b/FaceTrackNoIR/FGServer.h index bd849c80..c4d8d516 100644 --- a/FaceTrackNoIR/FGServer.h +++ b/FaceTrackNoIR/FGServer.h @@ -43,6 +43,8 @@ using namespace std; +#include "ui_FTNoIR_FGcontrols.h" + class Tracker; // pre-define parent-class to avoid circular includes class FGServer : public QThread { @@ -72,7 +74,9 @@ private: QUdpSocket *inSocket; // Receive from FligthGear QUdpSocket *outSocket; // Send to FligthGear qint32 fg_cmd; // Command from FlightGear - + QHostAddress destIP; // Destination IP-address + int destPort; // Destination port-number + /** member variables for saving the head pose **/ float virtPosX; float virtPosY; @@ -82,6 +86,8 @@ private: float virtRotY; float virtRotZ; + void loadSettings(); + public: void setVirtRotX(float rot) { virtRotX = rot; } void setVirtRotY(float rot) { virtRotY = rot; } @@ -92,6 +98,32 @@ public: }; +// Widget that has controls for FG server-settings. +class FGControls: public QWidget, public Ui::UICFGControls +{ + Q_OBJECT +public: + + explicit FGControls( QWidget *parent=0, Qt::WindowFlags f=0 ); + virtual ~FGControls(); + void showEvent ( QShowEvent * event ); + +private: + Ui::UICFGControls ui; + void loadSettings(); + void save(); + + /** helper **/ + bool settingsDirty; + +private slots: + void doOK(); + void doCancel(); + void chkLocalPCOnlyChanged(); + void settingChanged() { settingsDirty = true; }; +}; + + #endif//INCLUDED_FGSERVER_H //END diff --git a/FaceTrackNoIR/FaceTrackNoIR.cpp b/FaceTrackNoIR/FaceTrackNoIR.cpp index 3a259cba..cbed2ffd 100644 --- a/FaceTrackNoIR/FaceTrackNoIR.cpp +++ b/FaceTrackNoIR/FaceTrackNoIR.cpp @@ -27,6 +27,7 @@ #include "PPJoyServer.h" #include "FSUIPCServer.h" #include "FTIRServer.h" +#include "FGServer.h" using namespace sm::faceapi; using namespace sm::faceapi::qt; @@ -85,6 +86,9 @@ void FaceTrackNoIR::setupFaceTrackNoIR() { connect(ui.actionCurve_Configuration, SIGNAL(triggered()), this, SLOT(showCurveConfiguration())); connect(ui.btnEditCurves, SIGNAL(clicked()), this, SLOT(showCurveConfiguration())); + connect(ui.actionSupport, SIGNAL(triggered()), this, SLOT(openurl_support())); + connect(ui.actionYour_Support, SIGNAL(triggered()), this, SLOT(openurl_donation())); + connect(ui.btnDonate, SIGNAL(clicked()), this, SLOT(openurl_donation())); connect(ui.actionAbout, SIGNAL(triggered()), this, SLOT(about())); connect(ui.actionVideoWidget, SIGNAL(triggered()), this, SLOT(showVideoWidget())); @@ -359,7 +363,7 @@ void FaceTrackNoIR::saveAs() save(); // Put the filename in the window-title - setWindowTitle ( "FaceTrackNoIR (1.4) - " + newFileInfo.fileName() ); + setWindowTitle ( "FaceTrackNoIR (1.5) - " + newFileInfo.fileName() ); } } @@ -402,10 +406,21 @@ void FaceTrackNoIR::loadSettings() { // Put the filename in the window-title QFileInfo pathInfo ( currentFile ); - setWindowTitle ( "FaceTrackNoIR (1.4) - " + pathInfo.fileName() ); + setWindowTitle ( "FaceTrackNoIR (1.5) - " + pathInfo.fileName() ); } +/** show support page in web-browser **/ +void FaceTrackNoIR::openurl_support() { + QDesktopServices::openUrl(QUrl("http://facetracknoir.sourceforge.net/manual/manual.htm", QUrl::TolerantMode)); +} + +/** show donations page in web-browser **/ +void FaceTrackNoIR::openurl_donation() { + QDesktopServices::openUrl(QUrl("http://facetracknoir.sourceforge.net/information_links/donate.htm", QUrl::TolerantMode)); +} + + /** show about dialog **/ void FaceTrackNoIR::about() { aboutDialog.move(this->width()/2-135, @@ -669,7 +684,6 @@ void FaceTrackNoIR::showServerControls() { // Show the appropriate Protocol-server Settings switch (ui.iconcomboBox->currentIndex()) { case FREE_TRACK: - case FLIGHTGEAR: case FTNOIR: case SIMCONNECT: break; @@ -682,6 +696,9 @@ void FaceTrackNoIR::showServerControls() { case TRACKIR: _server_controls = new FTIRControls( this, Qt::Dialog ); break; + case FLIGHTGEAR: + _server_controls = new FGControls( this, Qt::Dialog ); + break; default: break; } @@ -821,7 +838,6 @@ void FaceTrackNoIR::setIcon(int index) // Enable/disable Protocol-server Settings switch (ui.iconcomboBox->currentIndex()) { case FREE_TRACK: - case FLIGHTGEAR: case FTNOIR: case SIMCONNECT: ui.btnShowServerControls->hide(); @@ -829,6 +845,7 @@ void FaceTrackNoIR::setIcon(int index) case PPJOY: case FSUIPC: case TRACKIR: + case FLIGHTGEAR: ui.btnShowServerControls->show(); ui.btnShowServerControls->setEnabled ( true ); break; diff --git a/FaceTrackNoIR/FaceTrackNoIR.h b/FaceTrackNoIR/FaceTrackNoIR.h index 923517a4..e4382cd6 100644 --- a/FaceTrackNoIR/FaceTrackNoIR.h +++ b/FaceTrackNoIR/FaceTrackNoIR.h @@ -33,6 +33,7 @@ #include #include #include +#include #include "ui_FaceTrackNoIR.h" #include "ui_FTNoIR_KeyboardShortcuts.h" @@ -99,12 +100,17 @@ private: void setupFaceTrackNoIR(); private slots: - //file + //file menu void open(); void save(); void saveAs(); void exit(); + //about menu + void openurl_support(); + void openurl_donation(); + void about(); + void setIcon(int index); void iconActivated(QSystemTrayIcon::ActivationReason reason); void trackingSourceSelected(int index); @@ -140,7 +146,6 @@ private: void startTracker(); void stopTracker(); - void about(); }; // Widget that has controls for FaceTrackNoIR Preferences. diff --git a/FaceTrackNoIR/FaceTrackNoIR.qrc b/FaceTrackNoIR/FaceTrackNoIR.qrc index 89899a37..1093f7ec 100644 --- a/FaceTrackNoIR/FaceTrackNoIR.qrc +++ b/FaceTrackNoIR/FaceTrackNoIR.qrc @@ -1,5 +1,6 @@ + UIElements/Donate.png UIElements/Curves.png images/rotation_DOFs.png images/translation_DOFs.png diff --git a/FaceTrackNoIR/FaceTrackNoIR.ui b/FaceTrackNoIR/FaceTrackNoIR.ui index 74201bb0..d723c0df 100644 --- a/FaceTrackNoIR/FaceTrackNoIR.ui +++ b/FaceTrackNoIR/FaceTrackNoIR.ui @@ -789,184 +789,9 @@ color:#000; - - - - - - 200 - 120 - - - - - - - Tracker Source - - - - - 10 - 20 - 161 - 22 - - - - - - - -1 - - - 3 - - - - - false - - - - 10 - 80 - 161 - 23 - - - - Change tracker settings - - - - - - Settings - - - - - - 10 - 50 - 75 - 23 - - - - Start the Tracker - - - - - - Start - - - - - false - - - - 96 - 50 - 75 - 23 - - - - Stop the Tracker - - - - - - Stop - - - - - - - - - 190 - 100 - - - - - - - Game protocol - - - - - 10 - 20 - 151 - 22 - - - - - - - -1 - - - 6 - - - - - true - - - - 10 - 80 - 151 - 23 - - - - Change game protocol settings - - - - - - Settings - - - - - - - - Edit the Curve settings - - - Curves - - - - :/UIElements/Curves.png:/UIElements/Curves.png - - - - 150 - 32 - - - - - - + + + Qt::Horizontal @@ -978,124 +803,246 @@ color:#000; - - - - - - Qt::Vertical - - - - 20 - 50 - - - - - - - - + + Qt::Horizontal - 0 + 40 20 - - - - - 667 - 67 - + + + + 10 - - - 667 - 67 - - - - true - - - background: url("UIElements/bubble_1_small.png") no-repeat; -opacity:100; + + 10 - - - 0 - - - 15 - - - 10 - - - 10 - - - 10 - - - - - - 0 - 30 - + + + + + 200 + 120 + + + + + + + Tracker Source + + + + + 10 + 20 + 161 + 22 + - - - 16777215 - 30 - + + + + + -1 + + + 3 + + + + + false + + + + 10 + 80 + 161 + 23 + + + + Change tracker settings - color:#ccc; -background:none; + - Camera Name + Settings - - - + + + + 10 + 50 + 75 + 23 + + + + Start the Tracker + + + + + + Start + + + + + false + + + + 96 + 50 + 75 + 23 + + + + Stop the Tracker + + + + + + Stop + + + + + + + + + 190 + 100 + + + + + + + Game protocol + + + + + 10 + 20 + 151 + 22 + + + + + + + -1 + + + 6 + + + + + true + + + + 10 + 80 + 151 + 23 + + + + Change game protocol settings + + + + + + Settings + + + + + + + + Edit the Curve settings + + + Curves + + + + :/UIElements/Curves.png:/UIElements/Curves.png + + + + 150 + 32 + + + + + - - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding + + + + 10 - - - 15 - 20 - - - + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Click here to Donate! + + + + :/UIElements/Donate.png:/UIElements/Donate.png + + + + 18 + 18 + + + + + - + - 667 + 620 115 @@ -1217,10 +1164,10 @@ background:none; 1 - 120 + 50 - 10 + 5 10 @@ -1245,7 +1192,7 @@ background:none; background:none; - 120 + 50 10 @@ -1271,21 +1218,9 @@ background:none; - - - - - - 25 - 0 - - - - - 150 - 16777215 - - + + + Qt::RightToLeft @@ -1294,12 +1229,12 @@ background:none; background:none; - Yaw + EWMA - - + + 25 @@ -1320,11 +1255,11 @@ background:none; background:none; - X + Yaw - + @@ -1350,8 +1285,8 @@ background:none; - - + + 25 @@ -1372,15 +1307,15 @@ background:none; background:none; - Y + Roll - - + + - 25 + 110 0 @@ -1390,132 +1325,158 @@ background:none; 16777215 - - Qt::RightToLeft - color:#ccc; background:none; - Roll + Red.factor (100 = 1) - - + + - 25 - 0 + 45 + 15 - - - 150 - 16777215 - + + 100 - - Qt::RightToLeft + + 10 - - color:#ccc; -background:none; + + 70 - - Z + + Qt::Horizontal + + + QSlider::NoTicks - - - - background:none; + + + + + 45 + 15 + - - + + 100 + + + 10 + + + 70 + + + Qt::Horizontal + + + QSlider::NoTicks - - + + - 0 - 0 + 45 + 15 - - - 30 - 16777215 - + + 100 - - color:#ccc; -background:none; + + 10 - - Invert + + 70 - - - - - - background:none; + + Qt::Horizontal - - + + QSlider::NoTicks - - + + + + + 50 + 22 + + background:none; - - + + 100 + + + 5 + + + 70 - - + + + + + 50 + 22 + + background:none; - - + + 100 + + + 5 + + + 70 - - + + - 0 - 0 - - - - - 30 - 16777215 + 50 + 22 - color:#ccc; -background:none; + background:none; - - Invert + + 100 + + + 5 + + + 70 - - + + background:none; @@ -1524,8 +1485,8 @@ background:none; - - + + background:none; @@ -1534,158 +1495,149 @@ background:none; - - - - - 45 - 15 - - - - 100 - - - 10 - - - 70 - - - Qt::Horizontal + + + + background:none; - - QSlider::NoTicks + + - - + + - 45 - 15 + 0 + 0 - - 100 - - - 10 - - - 70 + + + 30 + 16777215 + - - Qt::Horizontal + + color:#ccc; +background:none; - - QSlider::NoTicks + + Invert - - + + + + + + Qt::Vertical + + + + + + + - 45 - 15 + 25 + 0 - - 100 - - - 10 + + + 150 + 16777215 + - - 70 + + Qt::RightToLeft - - Qt::Horizontal + + color:#ccc; +background:none; - - QSlider::NoTicks + + X - - + + - 50 - 22 + 25 + 0 - - background:none; + + + 150 + 16777215 + - - 100 + + Qt::RightToLeft - - 5 + + color:#ccc; +background:none; - - 70 + + Y - - + + - 50 - 22 + 25 + 0 - - background:none; + + + 150 + 16777215 + - - 100 + + Qt::RightToLeft - - 5 + + color:#ccc; +background:none; - - 70 + + Z - - - - - 50 - 22 - - + + background:none; - - 100 - - - 5 - - - 70 + + - + - 110 + 0 0 - 150 + 30 16777215 @@ -1694,11 +1646,31 @@ background:none; background:none; - Red.factor (100 = 1) + Invert + + + + + + + background:none; + + + + + + + + + + background:none; + + + - + @@ -1723,7 +1695,7 @@ background:none; - + @@ -1748,7 +1720,7 @@ background:none; - + @@ -1773,7 +1745,7 @@ background:none; - + @@ -1795,7 +1767,7 @@ background:none; - + @@ -1817,7 +1789,7 @@ background:none; - + @@ -1839,7 +1811,7 @@ background:none; - + @@ -1862,21 +1834,7 @@ background:none; - - - - Qt::RightToLeft - - - color:#ccc; -background:none; - - - EWMA - - - - + Qt::RightToLeft @@ -1893,7 +1851,7 @@ background:none; - + Qt::Horizontal @@ -1902,7 +1860,7 @@ background:none; - 30 + 5 20 @@ -1911,6 +1869,82 @@ background:none; + + + + + 620 + 67 + + + + + 667 + 67 + + + + true + + + background: url("UIElements/bubble_1_small.png") no-repeat; +opacity:100; + + + + 0 + + + 15 + + + 10 + + + 10 + + + 10 + + + + + + 0 + 30 + + + + + 600 + 30 + + + + color:#ccc; +background:none; + + + Camera Name + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -1942,15 +1976,6 @@ background:none; - - - true - - - About - - - View @@ -1967,10 +1992,19 @@ background:none; + + + Help + + + + + + - + @@ -2121,6 +2155,16 @@ background:none; Curve Configuration + + + Support + + + + + Your Support + + diff --git a/FaceTrackNoIR/FaceTrackNoIR.vcproj b/FaceTrackNoIR/FaceTrackNoIR.vcproj index 417ebb20..625cda64 100644 --- a/FaceTrackNoIR/FaceTrackNoIR.vcproj +++ b/FaceTrackNoIR/FaceTrackNoIR.vcproj @@ -551,6 +551,32 @@ /> + + + + + + + + @@ -736,6 +762,10 @@ RelativePath=".\GeneratedFiles\ui_FTNoIR_Curves.h" > + + diff --git a/FaceTrackNoIR/UIElements/aboutFaceTrackNoIR.png b/FaceTrackNoIR/UIElements/aboutFaceTrackNoIR.png index 5950d785..6b0e0d68 100644 Binary files a/FaceTrackNoIR/UIElements/aboutFaceTrackNoIR.png and b/FaceTrackNoIR/UIElements/aboutFaceTrackNoIR.png differ -- cgit v1.2.3