Move the push-to-toggle y axis adjustment from the playspace page to a new Accessibility Tools tab, packaged as a new height adjustment tool. Height offset is saved and can be set via slider.
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
#include "AccessibilityTabController.h"
|
||||
#include <QQuickWindow>
|
||||
#include "../overlaycontroller.h"
|
||||
|
||||
// application namespace
|
||||
namespace advsettings {
|
||||
|
||||
void AccessibilityTabController::initStage1() {
|
||||
setTrackingUniverse(vr::VRCompositor()->GetTrackingSpace());
|
||||
auto settings = OverlayController::appSettings();
|
||||
settings->beginGroup(getSettingsName());
|
||||
auto value = settings->value("heightOffset", m_heightOffset);
|
||||
settings->endGroup();
|
||||
if (value.isValid() && !value.isNull()) {
|
||||
m_heightOffset = value.toFloat();
|
||||
emit heightOffsetChanged(m_heightOffset);
|
||||
}
|
||||
|
||||
reloadPttConfig();
|
||||
}
|
||||
|
||||
void AccessibilityTabController::initStage2(OverlayController * parent, QQuickWindow * widget) {
|
||||
this->parent = parent;
|
||||
this->widget = widget;
|
||||
}
|
||||
|
||||
void AccessibilityTabController::setTrackingUniverse(int value) {
|
||||
if (m_trackingUniverse != value) {
|
||||
reset();
|
||||
m_trackingUniverse = value;
|
||||
}
|
||||
}
|
||||
|
||||
float AccessibilityTabController::heightOffset() const {
|
||||
return m_heightOffset;
|
||||
}
|
||||
|
||||
void AccessibilityTabController::setHeightOffset(float value, bool notify) {
|
||||
if (m_heightOffset != value) {
|
||||
modHeightOffset(value - m_heightOffset, notify);
|
||||
}
|
||||
}
|
||||
|
||||
void AccessibilityTabController::modHeightOffset(float value, bool notify) {
|
||||
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, -value, false);
|
||||
m_heightOffset += value;
|
||||
auto settings = OverlayController::appSettings();
|
||||
settings->beginGroup(getSettingsName());
|
||||
settings->setValue("heightOffset", m_heightOffset);
|
||||
settings->endGroup();
|
||||
settings->sync();
|
||||
if (notify) {
|
||||
emit heightOffsetChanged(m_heightOffset);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void AccessibilityTabController::onPttStart() {
|
||||
m_toggleHeightOffset = m_heightOffset;
|
||||
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, m_toggleHeightOffset, false);
|
||||
}
|
||||
|
||||
void AccessibilityTabController::onPttStop() {
|
||||
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, -m_toggleHeightOffset, false);
|
||||
}
|
||||
|
||||
void AccessibilityTabController::onPttDisabled() {
|
||||
if (pttActive()) {
|
||||
stopPtt();
|
||||
}
|
||||
m_toggleHeightOffset = 0;
|
||||
}
|
||||
|
||||
void AccessibilityTabController::reset() {
|
||||
std::lock_guard<std::recursive_mutex> lock(eventLoopMutex);
|
||||
vr::VRChaperoneSetup()->RevertWorkingCopy();
|
||||
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, m_heightOffset, false, false);
|
||||
vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live);
|
||||
m_heightOffset = 0.0f;
|
||||
emit heightOffsetChanged(m_heightOffset);
|
||||
}
|
||||
|
||||
void AccessibilityTabController::eventLoopTick(vr::ETrackingUniverseOrigin universe) {
|
||||
if (!eventLoopMutex.try_lock()) {
|
||||
return;
|
||||
}
|
||||
if (settingsUpdateCounter >= 50) {
|
||||
setTrackingUniverse((int)universe);
|
||||
settingsUpdateCounter = 0;
|
||||
} else {
|
||||
settingsUpdateCounter++;
|
||||
}
|
||||
checkPttStatus();
|
||||
eventLoopMutex.unlock();
|
||||
}
|
||||
|
||||
} // namespace advconfig
|
||||
@@ -0,0 +1,50 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "PttController.h"
|
||||
|
||||
class QQuickWindow;
|
||||
// application namespace
|
||||
namespace advsettings {
|
||||
|
||||
// forward declaration
|
||||
class OverlayController;
|
||||
|
||||
|
||||
class AccessibilityTabController : public PttController {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(float heightOffset READ heightOffset WRITE setHeightOffset NOTIFY heightOffsetChanged)
|
||||
|
||||
private:
|
||||
OverlayController* parent;
|
||||
QQuickWindow* widget;
|
||||
|
||||
int m_trackingUniverse = (int)vr::TrackingUniverseStanding;
|
||||
float m_heightOffset = 0.0f;
|
||||
float m_toggleHeightOffset = 0.0f;
|
||||
|
||||
unsigned settingsUpdateCounter = 0;
|
||||
|
||||
QString getSettingsName() override { return "accessibilitySettings"; }
|
||||
void onPttStart() override;
|
||||
void onPttStop() override;
|
||||
void onPttDisabled() override;
|
||||
|
||||
public:
|
||||
void initStage1();
|
||||
void initStage2(OverlayController* parent, QQuickWindow* widget);
|
||||
void eventLoopTick(vr::ETrackingUniverseOrigin universe);
|
||||
|
||||
float heightOffset() const;
|
||||
|
||||
public slots:
|
||||
void setTrackingUniverse(int value);
|
||||
void setHeightOffset(float value, bool notify = true);
|
||||
void modHeightOffset(float value, bool notify = true);
|
||||
void reset();
|
||||
|
||||
signals:
|
||||
void heightOffsetChanged(float value);
|
||||
};
|
||||
|
||||
} // namespace advsettings
|
||||
@@ -14,8 +14,6 @@ void MoveCenterTabController::initStage1() {
|
||||
if (value.isValid() && !value.isNull()) {
|
||||
m_adjustChaperone = value.toBool();
|
||||
}
|
||||
|
||||
reloadPttConfig();
|
||||
}
|
||||
|
||||
void MoveCenterTabController::initStage2(OverlayController * parent, QQuickWindow * widget) {
|
||||
@@ -137,22 +135,6 @@ void MoveCenterTabController::setAdjustChaperone(bool value, bool notify) {
|
||||
}
|
||||
}
|
||||
|
||||
void MoveCenterTabController::onPttStart() {
|
||||
m_toggleOffsetY = m_offsetY;
|
||||
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, -m_toggleOffsetY, m_adjustChaperone);
|
||||
}
|
||||
|
||||
void MoveCenterTabController::onPttStop() {
|
||||
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 1, m_toggleOffsetY, m_adjustChaperone);
|
||||
}
|
||||
|
||||
void MoveCenterTabController::onPttDisabled() {
|
||||
if (pttActive()) {
|
||||
stopPtt();
|
||||
}
|
||||
m_toggleOffsetY = 0;
|
||||
}
|
||||
|
||||
void MoveCenterTabController::modOffsetX(float value, bool notify) {
|
||||
if (m_rotation == 0) {
|
||||
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, value, m_adjustChaperone);
|
||||
@@ -194,7 +176,6 @@ void MoveCenterTabController::modOffsetZ(float value, bool notify) {
|
||||
}
|
||||
|
||||
void MoveCenterTabController::reset() {
|
||||
std::lock_guard<std::recursive_mutex> lock(eventLoopMutex);
|
||||
vr::VRChaperoneSetup()->RevertWorkingCopy();
|
||||
parent->RotateUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, -m_rotation * 2 * M_PI / 360.0, m_adjustChaperone, false);
|
||||
parent->AddOffsetToUniverseCenter((vr::TrackingUniverseOrigin)m_trackingUniverse, 0, -m_offsetX, m_adjustChaperone, false);
|
||||
@@ -203,7 +184,6 @@ void MoveCenterTabController::reset() {
|
||||
vr::VRChaperoneSetup()->CommitWorkingCopy(vr::EChaperoneConfigFile_Live);
|
||||
m_offsetX = 0.0f;
|
||||
m_offsetY = 0.0f;
|
||||
m_toggleOffsetY = 0.0f;
|
||||
m_offsetZ = 0.0f;
|
||||
m_rotation = 0;
|
||||
emit offsetXChanged(m_offsetX);
|
||||
@@ -213,17 +193,12 @@ void MoveCenterTabController::reset() {
|
||||
}
|
||||
|
||||
void MoveCenterTabController::eventLoopTick(vr::ETrackingUniverseOrigin universe) {
|
||||
if (!eventLoopMutex.try_lock()) {
|
||||
return;
|
||||
}
|
||||
if (settingsUpdateCounter >= 50) {
|
||||
setTrackingUniverse((int)universe);
|
||||
settingsUpdateCounter = 0;
|
||||
} else {
|
||||
settingsUpdateCounter++;
|
||||
}
|
||||
checkPttStatus();
|
||||
eventLoopMutex.unlock();
|
||||
}
|
||||
|
||||
} // namespace advconfig
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "PttController.h"
|
||||
#include <QObject>
|
||||
#include <openvr.h>
|
||||
|
||||
class QQuickWindow;
|
||||
// application namespace
|
||||
@@ -11,7 +12,7 @@ namespace advsettings {
|
||||
class OverlayController;
|
||||
|
||||
|
||||
class MoveCenterTabController : public PttController {
|
||||
class MoveCenterTabController : public QObject {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(int trackingUniverse READ trackingUniverse WRITE setTrackingUniverse NOTIFY trackingUniverseChanged)
|
||||
Q_PROPERTY(float offsetX READ offsetX WRITE setOffsetX NOTIFY offsetXChanged)
|
||||
@@ -27,18 +28,12 @@ private:
|
||||
int m_trackingUniverse = (int)vr::TrackingUniverseStanding;
|
||||
float m_offsetX = 0.0f;
|
||||
float m_offsetY = 0.0f;
|
||||
float m_toggleOffsetY = 0.0f;
|
||||
float m_offsetZ = 0.0f;
|
||||
int m_rotation = 0;
|
||||
bool m_adjustChaperone = true;
|
||||
|
||||
unsigned settingsUpdateCounter = 0;
|
||||
|
||||
QString getSettingsName() override { return "playspaceSettings"; }
|
||||
void onPttStart() override;
|
||||
void onPttStop() override;
|
||||
void onPttDisabled() override;
|
||||
|
||||
public:
|
||||
void initStage1();
|
||||
void initStage2(OverlayController* parent, QQuickWindow* widget);
|
||||
|
||||
Reference in New Issue
Block a user