diff --git a/bin/win64/res/qml/UtilitiesPage.qml b/bin/win64/res/qml/UtilitiesPage.qml index afb626a..5a575ee 100644 --- a/bin/win64/res/qml/UtilitiesPage.qml +++ b/bin/win64/res/qml/UtilitiesPage.qml @@ -227,6 +227,91 @@ MyStackViewPage { } } + GroupBox { + id: steamDesktopGroupBox + Layout.fillWidth: true + + label: MyText { + leftPadding: 10 + text: "Steam Desktop Overlay Width" + bottomPadding: -10 + } + background: Rectangle { + color: "transparent" + border.color: "#ffffff" + radius: 8 + } + ColumnLayout { + anchors.fill: parent + + Rectangle { + color: "#ffffff" + height: 1 + Layout.fillWidth: true + Layout.bottomMargin: 5 + } + + ColumnLayout { + RowLayout { + MyPushButton2 { + id: steamDesktopWidthMinusButton + Layout.preferredWidth: 40 + text: "-" + onClicked: { + steamDesktopWidthSlider.value -= 1.0 + } + } + + MySlider { + id: steamDesktopWidthSlider + from: 0.1 + to: 32.0 + stepSize: 0.1 + value: 1.0 + Layout.fillWidth: true + onPositionChanged: { + var val = this.from + ( this.position * (this.to - this.from)) + steamDesktopWidthText.text = val.toFixed(1) + } + onValueChanged: { + UtilitiesTabController.setSteamDesktopOverlayWidth(value, false) + steamDesktopWidthText.text = value.toFixed(1) + } + } + + MyPushButton2 { + id: steamDesktopWidthPlusButton + Layout.preferredWidth: 40 + text: "+" + onClicked: { + steamDesktopWidthSlider.value += 1.0 + } + } + + MyTextField { + id: steamDesktopWidthText + text: "0.0" + keyBoardUID: 611 + Layout.preferredWidth: 100 + Layout.leftMargin: 10 + horizontalAlignment: Text.AlignHCenter + function onInputEvent(input) { + var val = parseFloat(input) + if (!isNaN(val)) { + if (val < 0.1) { + val = 0.1 + } + steamDesktopWidthSlider.value = val + UtilitiesTabController.setSteamDesktopOverlayWidth(val, false) + } + text = UtilitiesTabController.steamDesktopOverlayWidth.toFixed(1) + } + } + } + } + } + } + Item { Layout.fillHeight: true } @@ -238,6 +323,10 @@ MyStackViewPage { setAlarmMinuteText(UtilitiesTabController.alarmTimeMinute) alarmGroupBox.visible = !OverlayController.desktopMode keyboardGroupBox.visible = !OverlayController.desktopMode + steamDesktopGroupBox.visible = UtilitiesTabController.steamDesktopOverlayAvailable + if (steamDesktopGroupBox.visible) { + steamDesktopWidthSlider.value = UtilitiesTabController.steamDesktopOverlayWidth + } } Connections { @@ -254,6 +343,15 @@ MyStackViewPage { onAlarmTimeMinuteChanged: { setAlarmMinuteText(UtilitiesTabController.alarmTimeMinute) } + onSteamDesktopOverlayAvailableChanged: { + steamDesktopGroupBox.visible = UtilitiesTabController.steamDesktopOverlayAvailable + if (steamDesktopGroupBox.visible) { + steamDesktopWidthSlider.value = UtilitiesTabController.steamDesktopOverlayWidth + } + } + onSteamDesktopOverlayWidthChanged: { + steamDesktopWidthSlider.value = UtilitiesTabController.steamDesktopOverlayWidth + } } } function setAlarmHourText(value) { diff --git a/src/tabcontrollers/UtilitiesTabController.cpp b/src/tabcontrollers/UtilitiesTabController.cpp index ab5ed6f..8ada172 100644 --- a/src/tabcontrollers/UtilitiesTabController.cpp +++ b/src/tabcontrollers/UtilitiesTabController.cpp @@ -7,6 +7,7 @@ // application namespace namespace advsettings { + const char* steamDesktopOverlaykey = "valve.steam.desktop"; void UtilitiesTabController::initStage1() { auto settings = OverlayController::appSettings(); @@ -19,6 +20,22 @@ namespace advsettings { m_alarmEnabled = qAlarmEnabled.toBool(); m_alarmIsModal = qAlarmIsModal.toBool(); m_alarmTime = QTime(qAlarmHour.toInt(), qAlarmMinute.toInt()); + vr::VROverlayHandle_t pOverlayHandle; + auto error = vr::VROverlay()->FindOverlay(steamDesktopOverlaykey, &pOverlayHandle); + if (error != vr::VROverlayError_None) { + m_steamDesktopOverlayAvailable = false; + LOG(INFO) << "Could not find overlay \"" << steamDesktopOverlaykey << "\": " << vr::VROverlay()->GetOverlayErrorNameFromEnum(error); + } else { + m_steamDesktopOverlayAvailable = true; + float width; + error = vr::VROverlay()->GetOverlayWidthInMeters(pOverlayHandle, &width); + if (error != vr::VROverlayError_None) { + LOG(ERROR) << "Could not read overlay width of \"" << steamDesktopOverlaykey << "\": " << vr::VROverlay()->GetOverlayErrorNameFromEnum(error); + } else { + m_steamDesktopOverlayWidth = width; + } + } + } void UtilitiesTabController::initStage2(OverlayController * parent, QQuickWindow * widget) { @@ -292,6 +309,28 @@ namespace advsettings { void UtilitiesTabController::eventLoopTick() { if (settingsUpdateCounter >= 10) { + + vr::VROverlayHandle_t pOverlayHandle; + auto error = vr::VROverlay()->FindOverlay(steamDesktopOverlaykey, &pOverlayHandle); + if (error == vr::VROverlayError_None) { + if (!m_steamDesktopOverlayAvailable) { + m_steamDesktopOverlayAvailable = true; + emit steamDesktopOverlayAvailableChanged(m_steamDesktopOverlayAvailable); + } + float width; + error = vr::VROverlay()->GetOverlayWidthInMeters(pOverlayHandle, &width); + if (error != vr::VROverlayError_None) { + LOG(ERROR) << "Could not read overlay width of \"" << steamDesktopOverlaykey << "\": " << vr::VROverlay()->GetOverlayErrorNameFromEnum(error); + } else { + setSteamDesktopOverlayWidth(width, true, false); + } + } else { + if (m_steamDesktopOverlayAvailable) { + m_steamDesktopOverlayAvailable = false; + emit steamDesktopOverlayAvailableChanged(m_steamDesktopOverlayAvailable); + } + } + if (m_alarmEnabled && m_alarmTime.isValid()) { auto now = QTime::currentTime(); if (m_alarmLastCheckTime.isValid() && m_alarmLastCheckTime <= m_alarmTime && m_alarmTime <= now) { @@ -367,4 +406,34 @@ namespace advsettings { } + bool UtilitiesTabController::steamDesktopOverlayAvailable() const { + return m_steamDesktopOverlayAvailable; + } + + float UtilitiesTabController::steamDesktopOverlayWidth() const { + return m_steamDesktopOverlayWidth; + } + + void UtilitiesTabController::setSteamDesktopOverlayWidth(float width, bool notify, bool notifyOpenVr) { + if (std::abs(m_steamDesktopOverlayWidth - width) > 0.01) { + m_steamDesktopOverlayWidth = width; + if (notifyOpenVr) { + vr::VROverlayHandle_t pOverlayHandle; + auto error = vr::VROverlay()->FindOverlay(steamDesktopOverlaykey, &pOverlayHandle); + if (error != vr::VROverlayError_None) { + LOG(ERROR) << "Could not find overlay \"" << steamDesktopOverlaykey << "\": " << vr::VROverlay()->GetOverlayErrorNameFromEnum(error); + } else { + error = vr::VROverlay()->SetOverlayWidthInMeters(pOverlayHandle, m_steamDesktopOverlayWidth); + if (error != vr::VROverlayError_None) { + LOG(ERROR) << "Could not modify overlay width of \"" << steamDesktopOverlaykey << "\": " << vr::VROverlay()->GetOverlayErrorNameFromEnum(error); + } + } + } + if (notify) { + emit steamDesktopOverlayWidthChanged(m_steamDesktopOverlayWidth); + } + } + } + + } // namespace advconfig diff --git a/src/tabcontrollers/UtilitiesTabController.h b/src/tabcontrollers/UtilitiesTabController.h index 9c16f8b..14d1dbc 100644 --- a/src/tabcontrollers/UtilitiesTabController.h +++ b/src/tabcontrollers/UtilitiesTabController.h @@ -18,6 +18,8 @@ namespace advsettings { Q_PROPERTY(bool alarmIsModal READ alarmIsModal WRITE setAlarmIsModal NOTIFY alarmIsModalChanged) Q_PROPERTY(int alarmTimeHour READ alarmTimeHour WRITE setAlarmTimeHour NOTIFY alarmTimeHourChanged) Q_PROPERTY(int alarmTimeMinute READ alarmTimeMinute WRITE setAlarmTimeMinute NOTIFY alarmTimeMinuteChanged) + Q_PROPERTY(bool steamDesktopOverlayAvailable READ steamDesktopOverlayAvailable NOTIFY steamDesktopOverlayAvailableChanged) + Q_PROPERTY(float steamDesktopOverlayWidth READ steamDesktopOverlayWidth WRITE setSteamDesktopOverlayWidth NOTIFY steamDesktopOverlayWidthChanged) private: OverlayController* parent; @@ -29,6 +31,8 @@ namespace advsettings { bool m_alarmIsModal = true; QTime m_alarmTime; QTime m_alarmLastCheckTime; + bool m_steamDesktopOverlayAvailable = false; + float m_steamDesktopOverlayWidth = 4.0f; public: void initStage1(); @@ -41,6 +45,9 @@ namespace advsettings { int alarmTimeHour() const; int alarmTimeMinute() const; + bool steamDesktopOverlayAvailable() const; + float steamDesktopOverlayWidth() const; + public slots: void sendKeyboardInput(QString input); void sendKeyboardEnter(); @@ -54,11 +61,16 @@ namespace advsettings { void modAlarmTimeHour(int value, bool notify = true); void modAlarmTimeMinute(int value, bool notify = true); + void setSteamDesktopOverlayWidth(float width, bool notify = true, bool notifyOpenVr = true); + signals: void alarmEnabledChanged(bool enabled); void alarmIsModalChanged(bool modal); void alarmTimeHourChanged(int hour); void alarmTimeMinuteChanged(int min); + + void steamDesktopOverlayAvailableChanged(bool available); + void steamDesktopOverlayWidthChanged(float width); }; } // namespace advsettings