From 73f9766de7ac3a9ff8014f23cd30d02e92037e5b Mon Sep 17 00:00:00 2001 From: Vasily Date: Fri, 11 Jan 2019 23:58:32 +0100 Subject: [PATCH 01/14] Add higher abstraction funcs for sending keystrokes, add const parms The original functions had the API details of sending keys absolutely correct, but they were cumbersome to use due to not abstracting away the press and release aspect and manual creation of INPUT structs. The manual management of objects also saved a few operations, but with the frequency that these functions are called it's probably better to have more abstract code than preventing a 28 byte object from being stack copied twice every 2 seconds or so. --- .../keyboardinput/KeyboardInputWindows.cpp | 76 ++++++++++++++++++- 1 file changed, 72 insertions(+), 4 deletions(-) diff --git a/src/tabcontrollers/keyboardinput/KeyboardInputWindows.cpp b/src/tabcontrollers/keyboardinput/KeyboardInputWindows.cpp index 9ae37ac..07fa32e 100644 --- a/src/tabcontrollers/keyboardinput/KeyboardInputWindows.cpp +++ b/src/tabcontrollers/keyboardinput/KeyboardInputWindows.cpp @@ -4,6 +4,17 @@ namespace advsettings { +/*! +Represents the state of a keyboard button press. Can be either Up or Down. + +Implemented because neither Qt nor Windows.h included a sensible key state enum. +*/ +enum class KeyStatus +{ + Up, + Down, +}; + void fillKiStruct( INPUT& ip, WORD scanCode, bool keyup ) { ip.type = INPUT_KEYBOARD; @@ -21,11 +32,12 @@ void fillKiStruct( INPUT& ip, WORD scanCode, bool keyup ) ip.ki.time = 0; }; -void sendKeyboardInputRaw( int inputCount, LPINPUT input ) +void sendKeyboardInputRaw( const int inputCount, const LPINPUT input ) { - if ( ( inputCount > 0 ) - && !SendInput( - static_cast( inputCount ), input, sizeof( INPUT ) ) ) + const auto success + = SendInput( static_cast( inputCount ), input, sizeof( INPUT ) ); + + if ( ( inputCount > 0 ) && !success ) { char* err; auto errCode = GetLastError(); @@ -50,6 +62,62 @@ void sendKeyboardInputRaw( int inputCount, LPINPUT input ) } } +/*! +Returns an INPUT struct with the corresponding virtualKeyCode and keyStatus set. + +All fields except ki.wVk and ki.dwFlags are zero. +The INPUT struct is used with the SendInput Windows function. +Official Docs: +https://docs.microsoft.com/en-us/windows/desktop/api/winuser/ns-winuser-taginput +*/ +INPUT createInputStruct( const WORD virtualKeyCode, const KeyStatus keyStatus ) +{ + // Zero init to ensure random data doesn't muck something up. + INPUT input = {}; + + input.type = INPUT_KEYBOARD; + + input.ki.wVk = virtualKeyCode; + + if ( keyStatus == KeyStatus::Up ) + { + input.ki.dwFlags = KEYEVENTF_KEYUP; + } + else if ( keyStatus == KeyStatus::Down ) + { + // Struct is already zero initialized, but this is here for clarity. + // Compiler will likely sort this out, otherwise the performance hit is + // negligible. + // There is no corresponding KEYDOWN event, you just don't + // set KEYEVENTF_KEYUP. + input.ki.dwFlags = 0; + } + + // The sizeof(INPUT) on MSVC is 28. Returning by value is a non-issue + // compared to the simplicity of not having to pass a ref to an already + // existing INPUT struct, and possibly forgetting to zero it out. + return input; +} + +/*! +Sends a key press to Windows. The virtualKeyCode is a Windows specific define +found in . + +Virtual Key Codes offical docs: +https://docs.microsoft.com/en-us/windows/desktop/inputdev/virtual-key-codes +*/ +void sendKeyPressAndRelease( const WORD virtualKeyCode ) +{ + const auto press = createInputStruct( virtualKeyCode, KeyStatus::Down ); + const auto release = createInputStruct( virtualKeyCode, KeyStatus::Up ); + + constexpr auto numberOfActions = 2; + + INPUT actions[numberOfActions] = { press, release }; + + sendKeyboardInputRaw( numberOfActions, actions ); +} + void KeyboardInputWindows::sendKeyboardInput( QString input ) { int len = input.length(); From faa6ccc580f50028325876b157a6f6dedd7dac36 Mon Sep 17 00:00:00 2001 From: Vasily Date: Sat, 12 Jan 2019 15:34:42 +0100 Subject: [PATCH 02/14] Refactor sendKeyboard functions to new funcs, propogate constness The sendKeyboardBackspace function was used with a non-const parameter throughout the entire inheritance hierachy. Const has been added to every parameter for the reasons you add const. --- src/tabcontrollers/KeyboardInput.h | 2 +- src/tabcontrollers/UtilitiesTabController.cpp | 2 +- src/tabcontrollers/UtilitiesTabController.h | 2 +- .../keyboardinput/KeyboardInputDummy.cpp | 2 +- .../keyboardinput/KeyboardInputDummy.h | 2 +- .../keyboardinput/KeyboardInputWindows.cpp | 68 ++++++++++++------- .../keyboardinput/KeyboardInputWindows.h | 2 +- 7 files changed, 49 insertions(+), 31 deletions(-) diff --git a/src/tabcontrollers/KeyboardInput.h b/src/tabcontrollers/KeyboardInput.h index f660eb3..44b9c7f 100644 --- a/src/tabcontrollers/KeyboardInput.h +++ b/src/tabcontrollers/KeyboardInput.h @@ -15,7 +15,7 @@ public: virtual void sendKeyboardInput( QString input ) = 0; virtual void sendKeyboardEnter() = 0; - virtual void sendKeyboardBackspace( int count ) = 0; + virtual void sendKeyboardBackspace( const int count ) = 0; virtual void sendKeyboardAltTab() = 0; }; diff --git a/src/tabcontrollers/UtilitiesTabController.cpp b/src/tabcontrollers/UtilitiesTabController.cpp index 0684b46..72a71ae 100644 --- a/src/tabcontrollers/UtilitiesTabController.cpp +++ b/src/tabcontrollers/UtilitiesTabController.cpp @@ -83,7 +83,7 @@ void UtilitiesTabController::sendKeyboardAltTab() keyboardInput->sendKeyboardAltTab(); } -void UtilitiesTabController::sendKeyboardBackspace( int count ) +void UtilitiesTabController::sendKeyboardBackspace( const int count ) { keyboardInput->sendKeyboardBackspace( count ); } diff --git a/src/tabcontrollers/UtilitiesTabController.h b/src/tabcontrollers/UtilitiesTabController.h index 375e2e4..17b826b 100644 --- a/src/tabcontrollers/UtilitiesTabController.h +++ b/src/tabcontrollers/UtilitiesTabController.h @@ -69,7 +69,7 @@ public slots: void sendKeyboardInput( QString input ); void sendKeyboardEnter(); void sendKeyboardAltTab(); - void sendKeyboardBackspace( int count ); + void sendKeyboardBackspace( const int count ); void setAlarmEnabled( bool enabled, bool notify = true ); void setAlarmIsModal( bool modal, bool notify = true ); diff --git a/src/tabcontrollers/keyboardinput/KeyboardInputDummy.cpp b/src/tabcontrollers/keyboardinput/KeyboardInputDummy.cpp index 4bb4aea..7cd8f6d 100644 --- a/src/tabcontrollers/keyboardinput/KeyboardInputDummy.cpp +++ b/src/tabcontrollers/keyboardinput/KeyboardInputDummy.cpp @@ -17,7 +17,7 @@ void KeyboardInputDummy::sendKeyboardEnter() // noop } -void KeyboardInputDummy::sendKeyboardBackspace( int count ) +void KeyboardInputDummy::sendKeyboardBackspace( const int count ) { // noop UNREFERENCED_PARAMETER( count ); diff --git a/src/tabcontrollers/keyboardinput/KeyboardInputDummy.h b/src/tabcontrollers/keyboardinput/KeyboardInputDummy.h index 66e5fa5..fb9df57 100644 --- a/src/tabcontrollers/keyboardinput/KeyboardInputDummy.h +++ b/src/tabcontrollers/keyboardinput/KeyboardInputDummy.h @@ -11,7 +11,7 @@ class KeyboardInputDummy : public KeyboardInput public: virtual void sendKeyboardInput( QString input ) override; virtual void sendKeyboardEnter() override; - virtual void sendKeyboardBackspace( int count ) override; + virtual void sendKeyboardBackspace( const int count ) override; virtual void sendKeyboardAltTab() override; }; diff --git a/src/tabcontrollers/keyboardinput/KeyboardInputWindows.cpp b/src/tabcontrollers/keyboardinput/KeyboardInputWindows.cpp index 07fa32e..b0e37a5 100644 --- a/src/tabcontrollers/keyboardinput/KeyboardInputWindows.cpp +++ b/src/tabcontrollers/keyboardinput/KeyboardInputWindows.cpp @@ -15,6 +15,9 @@ enum class KeyStatus Down, }; +/*! +Fills out an INPUT struct ip with scanCode and keyup status. +*/ void fillKiStruct( INPUT& ip, WORD scanCode, bool keyup ) { ip.type = INPUT_KEYBOARD; @@ -32,6 +35,12 @@ void fillKiStruct( INPUT& ip, WORD scanCode, bool keyup ) ip.ki.time = 0; }; +/*! +Calls SendInput on an INPUT struct and has associated error handling. + +inputCount can't be deduced from input because of implicit conversions from +arrays to pointers when passed as arguments. +*/ void sendKeyboardInputRaw( const int inputCount, const LPINPUT input ) { const auto success @@ -190,44 +199,53 @@ void KeyboardInputWindows::sendKeyboardInput( QString input ) } } +/*! +Sends a single Enter keypress to Windows. +*/ void KeyboardInputWindows::sendKeyboardEnter() { - LPINPUT ips = new INPUT[2]; - fillKiStruct( ips[0], VK_RETURN, false ); - fillKiStruct( ips[1], VK_RETURN, true ); - - sendKeyboardInputRaw( 2, ips ); - delete[] ips; + sendKeyPressAndRelease( VK_RETURN ); } -void KeyboardInputWindows::sendKeyboardBackspace( int count ) +/*! +Sends count amount of backspaces to Windows. count of 0 or below will do +nothing. +*/ +void KeyboardInputWindows::sendKeyboardBackspace( const int count ) { - if ( count > 0 ) + // We can only send a positive amount of key presses. + if ( count <= 0 ) { - // We ensure that count is nonnegative, therefore safe cast. - LPINPUT ips = new INPUT[static_cast( count ) * 2]; - for ( int i = 0; i < count; i++ ) - { - fillKiStruct( ips[2 * i], VK_BACK, false ); - fillKiStruct( ips[2 * i + 1], VK_BACK, true ); - } + return; + } - sendKeyboardInputRaw( count * 2, ips ); - delete[] ips; + for ( int presses = 0; presses < count; ++presses ) + { + sendKeyPressAndRelease( VK_BACK ); } } +/*! +Sends an Alt + Tab combination to Windows. + +Used for tabbing out of game windows blocking other programs on desktop while in +VR. At least one use case was tabbing out of a fullscreen game to be able to use +a music player. +*/ void KeyboardInputWindows::sendKeyboardAltTab() { - LPINPUT ips = new INPUT[4]; - // VK_MENU is alt - fillKiStruct( ips[0], VK_MENU, false ); - fillKiStruct( ips[1], VK_TAB, false ); - fillKiStruct( ips[2], VK_TAB, true ); - fillKiStruct( ips[3], VK_MENU, true ); + // VK_MENU is Alt. + const auto pressAlt = createInputStruct( VK_MENU, KeyStatus::Down ); + const auto pressTab = createInputStruct( VK_TAB, KeyStatus::Down ); + const auto releaseAlt = createInputStruct( VK_MENU, KeyStatus::Up ); + const auto releaseTab = createInputStruct( VK_TAB, KeyStatus::Up ); - sendKeyboardInputRaw( 4, ips ); - delete[] ips; + constexpr auto numberOfActions = 4; + + INPUT actions[numberOfActions] + = { pressAlt, pressTab, releaseAlt, releaseTab }; + + sendKeyboardInputRaw( numberOfActions, actions ); } } // namespace advsettings diff --git a/src/tabcontrollers/keyboardinput/KeyboardInputWindows.h b/src/tabcontrollers/keyboardinput/KeyboardInputWindows.h index e376703..380309c 100644 --- a/src/tabcontrollers/keyboardinput/KeyboardInputWindows.h +++ b/src/tabcontrollers/keyboardinput/KeyboardInputWindows.h @@ -11,7 +11,7 @@ class KeyboardInputWindows : public KeyboardInput public: virtual void sendKeyboardInput( QString input ) override; virtual void sendKeyboardEnter() override; - virtual void sendKeyboardBackspace( int count ) override; + virtual void sendKeyboardBackspace( const int count ) override; virtual void sendKeyboardAltTab() override; }; From 7da9d0e61f2c0b349e311131a6e06eaceb07e4f0 Mon Sep 17 00:00:00 2001 From: Vasily Date: Sat, 12 Jan 2019 16:07:15 +0100 Subject: [PATCH 03/14] Implement new media keys for Windows --- src/tabcontrollers/KeyboardInput.h | 4 +++ .../keyboardinput/KeyboardInputDummy.cpp | 20 ++++++++++++ .../keyboardinput/KeyboardInputDummy.h | 4 +++ .../keyboardinput/KeyboardInputWindows.cpp | 32 +++++++++++++++++++ .../keyboardinput/KeyboardInputWindows.h | 4 +++ 5 files changed, 64 insertions(+) diff --git a/src/tabcontrollers/KeyboardInput.h b/src/tabcontrollers/KeyboardInput.h index 44b9c7f..cb1226a 100644 --- a/src/tabcontrollers/KeyboardInput.h +++ b/src/tabcontrollers/KeyboardInput.h @@ -17,6 +17,10 @@ public: virtual void sendKeyboardEnter() = 0; virtual void sendKeyboardBackspace( const int count ) = 0; virtual void sendKeyboardAltTab() = 0; + virtual void sendMediaNextSong() = 0; + virtual void sendMediaPreviousSong() = 0; + virtual void sendMediaPausePlay() = 0; + virtual void sendMediaStopSong() = 0; }; } // namespace advsettings diff --git a/src/tabcontrollers/keyboardinput/KeyboardInputDummy.cpp b/src/tabcontrollers/keyboardinput/KeyboardInputDummy.cpp index 7cd8f6d..f9b78c8 100644 --- a/src/tabcontrollers/keyboardinput/KeyboardInputDummy.cpp +++ b/src/tabcontrollers/keyboardinput/KeyboardInputDummy.cpp @@ -28,4 +28,24 @@ void KeyboardInputDummy::sendKeyboardAltTab() // noop } +void KeyboardInputDummy::sendMediaNextSong() +{ + // noop +} + +void KeyboardInputDummy::sendMediaPreviousSong() +{ + // noop +} + +void KeyboardInputDummy::sendMediaPausePlay() +{ + // noop +} + +void KeyboardInputDummy::sendMediaStopSong() +{ + // noop +} + } // namespace advsettings diff --git a/src/tabcontrollers/keyboardinput/KeyboardInputDummy.h b/src/tabcontrollers/keyboardinput/KeyboardInputDummy.h index fb9df57..cf63f1f 100644 --- a/src/tabcontrollers/keyboardinput/KeyboardInputDummy.h +++ b/src/tabcontrollers/keyboardinput/KeyboardInputDummy.h @@ -13,6 +13,10 @@ public: virtual void sendKeyboardEnter() override; virtual void sendKeyboardBackspace( const int count ) override; virtual void sendKeyboardAltTab() override; + virtual void sendMediaNextSong() override; + virtual void sendMediaPreviousSong() override; + virtual void sendMediaPausePlay() override; + virtual void sendMediaStopSong() override; }; } // namespace advsettings diff --git a/src/tabcontrollers/keyboardinput/KeyboardInputWindows.cpp b/src/tabcontrollers/keyboardinput/KeyboardInputWindows.cpp index b0e37a5..8e5a84a 100644 --- a/src/tabcontrollers/keyboardinput/KeyboardInputWindows.cpp +++ b/src/tabcontrollers/keyboardinput/KeyboardInputWindows.cpp @@ -248,4 +248,36 @@ void KeyboardInputWindows::sendKeyboardAltTab() sendKeyboardInputRaw( numberOfActions, actions ); } +/*! +Sends a media key Next Song button to Windows. +*/ +void KeyboardInputWindows::sendMediaNextSong() +{ + sendKeyPressAndRelease( VK_MEDIA_NEXT_TRACK ); +} + +/*! +Sends a media key Previous Song button to Windows. +*/ +void KeyboardInputWindows::sendMediaPreviousSong() +{ + sendKeyPressAndRelease( VK_MEDIA_PREV_TRACK ); +} + +/*! +Sends a media key Play/Pause button to Windows. +*/ +void KeyboardInputWindows::sendMediaPausePlay() +{ + sendKeyPressAndRelease( VK_MEDIA_PLAY_PAUSE ); +} + +/*! +Sends a media key Stop button to Windows. +*/ +void KeyboardInputWindows::sendMediaStopSong() +{ + sendKeyPressAndRelease( VK_MEDIA_STOP ); +} + } // namespace advsettings diff --git a/src/tabcontrollers/keyboardinput/KeyboardInputWindows.h b/src/tabcontrollers/keyboardinput/KeyboardInputWindows.h index 380309c..12ceb44 100644 --- a/src/tabcontrollers/keyboardinput/KeyboardInputWindows.h +++ b/src/tabcontrollers/keyboardinput/KeyboardInputWindows.h @@ -13,6 +13,10 @@ public: virtual void sendKeyboardEnter() override; virtual void sendKeyboardBackspace( const int count ) override; virtual void sendKeyboardAltTab() override; + virtual void sendMediaNextSong() override; + virtual void sendMediaPreviousSong() override; + virtual void sendMediaPausePlay() override; + virtual void sendMediaStopSong() override; }; } // namespace advsettings From ace455d3d3c2f7c356a566d0ee9a2430c2a665d4 Mon Sep 17 00:00:00 2001 From: Vasily Date: Sat, 12 Jan 2019 16:34:28 +0100 Subject: [PATCH 04/14] Add media functions to UtilityTabController --- src/tabcontrollers/UtilitiesTabController.cpp | 17 +++++++++++++++++ src/tabcontrollers/UtilitiesTabController.h | 4 ++++ 2 files changed, 21 insertions(+) diff --git a/src/tabcontrollers/UtilitiesTabController.cpp b/src/tabcontrollers/UtilitiesTabController.cpp index 72a71ae..49812fa 100644 --- a/src/tabcontrollers/UtilitiesTabController.cpp +++ b/src/tabcontrollers/UtilitiesTabController.cpp @@ -88,6 +88,23 @@ void UtilitiesTabController::sendKeyboardBackspace( const int count ) keyboardInput->sendKeyboardBackspace( count ); } +void UtilitiesTabController::sendMediaNextSong() +{ + keyboardInput->sendMediaNextSong(); +} +void UtilitiesTabController::sendMediaPreviousSong() +{ + keyboardInput->sendMediaPreviousSong(); +} +void UtilitiesTabController::sendMediaPausePlay() +{ + keyboardInput->sendMediaPausePlay(); +} +void UtilitiesTabController::sendMediaStopSong() +{ + keyboardInput->sendMediaStopSong(); +} + bool UtilitiesTabController::alarmEnabled() const { return m_alarmEnabled; diff --git a/src/tabcontrollers/UtilitiesTabController.h b/src/tabcontrollers/UtilitiesTabController.h index 17b826b..1eb601d 100644 --- a/src/tabcontrollers/UtilitiesTabController.h +++ b/src/tabcontrollers/UtilitiesTabController.h @@ -70,6 +70,10 @@ public slots: void sendKeyboardEnter(); void sendKeyboardAltTab(); void sendKeyboardBackspace( const int count ); + void sendMediaNextSong(); + void sendMediaPreviousSong(); + void sendMediaPausePlay(); + void sendMediaStopSong(); void setAlarmEnabled( bool enabled, bool notify = true ); void setAlarmIsModal( bool modal, bool notify = true ); From 4829ce7c8a4341c37bcd32b17e39bccc74e70b0d Mon Sep 17 00:00:00 2001 From: Vasily Date: Sat, 12 Jan 2019 18:40:12 +0100 Subject: [PATCH 05/14] Add QML for audio buttons and add pngs .pngs were chosen because the .svgs were only available in black. Qt currently does not have an easy way of changing colors. The rest of the interface icons are white, so getting them in white was necessary. --- advancedSettings.pro | 3 +- src/res/qml/UtilitiesPage.qml | 118 ++++++++++++++++++ .../media_keys/outline_pause_white_24dp.png | Bin 0 -> 90 bytes .../outline_play_arrow_white_24dp.png | Bin 0 -> 256 bytes .../outline_skip_next_white_24dp.png | Bin 0 -> 257 bytes .../outline_skip_previous_white_24dp.png | Bin 0 -> 254 bytes .../media_keys/outline_stop_white_24dp.png | Bin 0 -> 97 bytes 7 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 src/res/qml/media_keys/outline_pause_white_24dp.png create mode 100644 src/res/qml/media_keys/outline_play_arrow_white_24dp.png create mode 100644 src/res/qml/media_keys/outline_skip_next_white_24dp.png create mode 100644 src/res/qml/media_keys/outline_skip_previous_white_24dp.png create mode 100644 src/res/qml/media_keys/outline_stop_white_24dp.png diff --git a/advancedSettings.pro b/advancedSettings.pro index 17c0b17..00dbaec 100644 --- a/advancedSettings.pro +++ b/advancedSettings.pro @@ -139,4 +139,5 @@ DISTFILES += \ src/res/qml/SettingsPage.qml \ src/res/qml/StatisticsPage.qml \ src/res/qml/SteamVRPage.qml \ - src/res/qml/UtilitiesPage.qml + src/res/qml/UtilitiesPage.qml \ + src/res/qml/media_keys/* diff --git a/src/res/qml/UtilitiesPage.qml b/src/res/qml/UtilitiesPage.qml index 76841cf..70aa9a8 100644 --- a/src/res/qml/UtilitiesPage.qml +++ b/src/res/qml/UtilitiesPage.qml @@ -320,6 +320,124 @@ MyStackViewPage { } } + GroupBox { + id: mediaKeysGroupBox + Layout.fillWidth: true + + label: MyText { + leftPadding: 10 + text: "Media Control Keys" + bottomPadding: -10 + } + background: Rectangle { + color: "transparent" + border.color: "#ffffff" + radius: 8 + } + + RowLayout { + property bool playButtonIsPlay: false + MyPushButton2 { + id: previousSongButton + Layout.preferredHeight: 50 + Layout.preferredWidth: 50 + contentItem: Image { + source: "media_keys/outline_skip_previous_white_24dp.png" + sourceSize.width: 50 + sourceSize.height: 50 + anchors.fill: parent + } + onClicked: { + UtilitiesTabController.sendMediaPreviousSong() + } + + background: Rectangle { + opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0) + color: "#406288" + radius: 4 + anchors.fill: parent + } + } + MyPushButton2 { + id: stopSongButton + Layout.preferredHeight: 50 + Layout.preferredWidth: 50 + + contentItem: Image { + source: "media_keys/outline_stop_white_24dp.png" + sourceSize.width: 50 + sourceSize.height: 50 + anchors.fill: parent + } + onClicked: { + UtilitiesTabController.sendMediaStopSong() + playPauseSongButton.contentItem.source = "media_keys/outline_play_arrow_white_24dp.png" + parent.playButtonIsPlay = true + } + + background: Rectangle { + opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0) + color: "#406288" + radius: 4 + anchors.fill: parent + } + } + MyPushButton2 { + id: playPauseSongButton + Layout.preferredHeight: 50 + Layout.preferredWidth: 50 + contentItem: Image { + // Assume that music is playing when people enter VR. + source: "media_keys/outline_pause_white_24dp.png" + sourceSize.width: 50 + sourceSize.height: 50 + + anchors.fill: parent + } + onClicked: { + UtilitiesTabController.sendMediaPausePlay() + if (parent.playButtonIsPlay) { + playPauseSongButton.contentItem.source = "media_keys/outline_pause_white_24dp.png" + parent.playButtonIsPlay = false + } else { + playPauseSongButton.contentItem.source = "media_keys/outline_play_arrow_white_24dp.png" + parent.playButtonIsPlay = true + } + + } + + background: Rectangle { + opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0) + color: "#406288" + radius: 4 + anchors.fill: parent + } + } + MyPushButton2 { + id: nextSongButton + Layout.preferredHeight: 50 + Layout.preferredWidth: 50 + + contentItem: Image { + source: "media_keys/outline_skip_next_white_24dp.png" + sourceSize.width: 50 + sourceSize.height: 50 + anchors.fill: parent + } + onClicked: { + UtilitiesTabController.sendMediaNextSong() + } + + background: Rectangle { + opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0) + color: "#406288" + radius: 4 + anchors.fill: parent + } + } + } + } + Item { Layout.fillHeight: true } diff --git a/src/res/qml/media_keys/outline_pause_white_24dp.png b/src/res/qml/media_keys/outline_pause_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f49aed757118a941b567629ec217cde1aaf257e8 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZA`BpB)|k7xlYrjj7PUzopr0AL7>TR0|Qg+LTQlz2Xzi121f=fM}}?&LB$CQT1);!o{Csdp|AUX_kr_g&g?0C zHeWJ%MsS(@gQve4-ekUJdvI`ugYkq8&Qj)rrOQP>ObaPtE>O6{Ip?FA$P?z$q&>X6 z4;zYEdUkv+TkP*=GGW0{zI<0-Abo`Ay^Fh5K*}txlBLr#R&R4*;R&8?qp-ZvXZEG< z4;EEl+@n14U2^!@H^qC^uE@^(d4}(A>!j{fS4TqVM?`Byz%(l&QHco6{ zQhxWxMl#sMTWrBWsqzKc@+XHq)$ literal 0 HcmV?d00001 From 566165da39e813b2f4ca8f55f2cc01f3bd8e765b Mon Sep 17 00:00:00 2001 From: Vasily Date: Sat, 12 Jan 2019 19:22:27 +0100 Subject: [PATCH 06/14] Update readme with new feature --- Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Readme.md b/Readme.md index 90902a1..52ccb98 100644 --- a/Readme.md +++ b/Readme.md @@ -229,6 +229,7 @@ Any changes to controller settings are immediately applied by Revive (Requires R - **Steam Desktop Overlay Width:** Allows to increase the size of the Steam desktop overlay. Useful for multi-monitor setups. +- **Media Control Keys:** Allows controlling a media player through the media keys. This is the same as having a keyboard with media keys and then pressing them. Should support most common media players. ## - Accessibility Page: From d9d6b0806e0a80628f2f0b112f53aed6c32c6344 Mon Sep 17 00:00:00 2001 From: Vasily Date: Sat, 12 Jan 2019 19:42:03 +0100 Subject: [PATCH 07/14] Add underline to Media Control Keys --- src/res/qml/UtilitiesPage.qml | 181 ++++++++++++++++++---------------- 1 file changed, 96 insertions(+), 85 deletions(-) diff --git a/src/res/qml/UtilitiesPage.qml b/src/res/qml/UtilitiesPage.qml index 70aa9a8..d1ab100 100644 --- a/src/res/qml/UtilitiesPage.qml +++ b/src/res/qml/UtilitiesPage.qml @@ -334,105 +334,116 @@ MyStackViewPage { border.color: "#ffffff" radius: 8 } + ColumnLayout { + anchors.fill: parent - RowLayout { - property bool playButtonIsPlay: false - MyPushButton2 { - id: previousSongButton - Layout.preferredHeight: 50 - Layout.preferredWidth: 50 - contentItem: Image { - source: "media_keys/outline_skip_previous_white_24dp.png" - sourceSize.width: 50 - sourceSize.height: 50 - anchors.fill: parent - } - onClicked: { - UtilitiesTabController.sendMediaPreviousSong() - } - - background: Rectangle { - opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0) - color: "#406288" - radius: 4 - anchors.fill: parent - } + Rectangle { + color: "#ffffff" + height: 1 + Layout.fillWidth: true + Layout.bottomMargin: 5 } - MyPushButton2 { - id: stopSongButton - Layout.preferredHeight: 50 - Layout.preferredWidth: 50 - contentItem: Image { - source: "media_keys/outline_stop_white_24dp.png" - sourceSize.width: 50 - sourceSize.height: 50 - anchors.fill: parent - } - onClicked: { - UtilitiesTabController.sendMediaStopSong() - playPauseSongButton.contentItem.source = "media_keys/outline_play_arrow_white_24dp.png" - parent.playButtonIsPlay = true - } - background: Rectangle { - opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0) - color: "#406288" - radius: 4 - anchors.fill: parent - } - } - MyPushButton2 { - id: playPauseSongButton - Layout.preferredHeight: 50 - Layout.preferredWidth: 50 - contentItem: Image { - // Assume that music is playing when people enter VR. - source: "media_keys/outline_pause_white_24dp.png" - sourceSize.width: 50 - sourceSize.height: 50 + RowLayout { + property bool playButtonIsPlay: false + MyPushButton2 { + id: previousSongButton + Layout.preferredHeight: 50 + Layout.preferredWidth: 50 + contentItem: Image { + source: "media_keys/outline_skip_previous_white_24dp.png" + sourceSize.width: 50 + sourceSize.height: 50 + anchors.fill: parent + } + onClicked: { + UtilitiesTabController.sendMediaPreviousSong() + } - anchors.fill: parent + background: Rectangle { + opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0) + color: "#406288" + radius: 4 + anchors.fill: parent + } } - onClicked: { - UtilitiesTabController.sendMediaPausePlay() - if (parent.playButtonIsPlay) { - playPauseSongButton.contentItem.source = "media_keys/outline_pause_white_24dp.png" - parent.playButtonIsPlay = false - } else { + MyPushButton2 { + id: stopSongButton + Layout.preferredHeight: 50 + Layout.preferredWidth: 50 + + contentItem: Image { + source: "media_keys/outline_stop_white_24dp.png" + sourceSize.width: 50 + sourceSize.height: 50 + anchors.fill: parent + } + onClicked: { + UtilitiesTabController.sendMediaStopSong() playPauseSongButton.contentItem.source = "media_keys/outline_play_arrow_white_24dp.png" parent.playButtonIsPlay = true } + background: Rectangle { + opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0) + color: "#406288" + radius: 4 + anchors.fill: parent + } } + MyPushButton2 { + id: playPauseSongButton + Layout.preferredHeight: 50 + Layout.preferredWidth: 50 + contentItem: Image { + // Assume that music is playing when people enter VR. + source: "media_keys/outline_pause_white_24dp.png" + sourceSize.width: 50 + sourceSize.height: 50 - background: Rectangle { - opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0) - color: "#406288" - radius: 4 - anchors.fill: parent - } - } - MyPushButton2 { - id: nextSongButton - Layout.preferredHeight: 50 - Layout.preferredWidth: 50 + anchors.fill: parent + } + onClicked: { + UtilitiesTabController.sendMediaPausePlay() + if (parent.playButtonIsPlay) { + playPauseSongButton.contentItem.source = "media_keys/outline_pause_white_24dp.png" + parent.playButtonIsPlay = false + } else { + playPauseSongButton.contentItem.source = "media_keys/outline_play_arrow_white_24dp.png" + parent.playButtonIsPlay = true + } - contentItem: Image { - source: "media_keys/outline_skip_next_white_24dp.png" - sourceSize.width: 50 - sourceSize.height: 50 - anchors.fill: parent - } - onClicked: { - UtilitiesTabController.sendMediaNextSong() - } + } - background: Rectangle { - opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0) - color: "#406288" - radius: 4 - anchors.fill: parent + background: Rectangle { + opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0) + color: "#406288" + radius: 4 + anchors.fill: parent + } + } + MyPushButton2 { + id: nextSongButton + Layout.preferredHeight: 50 + Layout.preferredWidth: 50 + + contentItem: Image { + source: "media_keys/outline_skip_next_white_24dp.png" + sourceSize.width: 50 + sourceSize.height: 50 + anchors.fill: parent + } + onClicked: { + UtilitiesTabController.sendMediaNextSong() + } + + background: Rectangle { + opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0) + color: "#406288" + radius: 4 + anchors.fill: parent + } } } } From 18b87797e9632931877d60de27f341c5dbd82c6e Mon Sep 17 00:00:00 2001 From: Vasily Date: Sat, 12 Jan 2019 19:43:35 +0100 Subject: [PATCH 08/14] Update screenshot --- docs/screenshots/UtilitiesPage.png | Bin 37145 -> 46356 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/screenshots/UtilitiesPage.png b/docs/screenshots/UtilitiesPage.png index 786066f1c6b4cefaa5c903f5feb239ce83467298..0cddbae86448164742884bfdc5d99221c0be8aa3 100644 GIT binary patch literal 46356 zcmb@sRZwJI&@G6&b>lSd?(P&c?v1;?(XjH4vjlB?(Xhz>F@q=BPL=dW*+9D zqU!88b#|WInJaT;W~jWZ7$O`F90&*qqJ+4JA_xeW8VCqz3=G)U%DZal)YliNqoNo9 zq-qlP`0E0~R7ge$1f(_^{!Jh9>l)ThT-^}_1gZbu2XxrB#0UhWp;SUdNXbp-EE7@> zP3%XIsq54`y{PZjg{-}+YjECRX3`Ft>mwjHa27yyp_p?AEg1{;(;t=Rakae>_;B$( zF2+EDFu~mek)^(Vm*>)_y}n&7Do+^%%ukRIC7asqN*ChaPkxCQ6k-$@h@E&SSfc+H z%>Vyf2$B!{37LrvH^Hb=9eoGz;tw;x#u#S86>AIs5+kJIClt{8_bzAhslh0zAGnzfcMAhCFag|1nNQneY^n{#v159*+Y;eMd5OXh0`h*nS@^>ai82L zahLsbN8Da`O`caK!d0y2Em)aLNwLDdZiX2MCNT^^!TIfxUn)CMHtb@J1O+M>w->4D ziYMDFNyMOCS0Yb|U;~n49?U=N!-M$^T5s!bS>QJv%ydY)_0!)Yy2|_d_B@3j}N6kbl}Xe`F`~cq#rgfuWkf(^5Ee+XHtWN_*V5sa&#uS;CIQkK=LV){0_?b?ndXH8NmUq8{dK}8WQZo}r0drnh&Ba8|59+~DtphR#YvrNI8B~-A z`RZcD)+T068PF>)z(1>9`18>QZ*^gm;ohSYioKiXBkFYsu6zbxo`pby{bH>_r}BjD zhK8~vAp#kyt+Glf-E02z!8q=e;XfZ@-q420?Zw3Yrc?f6I=xt6~=>rs4aoVbTjf|wk6~8XGr?opJ2XU9{d*{K@H*k_RV;`=Vli(PR z4?Yz;KpZ1TRV3kk0TM3I%@fwwpf2 z4zs6qho&I-iN`d+%4cz`BpYfYXKyDPg~M;qq9ZrV7$N%g$Gn+@ zUDmeYFBQhfKg98J`%;!SzwWz+a_;VH_5r7X0y zNb@l2Q>@VyP7$DR?Pj-nTA^44y~U7_vEPrnq>MkNK08K8u6GgFbdMI9Q_4xk{w#&= zb9Zg3ZQpcV2~NgAV*<4~GdP|5&!C!Lz}x3s zFS=Jy_%!+&n>TKu8`t>$lefcR^y-da@?~ppNMafGyZL`|+kMGR6-KYy2H~XD;>31U z!~0VKe>UCjlh}!c_H}DJo=)KWf-6TXyy#w&74}1e&04-&_TCpGOr-BNxe6c_I7_zS z-Z^gBYX^!AG<~cM@9;j6`1`QSunOd=`8wfQh0L-3bOl#Ft_hFhB%V4AXg+~+Ls zWi*(prPFO<(h^{@7+38S^Qk|r>+&iWdUTCq#yK~kx!+B#@3h$Kba5I^jyLhe%fMq!c22T=-(U3yxrTV)Lf)p ztMd?=y=+&$U84IKGI8y}+tz`F72P00A*CxEv9t3F@p$rFwb{HPKfDcJ_l!K_c`Kjn z9RAovfoJSadCo8VeY zsnyHr!sGn*cK|BQSQA$J!z*67YPGday+LRb34T4?b~}f_KgVJYLP!bqe_Y~}6-3E1 zx>R`Oh*Jsc0oEpP95Tad5n_~}dnrQ_hl&<1lr-Wb#<=BI=(bm{p5wDN5I8xV3P4jD z^M9oOU?tzis9u2rPhX@Vf<^R4DwTvZO9M|4Cq|5pVAT?EU5YAf;|TqSc#l)<@I+C& zeuY`fBqUf#L@<5lM2+ra_P7+^VRIk1cZ)0A?g)5I9BwwJ?SBnRr&TIaZ$;7eLuIw( zQ0lgIPbZXAjY!bY`fqav#VM7e!O_&(y=Lup+i*8HlDy$>4 zDwk5=xf*zFHVqP^+t~_J(C)x6ZA+&GU zw#VCQy>IS67AtE_mS4`h&o;Ygo>rS2FSGoI3qR!Ko+wZ1!;EuxtIIjIv!<^XuN3>n z@P^tIPj&P%Ey&A>pzT^0yOqTA;U~UfRUsNi0cO^m#6)B$lK<4&vve>Oz2KO_l4aqBABP%z= znyed-`QTf!QL}1XF;XnmB8PtiqlQ5gD_)-|hyM(kMK%3E3I8pp+kuC5;CPJ;|DBsH z)?fsFxUNF9Fo-^REWQ;}k85_2;hkxoTD8(`!KAPp5@>AMNUvIXy(FMBXYSlJ+$|Qk z#~@$6nq03+@OFw#dznHefKW>4=su%q{x7iszr6rZ#!D{RtRUfWIU1GUs6$qBJjn+r z5!-WW2aYcF+kZ&hGI+SIw&|BnTm+0_hM@GE-Y-V8}0|L;P#= z9KzQz%KOdhm%VMDELahM_gz;3dh1Xh0ebhYQrPb-^%KWVt$0XcURD)N;^%3Q1Nz3N zY;=^-GK}&3I216oN^fWC2oVI?F))y*{gUSG^ z&#|SqN9=gB{?A^W`f7RV?q9;&la!Op1di5 zICsYzaxgHQzs^B?N(J$B9*5cHg@C55-+Sq-g%q`WE>qzjY#QMnzvJf)S`hp#9?MI8 zgQo1t>e9Q&Q;uD(@9dk_S7YZVw^?kcCXc{I=Kh*2jQnD9J*qGBo9Ru9zt!{TFE(;O z;1X^2`bB+5uY3qYk#{~)FoA-`@@Y1^(3j7O6vZ(S9IUtb*f&R2=DL1vqgs0+V1)ky zreFeQ8s?4-unxAOBJVAf{fT}6|IXO{efmmBAc+g0R}Ps{t;4L`X%cA(NsfjeZFSqT za~6;HzU${j4qFnjD(>fU-ToBMzvLfK=AN{!Z>N$GFHs7xZ(!&(BO9n=MEo=h{(8H$ zf$9eL{Vp$vDBx1b`oY~ky&9)&!JYDC&wQe?HwLJKjty9PIMoq`4UT`n3E#hhZ$ohkw8F1>G!TC^?on7 zDqPz;RDOl>^OHZ$T?jYiq!lXb)L+*7wFMzfSXoE(4^o6UDzNqg3t@&Ce-nZ+ z5F*{=2(C=sy8M z{y!|FA-F|NpWZ)Hh8ZvC5d3>`$T;+{eXKksM)>a!S2AtDAN!16GmDiP*?bSSet?rW z{8zLDyY}&=He*bU&f@)Y23!4HBCH@tjt;&{`T%)I8I#jk?aiM8UUg>s&2m|TC=lP) zg8u14#H5c=`l1BaFzA6MhQW2$rBm1`&2_QQ6%)|j-|8_F(LXHrS@&3@QjTF105_Wu z4cekc3G>2&7G>;(MuG-=?UcbOXclGwk|YuMAN~6QV2Kzsu-q(@h=*!~j!vymr2hS5 zBhFQq7JPwIH!DNny-k2t2~$ZZiTwmomSJ}ji8F{9Cjuilcoz(`8njIB0gQ|qBkWGm ziIH;Gm-k^TS9!PSbKX9RRfa$%pl%(790|06a|fhQlfXd`EWfDW%wGx zUxGXl>Rldk#7ZvWQB38R5S@`Z^JISeH`mLvyh;3}ALhBk`$w$y@42bx6|&4&3HEjo zQMbOF>@>b8W|oJG!QX9)&xch`fgwDW)x_wcCo z!cXxIS2li6e1y2e(*7P-#xaP_vOqZN6(BPLKzo z$*f!SQB%VY?l*DeUMG!L6Z!`b9V}FXN0k!EC|yqFk@?#qQ_N9Vr_rj_N_81=s`%xT z7?L29B^(JBf6dp!o-IuxN9kNn@!Xbtys7sU;(X}tVyg@m(jIJ-pe%Bitm6-=T8yqU z$WUJ;*Gw3|f5yxVr&~5%*82>045GeLd7BhR``r|c>X`kx(w91r)#UVc>d(WW6qbjS zTCiGd6#e*%<>|k8E@_(Fg3I1adU&_YvPhpI-&{j4Kbml*n6Rc7NDQ|SPbySTKatxk zc^f7CdT*sculifZmUUHV_WdVrv--G)zq)FT!82($x0o$1t^#wovBUlCTPL;3X#VAFgL@ELfkAw6Ip8*&bbkXDV z1HOZLSyyBG@uxu=hKAR?&h+aoIucKuw(;B0$&VbG+VY3e?8gk7Qx!RNf-Fo08(5Et zmCK2B_~5|;J{{?dKkht+(*!O)+U#PcOsJ;q1n=_O3(4r)`)3RWGStC;l#;obb%m`W z<7%$ZclR2Vt{R@jnd_#WH#ae)&XW=xhE`a&cfE$EwKA&jJzP=D!+ zM@EL6RZ&E*VG2*f^-lt~V5Arlwm`jR<<4ft^;@06QLMNNYj_xzLUoi0)0=Zg7oh(u-jm9Dn|c5_9EJ`;_i zhwmLKIiycjieEucfI0G!^!-CJ5wqwvwR>@*713N=UyQ<>woN;q6&dP9|Iu3LGqaVttDR7-|S@z{lv2j#)ZcI8|$Ufj`N zb<64|oDJxwo2U|B8SNJBoR}UoJAmL*V*mHP5Zr<{DCbbHX{})AY7~!oL3D4qP(FZZ`VA{Bj^Y{`wJyO+Pj$UaGyK zi&^hE%cWI~0}`J<9GZA;zV;XSln%G`!z@)jhR^M~gms9`@Closw&y|Lc8`nAszAd$ zgEQ?I1Hm@u^3*P zjT0H~1=N1^a{P~Uj^GtB7ThsT?YFWSv@K5K!`;2f+#3e{eJ>rkNv&28#uRUnEiy=i z{-^L;YU2UB4XnVpDf?c}7_i@NS6^0`tz?M~%`rZKnuz=hJ0}PD)iKPFTmxLx7*ryCeIjgXgVfX-t^yP$uiJ{aNWOK zGun#;Uz#vrmh8#9at0|IhwoXz)*@%k|7fjY29avk<+|&~$SG+mG3;%5MXnV2nAk1L z)@{d@cS%t_KPg-ea8tOjV1ZVGGz#0V$D&7ZxB0xol2*Tq?D>v*8AF@F60sR0?ZPNc zX#ZY+51P{8P&M}6Rrb#rQpAiQPM*OdRJU(G|DA3yiLj}D z2Jk#Zn%1{T$*7>sG&0SeaA&&{ugp{|+%;onr+guUBFK@i6KGc2^O6DCqD7?BU{;35y*TMAy70+3DtCZJgKl`625;2#30JAp3Dk_aGUdQ59*zRl3(d^sKoZ4}ocRvO!u zWiAx`W9lcNY=H$3H>Oyed=8#4CW~|$Z)9xtk0yx~pZKInty?5Mz4f%eYxay1Vi?9I zpJ!Y;su!tDDEzMSU+9+Gc-PKnZ#UcxYxNF}RDH!vyn0+v8`5JOo9E`L4*XE9NTn5| zgr6BTpS5n_6n5NOgzcP(-XXQ96s51jzK;iXE=RwyH@pUkXM&M$HEEvV!=X}zVU9mP zeekK|sf>v*8qe<6xCw^tKvu}*XY&ZUg~avvuIk^zu|n2K*sgn1qrp-VA}mqs!P&^- zmL)+lSSc2405E8hbU%-}0{hem^5NmXeV0H6zo|hmW=S-qSU>}bFF0~|m zHA2GQL|%2Jl3Q}|x!4Hg(2dwH@wT3zpY)1B`-+9ge$RE&9x@%Esl4HP?m`?9FuT1W zRADi7i+(9J^SDE%2__2vQL2LiT^N={T)$u5c_2@)PyR$$45DBqVm{qdVr=L0JIjT- z-QAL-0li`{V6{vLm~c4~NdU4ZL862XG{_-)upmg+n_)QzQqWE?A2HfUYX;vok&X<0 zh=WtrJ;INe`6yo=6b56)ODP>oAc!aogqL63&cB>{r$4q9@PrXkcq7m>PW#uPj8!Dl zqLbpEl29%qk;wy4N&<5=$Q1u~s2Aif_^&SqcHKMjcaYgjZ#wWlmU0jy=~_2krhrxF zI7ZDg3-}L^aHtdOgsX{03Mt@Wi6Ee$wEqz;K_jG6Cko5|-PJ?6jK2&2_Ww@BMp%jV zHUW4}MbK$C&t~LD&j~qHqf)uiOCwB6fa$S=&0U5myY6lHaXi z3G}HHq=^`cIuCIOR0gzj~;KZgd7wKtISd*vZXZqX~XNTKHe?Sp8xb=~g9^|EyT zbdpc#9~eW7N7!+93H5Tq;%HcNMTtBG{@=Ft5 zXhsDn4iQu2)Zah5WwvJoR7=!oHcczL*W7A9|KQV(jA4yUBL(+cIC8FU^eF%0wDimw z5q3X!37*)_d!BlD-sYS=uj@^rkM5r&Qx$?i3+=mai~1qIYEsj-PP!HfKNLLDLP?I; zsrP?a1df!GB7$0hV9T70M@AFoh=;k~{$hf=6wvd`(5oQXBbS(;;rKyu`r5%cF5V={ zd@~QU49&CM z&Y;52TJ(?M_+P;{=b(t*|f@5lxPWSrn zWuMyZr)VOi)lo|1GA~_vXB*<25lq zEZEG(Lu_Q&s>Dn`X2KcU0QEY~%F!lPuY9!3lCr6`0?m326s0}S3wNyowwAYOm+QAb z>4Bm@>d|TA=Q%?g|6E@!;$cQ&qtYV&YWgnv8dkUf>01PVPrBSFOFG`B3r7|vko~F! zsHY|m9$Alwhokf}rY}SJmgxuDrH`DDQ`Jfnk%7o~mWEL8y&Fb4Zp#^3qheHh-gxWo z-UfJd4%xi9XYbD}Ln=pGqF=yNNNX%7AN{e&?%GK9;&!rKI$#k(t)B+Yit$ODH zd^o9T%(ixU`Oit0SaG+xZjj+m)a1(cx81+rm-qdQc$zB?3j3DEQ&lvsTJ&zeNY)+G z^4c^Ai~7&i?re31q%AlZZ9Mk`Ocq%72kZkmrc zs?TzBV5(4-+JCoXYU~)zM6uPq6+2O>gG`yuJXrqKP(>TIczsa*r2;pcAhwb{>fh(&(aV;SeeTjKW-s@3P|o39h3 zcM-M{nugh``@_8vsB(-mo)}2YN2+QBWuX};%XDaYiPfpq^D&3wk zH0x%h-WHVH6oA7{m66lfebp5|TJ6V7oD2UHnr&8<%R%B$lwxR)9X{(`k3@H0rk5p( zuoX*hI6tS~%#5_>crP1JRK#f&o_Z}e-n2d6UUCHhfQ4T;Pi%Qpht)}kZTW2{mniSS z7>)yv^R{_-eEM5Hy;iG(g(4nue0MEWNI1Lp?RuT<6210|vn5uml|EwlwEhlGjhgB>=Af|7g4+&v5p48+GvefHo{{p$=)BhfpFi)Xq#W4QdJY~YJ- zg8K?%08U>q5wlO;moZ=dY{NV&yySNU%cHtkuBX!`mGb@zr)6!MBxVM!+6x0PB4S1W z;g;>8KFHxycq&4FP>@-x8wt5&C9w4R6k@DSqcMzG!yZ)kTgku|F9a#XmDB3(vuBUD zzF+1Mm^|`$AJ6^ZYe!sj!w!KZTw9pDtj!Nl}#`R)r2gt#IN`R#BT}K)q#+o$6{)3m4?G!r=s!9G+ zNN=}*nh}IP{dUtqLK!}3H;1xoO%e`BQ+V>bXEz%xR;^Nz5d8~5v%#>b0_2nSi2KZ( zcL22-`JsQX+irt18F_g^n!)YNH-oB+Xj8a7kLQ=AhU8LRx%?!!rfzJ&h7Ao+Yrxz& zF=0)O!tP?aFkN5cdh9lO4AhZ^uaAbO0tVq7=#evesIn<^yWT)}IhYuskcSnO%o0Dy z1g9hmhZ$CVPIm6y$}wRedfw)t1yc={*LC1bL|!}SqZz2wqdfKHB#px=%a?wyRcbt* zl|ejmWVmisVNq9}K&TuQWRl=lP>oF^NN4L(QJ1R0yg44?qY-1t&P-?Qc@^;3&g6lR zuGJe-tw4>MjDr2rDVEaVpU~1vFDQc)LYax4H6tUjD%@**YA5tvIuD6l@+@J+`Bw-3 zF#NIv5A6qXRF3uK2W56Yj)&u0h+wz57j=*|Zui5DxBLUHSL6gZeO#0BewsIn`{j#fvGEeU3O;B1!L1*n^E4G};1& zGcA_uXKv!3Zg;KwTT6C#ve_-P=jQ!g-F?C73oM7N2(Bi=-7}UHGR)+5ePSOTc31TH?281TIBNn*BclB zW<{U@{KVget5-=IJ+-=>BOUp65t2PI!>iSc!g=Ms1~PD}KmDIxKlmo^6Iiq|7aDs= zI#sI_X%c38x>7b7<3@}x1ey_6T`W(U3~|vty)`da?FGvdAa)>7#*F?CakN^yw{rEV z;P(2zGFmF=#?dWe4Fn3MEus36*H_w&344#%g?o-qA2@&#AkxKRNtDO7%$Cn*AeIR^ zns#RTfyL4kIy^H#sjlTpdvv64QD+gi$OIQLHx3NuOvW| za|NE5zg{!TF^fVVs)W16cpa$LIK2r@!tp-jZaBi@+4F48Hgus>R`8GUav+f_mj+sJ z#g_Gmsfuuanz24CDYe2B-V_W;lm$u?qw@+VT8f;gC{mIs8lTX|^neK&D*k~EW4t5$ z8i9GbjPE5lDD1$mAC&zw@9q%bK7K7HVmt8Jto4M%$|r<#%~OtSaRmC0Y{}n#H}) z7y*wbt%BLI0X4-s;=pl>x-x(;83fu_xu1s?sT#xM{ZwwY0*Tg~u$$E}L4QL*^Mm92 zr_idM!b4sw!nH@L1`TE%lmgdgBx2-EK&H`6&=x&vXy9>zJgz>RjS5y-k|!=Z1qs63 zA07Id82ds6h9uc?j1){2B4e8C*1vNXV57T?E8;-!8N;uZ7qL|QhjM=Eb)ZL-@pHNo zR?u!oSO-WDGb1hqSnu?eFAx=-J}}z&$v7VDx9>IsARg4PfBxyT;6r9wc#d{F3T6XW z8gV>TU;lS+r3CCt_`o$JTv2=ity8}*TA`G3gwle<&obOhmD?6;pbypi&qWjS6paH0 z&LJip|CWx+mzOH^FuYpo!QYsO2U9UqOe5RKvf5j$r}wsvZmo%m3L({(^6EJxk1t5YWj$VdWAIzFwCzb9d zhxGd!pzu(3Suv7fh0HJb`oC6R*2tDrK5clH!&Q->A^njD?0keRlEn}LD4SuBZyJ-Z z+fSAviN!WC7*CC=(5<&AV-g+2ply0fK-zm`+VzCcL<&)k$vBEUiwR7%*$|NAi!TfR z`t~eYkML6Ua@q?k)Ysn)E40(D7w7kXcl$darS}nLn+o}*bDQC>k$EgN`Ag>xrd3^o zI6CUP&NV!{x<)}*s8971WI8RK;-E;k>f3Lb2YjJ$U4NMIbBaa?B$9B|mO0nibmM^(E7 zIhCq_=k}l9VmliB1?qSAliL931@_CP=waos54#J1*>i-&86&1NYj(`%gW{}IZg3+y z&PfX&CS|}=GN*?1HI!pVuaS$}##v_f2$E_1f>|w(#7X2ZqLNUPcxha#bDZ2ScorF$ zZ6>)Oo%S}Mo;&23UeW`Zn{xMO>*v;hXu)e_LyS|a24ec#++Qep9)BTh=wU@0=g`Y! z*@^zPxUORO;wFPiC~~b;;OV@|ldHsV-|-TFlLDhe%hl=B;exg}@T$gs^6ypuTzI!=r-vmANpeQEC;mN9r$0xOT*!G{y-=H`dBv$a~+vgCKzh|MueoZQ#**&^< z7DNZdhtKUBQ;zlm!Ir?Sn|oBEqA&g0dEy|MS@#{<&t;SQVT*He+Jx|K+|1n^WNt=o zO}S|&ilKJhI^Jdy-)Mvb#BZ+V<*}DD~2ab4}&D04Hfyb zhlh2WBy<=*RiPxvYk9pE`BzR|&?{z*%#tOc>cLH(+h*Q$^sz)yt6bK&I1E%ok zyPr4lTdh&`Xsv|)TFYWu$*GxlMdGr1o_5jkBq6da>+@Whrqw8ePwd!1T28q74MTel zAKu1(FkF6$ZLiVGJd4pNBcaN=0`(P9o@fo|EL_cPo3tn{Ak`itRi4DK1Ngw z+uQs%&V`qh8rvg`0|Snr+9)N|mv`O2j5x!Q4I zXXtNh?b$N<^z9w4is+$oJrf-U<>Jl*K(?I5Y`31CQ?t3YkJF>G_uo*-KgpC@;H_lH zYvDVD4DoOhswcoE`@O{NRsx{K>SUj{j4t>9Zn*WdKQJ%X+>Q?GngsGS7!(36U_hir z9cytSF}+zVdRs0O0MWgHji+mEUJ1O@6Y@fEsueShD&IK0ybFZm@}DXs`c09nNv{8P z*p=8-%;=S`G~CA>lb9fwlRPeK@pHye8M|e5b+%992$;Q;WHrKD#Wf zp4J@;uOz{8aCKby(rV>O&c)?wiT9>{{FabNPtG$}ck8~8>4)J&c+yvBP>f_pca*5Z ztWp*P75Vnw&U(378Wl03p%J1l_<6P1)Jfrj_k#H0v*CGGJ*=Xwl&do_nsPR96{}18 z+$Q&p&CousuzYDE6jZyn?!ArmQoTB0X*ZN3*1FAAlizTD-X~HmIPp&5q=XoJMVXyf z>W^lTL;ft+N4dtI+6FO=qucMliG&aRt|TKJ?0V%CUW%1uE_TcxIfJBN9X2-%d63^9 z<}UJQRJPn)fU6tv-MGB>yM9vmT8f=I@317V<9MHgB{t6L#dODL6K1!K=QD=KcSPr- zKd~yaDpMoa zmxVDm0yVXswKi5J5%Z}v7zzQ63`-qvdUOvkz!LQw*^JKETK_;s=-J*kY3NTA@!~K( z0Iv=R?PR_RUY&Spyq^sN&2FYj*9HqjEX#>Z^4_TT4$PR{(}1ZR9-Y~sadw3wnpN4@97%@=kC>B&ZCcpoAbfz$GI%0JlHBYMN(ut^CY zJ!RY+QjeL=WdC$i3Vw>IgtIxXH{rzWT^qsF%j>d^d|oF&spc9+%d6xITE5KfaX#gF z;8aI;1gU^7hr6n*gOc9vvUEPTqM_Gr7coe*+~H=19XKHz*H*@tMUasxLv;GL@^nEU z357j;=1Ajdtcwnn=Q-oSi*5DO*+v((^hXv9`w5SiL30`Pw{L0fPeC%4rfehT4V-1o z=UkRbmnpyptCZPpANomDo$HyI!cJ<_eo~^-q`P44tg;`B2*_R|euP^B6{u6})*{{M z$qy4&>T0OU7QJDGB-B(B>|zs5ok`UiK8H)#v2g0eHrmx0nxbklND3F#&_MhV_bqp% z`OpEUhRhE%*Cy#3C4snvq&o4=;+VW zR}c3EvJ=+zW>-(2#k6vzXG*G&uR@&6u7(Wto{vrMr|Wt0v-Q`&IreD7vFG8A!K7IX zMj5-0Q+DQXG`>2&h1IRW1+a7d$zIsK(>RSCd~0M;H(DDsM{YH28V=U#H%kJuY1dZ* zQWB^bDovdvIS7Wk1qSLgrWcZ8=kP7P7`Y@xGk801QW$E3s~gJ|qB`jO`Tgpy2-1m5 zYFxL;$)=uC6Y6X35y;5O+GNGfLp8D9h0ydh7|1!?;nkplCrjR8wMOt`n1gPhrcWWB zJR?nu!ESl^w1HZxk-y#s!SPZuqGN9^o+fQSzRj%naCaC#Q=TVizR&+|XmA}h9Svbj z*!hzp~RLTK?*dSCFDc%-wc6jBWYA zv#oUoTxP@txS9Fcf!K(i8h_6fq3-lP#FxjIF!Ag`v%J22a5rej#`*4lNT0dZ{uH;DB1E;p`H*ux&Owc7Et|&`4B%>u|9&2huYT zS`x%;wRbt#MzP&}9h5~<>BtI1&u&$5b1K_@7UW~4zSJivIy;gFv*WZ?)tMpObZz(7z5 z)#aaMgWxRs4=B`WiO}+qpO7rpLWuqSY@%7+o4$0dCtUvWlru)U? z;YP7g(`DUBnCyUp>93@_Mx^a>TYn0loTu!MiatnzF81(Q>o#xC+hIHwS=!e!k)>2r zQ#!@@6f}imRcpLKT`Dg*LAr!d;}7nqZBE$&MIq?3!yXDfUK?bPS*>q3T>enJV7Z>f z^TXlI&uwKL>iyS(x#Az!KdPYRPgI9rqMtDn76UlLGHqt zxtT4(jtrv3;&7LB8?0*2+5vnx@TuR{4BnEy~?ZbGF0-oYPk(dlw>`^jEE z({m8HDyPP0ahG!PEBY~$E8-8%E|+5<3jQNx0sap{7uquub}l_{Z=Es)f9f9NSBs$m zHWo2!E#_JW2p9&1dApAuK9C?MN<-FV=!et0x4#dE0n(&|XL4C}lGY`%<+psiCD6v< zm?gjR!Q5_Eoh7l$6huTzd{*2w)Qakot~Io*ihaNzY&5Yw56{w~T0x~yaK&JLHVFWE zJ_eF`6e+$2tO~$sI0!;Q5Ee?%h%DS|5~_DEd0?0O8uW9^hNBG&Nt_v`vs<>MPjewq>* zUZ!1zpva^objW=bw5h&JZP^pYi8oq6^2%B3(757a*ZC|DptFbq+x2q5e82y^nWL@P zh+lZU+#AQnzu8n0`gB%M@1=+A$!qNHyUj&BZ31^+h8n4gf{VLvk%pjlCNORBVZ2IL z(@bx|Fu?lRrtCgOtI7JlbDf>pyx7ZFtAubUa@6uU4hL=36cV#5Hr2CR8WZsxf)Q&F z0Mc^NbjH?oT4M_(v$|C_Khxxzvar)o#I0c-m2_yC0~)?~4m*ZXq(DUi*o)3OvX45b zQ)MSetI-p`3Va4+`Cu6KI-;KSQO@q`G6Aw^|_2)y4c}I zwBzeyF+$*!HXEMG(d)alxLW9?%ar)Z-ai7a$hIoTwsh+yo-Zeau|B;yf1?D@bVjyS zQT}z29)AE$Cr9j-9xeQhhT0+zfuFg&P`5d7L1Gf2+11=XK*sZuSi`AZz-Y9yXHVe@ zG!5g@)&-SYyv|50?~h+E^t{-Qm^NcQLHYLlSDcw&zH7Iof0ufxeB}v0Ur{Rbhie7; zt5>IqR`7QPoS=rm6mJLtt|P;>JiAPC&yuTTVb}gKjQ-B7C6nA*z8wmE2}>>lD5*37@)j7tTjfF@%^MEghT1tUsD!?QN}hs*P<^56A7t*!*t%*IR2s42U6SP*ZXuBnn2rWVR{xIO%7n#-AUS zae_xn3K>FJyJ~fQ$Azv~dZ(R4N!APKHf4fEg9%~7 zuV6*8L{!YIv(Jz(2bC@E-@oD1#t++fvDs+cUt=kS!6yxnrXASmuoqybtZuf751Ouh z*kYP`kH3hI&ute=AGKkA!u?6?6%QM*Gko}fnAu|2qk0Q1r&V_tB}OZrZ;VAiHLm)& z(bbxW-gMdhS|$4mI}PD0%wD6sm5s42@7iw<dmhB@Q!T4 zvBn06H;N4;*LjD-(xiHY+x332m8O~Yulu(w=Ck*0)0~nTGk~gIcN0sRA2jb;rvFa= zbuzpbeTA9O)zPsdrzJex-oe|Ho_qp_+y!ON5P8X%mkt(!&4SO1>({K13q$WVypFvb zSU+|!_D4F6;&Fa1E{m*dnq{4T{J7;IPL#ghh~D)XzWuV-)`kD@ha=gC0g5go!Lcmw zlpii)%+9L7w>o6}U4JqB0=vFn0Q!JB*ApeKw*_!P$zSe#JnepcN3ymo8 zU2_i*dvf>T;dqwxAbNe`Mf!-@NTa<=m!9{d!DqT|&bxVCPZK zS$zI2vo~oLr{#RP9jZ%Arw(h}a7owU-gQh4SLOE^Ap`b~q_^wwgX~k+r)I&k8k> zGgwhjM9ywGL7biw8=`f6{#1V>qmm^CZC{+AyB}=AFf>7=q-yd|XR@P9<)X4?0mx=j+StvbqhnM6I}1gE|zFtG7)<9LM9j#_TFsry1&~OfY9(1ZOrL@-kEvV%v!U)_5C~N z{HUsZs%r0hU-t!BAt8{$SN1381LqE7_SB;*1sn zV-L&1c+CaieQoUpdBFVY9it&g6Y<;PaVCf)b6#Hh7HNWcJX_gi{DXUV-g$jb6omeH zzoZYb6X%<)!O1Kj{f%Qa&K`O9`j3lhOgZg}H*w}XMC5`S1 zqQB9|TxDE~F)fkC(@b4x0JdB&Fc9-N%iSS_JZ>qbeYdj#b*pz0eA(4{?z+LV60U8@ z(QCdbggh;+WCzcxoo1`saIFCXXOvowTE+TtLC1RJ-KmXVta85Y**Uu+GW8&r_ z_ucAzm)pz-^eyOr$z7=zcF(R4ZdF?FwRQp`va#l`UnxnJT6+g?ir53reQA zn^ulv)ojVG;@AHEX_B?sJm#9F?X+78OB%mn;#N1Fy~RjKfAe;DiDL4$0LNV~3iP1R zW2y7Igg|!LzXLO0|ExeT*s_`-U)umY@JTY+f2bJEHG(8fh*xr+hp_c!ZnW;9f@V|w zLS-2>TyuI%rhD0|HC)VPb2-|I(Wv<}oUnd{`fYgb=QQr^kKkn;P&#zzI)>IkFF0p@ zgZgrPJQ7i|-i-mx?vh@sR+Bt2^x*}rT2^cdrQjl|;q7@_bbiwkEGPhvLC$wyDCP0J zCaEi6GWddFMDYwqY2c!Fo#Jk-XPFoSI639A%D>YeAD9-&WFGyrMks=ipBfybrCWXTHM? z(+6GXfb3<#k9JTE&Xu@N5$f7n3ro)rv-kZ9U52#CucYO27oDybEFb{yr6CBDphT?h zr3dcpiaoe|WeCSY8M6k039Jopub+-N59fohSa5CP|>S(mLzkBV9!>ss4m zM6o6KGc;g;XFy=DNjU?Nhu>CgVOCrf9-7}%8YzLs-b}iopiYX-!a7RG!>0Pjb+1^B z&q%Eu4wb9Uud65Z$RXC0od6;Dx9g92`8BvN?Zu}{{a)a4gUTs(@+0=@6VE=>;8^~r zJprT-dn!)*M$y`(H`I5vqq_m$wL^FBezJtLyoKfQG*0`!mOY@ZxI79op*U#4W>$0b28Mq zdHaTCDJ-L+<|NwuaY<|!pKIeQ)$@qABidTDtE+?|#)6$EA<->`7pel@62tK51|q(X z%JW5KUT=@5-=?OmTgp=TW>Rt4o8Wj?({A91RT+(YOn*G=w@w?MIvB2WblLIW*$tC` zui2Udk)ONER|JOht2{w}C)OvQ&>b(?hJHtf>of#;i!AZ-)LWg=Jo&6icjDxedDKh%wv>YjLCor;IwJ%*nT!3bqY=`S5pzr(EnDZ0E!1ST(4Ul=;#G% zCy=y(hf>k7tY?#w{f)<-Jd4hfbIRV&;+r+Q4d^LHdph%HTt7Nn#^ZX-2g)uB-|-Bx zxeCFKaBF&Xs2Yip6cQCoP^pady{C&2uR>?+0EJGO&BwRx@|6DF@f5DK5oFstCnu}% z1zegb>`C|3AyL=88RID*=Njf5R!>`Av9ThH(1p;5ir8N0exgtOJ_^+DG9+Q)&Y6;Q zF{aI{-1V%Mk$1<9o(ZDzO1azDUjoDwzg_VS9a6En;e(&ZreGZo1D)mRB_ zkdS=1@iui(gv^OOlM6gpD}^F)-GX^5f_962+n(8cAklW!2o{|-?sxNTXtX;h&VGVt zKNk9OIBgLak|5k-X_aCy=R{gC+cY)vUM$?(Is@O|i6g#3U7r?mjd4MJAkqwj(3Gdw zY7p+yxrp%6_ECK0w<*p)HV$D) zi>RRP%agQA;h?b2K*LM!r7|}7T!b2d3?y)DYiQYjyas&Ol=Ay0Q4A^e`oiNE3e@1o zLgi+wG&p52IaQ;EcVTZjriKyuBL<0lkfV7h4nw01V9_SR_Lac2NCXB7VF&k90vu1E z-q62tS!vT9Tqf~3dKC{~fiEF3UX6T#fVzUdX$=kW7pgNh)^ef>cq5lYojKi_4IoUh zS&POGDUu=HCV>ckitzZ1;fxFg^LLQRkTAhfIfEtmTs$R86(*S@$0jpJ6PCQ8eeGr@ z)?yPhSgbT1PP8BZ4+2dTHP`@*kwFI*TU-{z=kM@zu+~}UjC;5D)riz;Qlu# z?uD-OXBB%yZ&h?|>^&-MbmA3cnfer>;x|xy7^xnb?T5iuV`4bDu==5qjdsOIu-Ke* z#J%4QSA#^j-=!@uSk+;+z!Jn?4w>+1?{yg#sT-eAm{RB-sxmjs$6#YW4}cVJO-G0}&9p+)rl$tCpol1;JFC9T_LxPSU=W*<($Y*qi_#fHgKotRHqBOGXM|ki$4Po_}0Ocx1!r3 z;hLj?2Ja`kxe+ty{MKJsNPXztirQK8uM_zk%Ie;>pRFqwh{N6#N|5%6sEWBcwI%L88I#oH ze@DYgNG<$d%6F)4fy*AMaAU-XBx04KzWS!`Q(n6f&v=WDRX<&RD5-HzNq%vWL3a_Z z_y4~0_Egv#g+80usoKXA6Mpi3$ahJgJ5y@V(*+qGz;-$Y=u|xkNAA$0xD9AFH(@?B6-P0tjzPdg1)dw32=ec#i!BpmIvmcrvsu1+(|$Yq-dU3y3n}Kk;Ox`& zVPv4|8MI?nXh4Klt2l#avU|swmWE{7b$tzmb=;i(86 z-=R9n6)SYp*{?TW{;@0kwRhT~UwjexxjWqF1sqL)(v_8AFB{S2VqkXCa4YuZ*#ALq z<(rOuTv^$xq=x*eyFSVF7RSC;_ZZ)PCwTUAu4F*GmwQ>!_~{J``f(rWgrN`e@65}_ zROnfs5||CdfXqHqwotWGB-cwFmDqn)2Oqb8g-Y=I2`Oj#5WbId-^uvg!ORyd+Ig6O z%dW2;y#*&jwqchik6cRW>Q%KErd>^`TM{ABdduy+$OI8z>C_giIM~s9hsO$B@p#H* zXUU&Kw%C!Lv&AlDv-^V8D18eL>TOb*02^O_1Cfi8_P#}e2y-3tD_@X7ag}z_0V*(K zy8~leq!@epTCFDR5?bE#n5Wi>h<%OjpfR+^SE$*`2{#l-v5A(~tWi9Q9mv#gnH0sH zTbsP!Oh&vkc-mjaKXoEIW@A)?CL+CpFnL(MmHP`ZL z$+2sR)=QzyWib%-u0oygqsQD_KypWL{`h-_6oRJNTC8QuzTQ8rk;G0?W^Dpop~Mj@ zuyh)?tU!Lsw&XF*gaX&-j;1$$T+My~amdW{c=@dPg3Wc;1Lk7xAMk%)yN^M$d}J2~ zs^_nH4>fr4yhumyLw$=#wK^w{Cj&eJph?IlsY6g2_+5QCj(R*j=KaeG%s=G2>gZBw znt)D~nDd0q5)42owdfQ=ph{uF_phYiM`Z^X(m%sZLEv?q*g3;)0Y9nH|oIcPzLv0O*`FZ+@P8y_}dHE+FR z{?44A{5X`M_+srC#jnXAj6e$_G)cKE<{Fboq|kZ01gyG`Qpzqy$vN1Gi1}oUi3~hd zEE-L}z%PMCbn&0=m2*V6=sekv zMuPCNqbxwle|HhmoV9SG^Oz{bzUrk)<0fETKKGrKU2rP%fmQvl+VHJ)l$oSRszGJM z0oyZ`DqyG#b-^{IOruS>`4j~HLK}$|DMpx0?)yMkUtXsJl@nY$_Ne;JUc&>TQMw+K z#gqX4ik;o#Pw}cv6A$i~7f(Z}V+XfepvTlU7?2Bx7C0p@*m&}rvoa&DLJvRC73(7R z`8|NxapDFwtN)}>>RdnjSpa*w@ z)BQ8P=jtrMm;`76kZJeSaUOpXM+npPc7qwF)&&^J$yezG$D>lr=1*cF3=4v2x?%P= zmi@zL$sE(ViQ1hG4^q#pCG{O%YN%hG8I;^*VI{>h)u8Uv>Ecp#OCj%Vf0QUdz>K%I z-kW;@mO?ZGg4(wm%C3sT`}||S5DEduy0?DH!|OJc@7JJyw4zR*A&bXBJOQ)YqKV`k zWX>ESS~A`I)8ISD@cC)`Q(6H=3L}#a$6qVcPiGi)Ew!2FRL|}n4f)ecK3`E%Oz^lu zNRlDfa*f(eJ95~dPX=?apzW#ZwF1->!I6 z@5iHMSH#>&pQGhx6C2paE)^8Jj??&M*qD*cM%dhEwDW*H_r$n^;q$FVj6Sv0yrUKR z_*b7L243$God&hB#IT>)^{rI#I4qY(uCaR9u7@wh5tygvs%syS_A^z=zg5~F9Cb82 zX1wj&6i6U#4}i)l{qqWQvR@bGY*aa32QaV{{;%(f@k;l510Pm0s^xVTcb^~qkimBX z`N4l5Z#nWX>~6Hnj~eByje6&y^`61uN_Cmd>3W4yUFrl194F+|2OfcBIm(AN>F;ug ztv?7`*JO>kNs^>#649m2MYG*Hq`u=j>_bMF9%C8Ax$$g(mCH@i5lMDz(36Dc3hy#) zbJs2bNNBYW+>VVHUPh6*9((N)KVke09MH-3CjLp}|51D^?-dJLiKR zFHoqQtw=E`02#&-Awzz2yssoC55pSVXa1f4K605A4kyYiN1tE~?9(y46(&b{;wg|P zyr}=!qDPf&){&1?C{&RGryY$L_=N$7U9(WOhpIg8%aWm2kWBJd925B|h(qOX0)?;o>u6C5FC=A*wJvJj-MQpJ47dh|&NqA+6a4%+6DI)BZeBIU%2 zRoss_$lLGCNJv8a`tra0tpOq@Nm4G%82%j*V%IOxpGEZlqAllL6wgA0&>YEdp%{~h zXzFye#{7wo|Cz0T6$kiyP_I(Ni34b*s#EWg7BFKc7xdi`C}0gT*S&{`XrnH}K!{Ld z-0X$y6=L(0L4&_NdLwU;`AX(<^ALUF+!f({&6WA2RK8>=yaTwjN24>=dEEy?Bjs^t zD-?x|1xeihXBu4xTLcCMMTLGQgm^Re1=K<(Aoq}g`pNXxbaCc9rYiHY=vHY4 z2r2bw(1nRo5(g9ANfrfLV3*GMJx^{naAck~Wg1y^TzmU12-0nJId71dmV_5yh918g zF=uKrWcqK9mJ2cJxwmf+%>svny)CpDa*S0ti5j5Q!1V^{A?&NV98MJBwjVR2%{n(lG zTrc7CDp5>$6Ej_)ar)p6dE_K7%gZ!K77VA_@TPbWw0pY3mGO_OYhQG1jIvG1jrn*a8})m~4?)Fxf8?_)fj*A-;XAR0(e0%)%!L zZz``(x=<|;1b4SrTX+$_zc%7$bMQN~soqrA9_IKk_d(ORqT+0ZjDkra9yYBuU{vz^ z3dc|DYTWbKp`S4?7d9=OV6>diJI@DBnUf7^lyYrAANWjAhZtKM>Sfnk-BZq$#$;XZ z_q|Y%ngC)ms+aL)j{*0DdA+fyK_kXfr2A_ej>|ut-!WrPfu67tQ^ikRp1x$!HJFe_Cf{|S0yEqBP^BHE~p6hbPAgdxG zZF=@G}d%601sh^fI2|V{l~g?*5}XA7&0g zU!E{d^ZR!0&H@>}nK$ocw|R2Ea1Q4mk^ri8q1X4b@h}(lvX#5TZs@kBYJ((>Fo|x2 zuJW|h<}~!l%6u*?bFZ0JX21iaq7g~*l4^;0F9O|xy>_F~L}r-o64L`8rkx&VrL32I z;Rl+9{K>XUQvWi|t@MQgIr2lz!l;~8?a0Yp5jD=pte{8NCWqB<1LUos2k(0Sl{irJ z%2lmX=hgh# zYO~o9_Flk}q9z|Op{Cnw_Yg!j!IFfNOW{OsfAuwYquK7gq1}Anp%eVmVqlx)cT`8W z^xW6{0@li6!C}^3;Ko#hJJlK1Wtwoo)2{ZS@UYr;q3E^x$IDrx!SbO{eM3b;%KNst+!vn3qNP)Y+K%Nc7M$(??nS$sH}7jJ=`BNE`G-sb=*3D+ zqzMiC=}$RaP=Yk0J4)Peg{&1LHwxZt!Zb1wN2kPZv`qZ0*_^U^U9%?5zeeyj1c!U0 zhm7iVCx;;lzt%>Kc^VHl^}}%C#6sEf+pXreNMoFAunAIqgJd>GtlG80zR?z^E};Pt z8@^l$(5AzmSmYxY-w%e(JhvzuGivyCDo;p+psL862|#;dg-HDAS0vbP#Jpw{CsD~( z$=*i9?RZeJvcGhkb3SIFIDDwAMliZ^;X6kTEma34rV2K#vu(($txwG~pBwnoiLg|F z(ZI1q3xEnA7q~IW;&jBz-_KdVKgA6m;6KQBhskuzf*WHIK~;B8@Ps{)y;HQ3g`8>J z|E`aXsSt`DC?v9(D_V`K=zbk8rjD%wrK5WN}_6qosUOGKu$B))s z;PL!WNCSAEO}S#y$dkKKsHu(ivpL}kptEhijO!dsX96noqWXuU^J=t~?4FCcEn~T~Xcz&*fPieyb@RzteOcP=Yw0AQMb?0+Y7^5A=H&I; z__RHg?Bc9wcnP}KID3`m0H8Qn1O(Y6<22xuIjH8kt5KK+HoPQk?YN0g&pl#p$EgEN zwJs}W;Z@F(0g3;*Rr~gxWPvQ!y>*Pf%{nG`gCF$-4n6VBo{BkqWAkttsEqF;e?!kL zed$j3NyBvWwA6q8uRAT`1Qz*A1=zq`_!?TGgf28Q9h24M_cS1F5dC`>nJI7C=;+D( zLq2<9j}OpviETh~P=5QX@bz@Wz5R}RHOncBWuqzy-0WwKZ;bf|)(>PTV{A@VT?jxO zuQk{pb2c%(g{#>EOrMOaSyEQD`v;FIzNvtFrD7soM56TR6!wHm0Z5q`#@JGC5vdrf z_ve#uPshD2II`cKARQJY7Nk*|aIs3=hqCPRrwjcTm;?w1OYFR9yal`Yht1~$dL6g7 z8gK=0>CN}FJU5-Y(*cLo;PxBi;4^{6&DZ@qhm4IgQ;{Ahf#k!q&_l*K$KPQj6D=uf zJSUoGpjk$~uN}{{oG0BUNGWoA({GSL;LOL&q2}8#1>%u|_}Ylmn!S}DuRG&<>WKVm zAI`55DQ)M<&*M}4xUJroDj>0HoQiMl_oY-11EDCMADED*U1Z#byr2PuMlaUpnGsnCv5^18Xa{7S#3;=gj2wO;?1vZmB=+8SL=-wCeg$fL4 z2dS@M0lT#krdFjB7*CJ~?^T8easZC*@BLASweNsYN4ML8a^-9tfr;`e z!8&*tTlTvA_q~!^;Ih6vFA7WS1U17h8R$SJ>C06VLTT8XcLC%6&OVppY0M+gwVtKj zJLw4dccm&97xj@Q+QuRm`F``GNQo9SU5Pf-p*A1`HC)*sao7yi8F#6Hg`ORK4~dDo zhL26O5(cV7q=W4RxsD!>kPxoQnNjZQPq|?f>Ww4#U6xv?)X9sVy;VD*Yiji;-7rN5~DJ4Yy<*E7O*72{e8r7dDfj@U*3U{`h zw^wo<8XrN56MZ~O4sRyTJDVO7iQF?#v$_2CZMn`@YqSp^s!!5lAfoVd_?l0aOSIz^ z%WU6Q6y0_m8qP4Th7@a|ZtTNsyf zruV8~Jlndfgo{Pg%*)s9u}0OsQ=m(&kU&y_!68YgT9qY81DWkD;?=bmhtKk*Z^6_8 zES9w`Oo%_^9E2+IUTlp)zy<3u!-8=Gj#M@b%s;`x8@LAh!RHQ5ytNRM$bl7N<5EFD z1XK(XsfiXu7Et@6GiM7E!%RJdDoHsBMk&}nGoo|I;i2MIq>4x~(eyFN&}@Sp%FGg3%t$ch zYM!a#j6$BN9v@FHVol12erRx9WH-LM40el|Q0GCxT0?Yk^t^|Kx>^au%m;Hv2HBn! z{QmeX!dP7Os;wTGkOvG~PJ*@rcI59`#B`}hdL90n6+d>l3zVX248BhrQWNEW?wg?J z!B;Ass>uvx(ZNAOH_}fhGeszVxGXopl6fyNU3e7^1raq&W{gz&pv6rCvJTvc1kKO( zwB2N}a=j<{?PfivQigXy%0=HdVytg6!M(A1xSkKK>dEb8HA~dSC`c2OAa3`W3||g2 z?yg)MUBH|%nQqsDLz!XX0I;x71)?;dZ_QGvrW`gY+Ky1^RQ+e_G-huL3UNc^a4C^- zb9`56lca=*S4)BhUN?U$7LWWN*}YD%fq&FVsS~C3y2qUBI2lu>~Q25>S z<+D~4kvAFTz;=Ec=kj|$&`nz*g8Edn%wUUMx~GH+Ma|HtR;g6$fY}K95&$Y43a0?y zzhMYsFPU*ZjU#E||6-A=TR>`{IhYK+)tMyWNK3BWHR<>Tb%1zg-P0e?A+6qKVo>mV zr(w1JBqiFQ!$pi3601ghsY+wfx_<3EE}KF&tesHbYj+=^LrqwnSR~7!+k2jApYrpb zQWeVVjs#h%X!fo?}@*%5lvkWC|AP65gIp3W01 zHY4%m(kGbFYMOwt4|PF5jJ>#i4ZjZQf*R)Apyy6TFG!)id&KD$-U9)0w76tkE@g$U zGQS>q;+VQjyOJ!e)`H*3B6)62(wDXEeM3 z`=CZkaZfGIPp16f3@r=U;bfkE*3q4cr4_&<8oQpSPVl)nMzyqz0>Gz8yyvF+s9iA3Da?{ z$7y)4{(QW+AdDIDEvYI;9JPEVPvM3YnH2U1#1fqe7&djNuH$8T>nToK#+B3968K0g zj@QG>d*^9q`k6EmvA<`i3eQY;TO(Ldl&Bd~xAFcPiM(v^%%4h)-Cl3etJx^&2qs7FEe50q}rDK_AyzVezHEVs_&fE<74Y) z**au~B^pJ`KGZZf`FGnDCz5qKw$&X|`deFJ(R2t(Rhm{g zJQkPJ=1e!+uy)4$0a@0>%P80W7&^7U?xvz=@q67LJ=)^UK}P0h}Y*C4akyvAX*X`Bw>D2hmrn1ZN!t>wK&vP$iH3;o*lsd1vp+Gp`)n1HLcJrbz2S1t@Tzih_?ABCcU_2bIb4!)qxpw^*N%o9 zyWFXJhVdgt+$1Rjw<$&*%*oT|_x1Gr++SJismG*ba}Y<`^%&!jX^TGQ@+K#!3xm3! z&!gJkH@EpH>BTzN38O5wyC{*P_EcblOs{;mcD~KwL)+7nN0AK(aQ9^9hq)emI z&%91>Ad>7ekjkY&5TnUYmNg>RGAbRR(j0wWyQyPZCrtdwjfe&lsVynr$QqEv6%#P3j1v*}ox2!|maBz! z<}m6_DpE6p*|97el|RVr5_n%h5|vGY8eE9m6WFu3j$mD1g zhCp}gjn|&+Dc*XMLYXQrvvp}Ae+^1_EFOP2X+ z)H4WMAXEIuMvbYG7y>tpwwUx80S+Y(aqG(%8hRu-Z7-atQINWf0VIj9;po0jtVC%T zLE=xoKjfxDM{xbjG3Gem#j_6prNCD5f57(Q&>@636&g5lrT#tp0ZqexI=E2e$axz# z7&~wEx-gQuehgZ5m@~~Vpj8YsDVpeJf{jM-{+{dvYfv$QBd?2~RYuZnt`9Sh^&Mq+ zznBC#5>bvusd9G}HFCg2(IV6b&E_^}@YtSH`XB*IhG;@Em|cC^BixmPz*8`i^1+^& zCz3@J@_@3S&A?>2YwG_5I+2MGQ_Tyij~~nm9+l1IjnMkTWtxRqa*!dM4>t#8_9vcv zaoW+TZv+3KuZX_=+W=f35Ki)6@T)ZMrO!E2+h9bXyH7TwRa);WQVFu$X$lZy-^B6c z=l6Z@IA5)L9SdH4e#mtNNzWRf0}H z$-+#)0wGa&*$S{Lsmu?}_(%SO3D+ zifS+gu^cACkNH#^^t!$3Bx#TWG+vH4#YCR`*fAv~2&e27nr!r;pWob^z`?F+MVQkk zB^7f8zMZw!&HR{52W-p9Y(H)L3q+xhM*tws;(qvFP+{hqpS3%1&tI)QKLtH6$zjO$=VR}-pOFfP7fB* zhUb12b`_yT8C-;cqDZ`#L_8504QK!&`v3afNtEv<$=d&EkOVzZ3;&-f7i07!O)CVB zPhT$nhUo!)l!;X_C;H@NEfgF0vPC|73sq=mCjR3JGu0&;v-v{~W#F#oTNWUV*wqQG zj~O2eE-VO3r-vbC+O)xIp0_%^?`dK3^WzA4Vx}k_6=vuyV*Z~c&h-y}l1cAdK{XMH z#Uii5RC!!>N3}|ujNqm@e8+~_+PB5i31JMiR9ibBo_*V%%gcK6s0B#x4|6tQsH;kzwT6 zEO5=e5ojJ{{{g%Yut0-Zh+TxyL`^WBR8S+APFhrXe>oHk?P@0FX43(oEIlZ)reo?_ zJ`w}Ry5(K8JBu=1{~)JTdZ_3P6HZEO2Ji0vlN%H63(hQ%{Ch?y>{#ZwS*yC?Q--Nz zBBDdBQc2b>$MO(p#c-~ZglIPw|IX`u2xIDzr(FO7X9SywBXbr5Gs`$p1^^qIgR|d^ zGh_GOBGJUC0kg3GOlmy3F(cMOG78J`Ry+M4Mj9-g!7qqQnP|j5LWP}8P7o>fD&-g4 zZ`9Jyid{X`+7$KgR(LmDFtD`Cl*YhJprj;yZ~sv!rHHKKqg{(inWU^;lrZ$xhZPXb zBDBm=@V(#2ZJGZ6LjO3wPC7)nwB;xBOA|9{P4z+ac0Q%M3i9(bJG(HLQL7lVs9S?T zxxJ2m`38==@A3*%elt;7HSo~?acO$~7_HH_R&Ao%L3DkEE?$#kiP_xCx!C}n@|`a1 z9pUFwQ;{CVE<;niAi^{T*%V+^uN5>eUR2Un%@0?L5TR|^8XD&q#t}v$ywB|wrp+}ma zKwr0E9uPa}f(pMoKl+x0&n|5!QwQVpL+}HSf^C@HTCdSU{CVo74sNZq<D;}v~Ea+d9X<_{vu`K#sJbPaB z@3)XN4=P-?3vS}qxGH|x18tDp4`$mIeA2+OR{9RU3$=dS{W3^r2AkgcDZDnT3zgQ| zE)<893ycZ+H6ogdB}ynqO-d-#LNgz=3LXJ|Ad__rP4@F=b}N#bu50!CubsYgl3ywl z^~D<&Z&9#qvC*3S`s4el%z;YOW}=`DtU4^4Fl>16l$C3;x)iG&_Y205TtO?aH% zwBCnaL+9;z|o$22YZtu>RwT#;`n4>jt$_6oySseo}+eh2vaw z(CIw7j@0A>!r5uCHdT2>4cJCbB(DAh;bA73zWs*n$|NKe0W^qzFKaWbiY}BeZP2(L z2jPWVpz}R|>eqJvlI~}_=ME|LDrx+*Sv_AYY)NW$W>6;@v9COMk1>e0+&g3&har~}2C53$e^IeiYSXgQH(#%v5~L_K zY4$}ymCJ+;tni^t|M3sVMiWINcV@ay1pGg8&rhdvpJN*hPW7&wp9g-6w3PL>P6=G5 z@J9*obvULq`%L-ji>g&R7CA53BrVkQbmKCD6eg9>vt*ponEbtmT=KIG?9wq!`rL#n_kJ$WN6 zYuVndzE4OZ;IjVlH_f@cIdH5^P)Sf?V4czlP_Is$)@hKh{!x-B(leQ8gc&LY7CRn@ zht?-dvhM9O(xpG$_d7H~wug}0VRE!_>2gbdYsgH|y87Q+;D=mMSC)Uv0PNdWXD)7e zJcWwm>%nG(4(?<>+yi$*ZgP2@aw#X>+}IaMFea$@3K8!+8+a3k(`QdZqB1o}aF8yr zohF+SlvSQuZDL=&U-YKiE!L;e&1eCieF(#NkGrJGBkW29&as(`g^kw27j6O zu9X;Kc*!J>Rd(LI9-mI1iGofs%N3A99v=a=@_a~B;0k1nxfOoEdPq}Ta2j-AeZFmO z(V%r16*=V~X1}~E@_|?L!CTmL1>Ej}7v4XV+XwvOv|22)DA#-CVyNV^>gLpwHNuvC zjVv4Qu3Y1dTPs&7?GYJGd)BC%WafA~?w->mf(a9iF%=7irJ8>O4NYsp+#Y^Pa;uz=7aTpFbM2bohrcR6um8Ko2kD1uN zQGsv5Gk0l+fWxqZ0dDVt0})29JAKGm+kbeHVAG57=o5zTrxlI<>N18d@GXh}lW8Z< zsBx*d= z7ko=r-T1Q?#+RL>uXMeBH}sSO`+w_Kh~3}D*pwb>aljC6jM21C=gv(MUis}#pUXZV zZ5+a;;J@dx9oNhKt%rgXA=GPi27} zKAu6!sL`Vz7atiR3-z)oL?oH8=AY5aYfm1eKZUk=`q>31IA(k+f>UQ^HJly)>O#(R zjyJf%K$-MD^w^lq`Gp=OON($EAj7O<9TgKj*V#qWLkFfyqnYpr$N+z`qAb@ffKzGv z>D>&6OEN)T{Fi>00iXQ8$>-rcf1~rbRlShdTRKl0ixa!Ee8T zTe+cJNulrfP~&;H|H3HX8o&93lwgk}__E-;M@-0GyLOM5d+-L+!u%#^U9)eN9ezC4 zQQ2t{2A|8L5qmY_bz(X~DoRpQX#J8pM>GZ93(^vkFlOE6moL^5ac{GTF!rduR*wfQ zZ}|K;jtFZ}I&zM{7p&0U<^CctG6=)sx>Bvr&mBB~c?$2t8nspt6b$4;T;}|d8Nq6d7~MQ0 z>V>+w4vgESN!%3Ov-%`-X|(37)*KeMfg7(RD*xHc#tdKfbBxft^Erd<>pKEI=l9@R zIJ)w5%V7zD2;WXmn`(ZQXg;^*=Zq!u<<8He+Rn$xbau?>D!kfq&;3pk%F1Zc919IL zt4jV{~s{161`|$`oS(_6I&#MLw-h0m)zlLk6Gy&fP3Rw9Rg8%Na!_!nr}bTYJHS z2*x)wl8|uUT*YCCCM9}If)x)4m~qWN%5SbrD|DI|Lj3R8?6pZmh?IZm>=v1Qr$0=w z^JA3e*3l8U{esKAI|WZQCo=@wVt=?RqZd;v75JO9BA(9aj9pP7dlwd-2PWWYPM)do zboL*J{AHSMA|2~x{a_@KLku_8Xv6?fFNE9SOj?jvG06}OW{Fy-utA3h%`9U)&-Ad? zA0$Y-y07`0?b|#&yz6zM*KzIPmNF>5|71S2R{=QyBf9Q7F#mMe$sFAuwXef$zI$7` z1g-wtphdgYHSO`7*W-Ld*{vbP=IZo2o0}NFSzo3cVw@}mYKC0NVt6QwiB8Na%BGc? z_P_~TrRb*6A~)6t`y!|DbqCefW2_H0+so@5bQ)6OhJt=jh2(TL%~9jkFgi%nMp4c3 z>uPPZ@8_F(jj|uMN{>R4!g;3VB*oyD)~2^^ASWkdflRw+KP_uw^*EN34|IZO=lNE* zaWxf&Ny}@0aifwCqp8EsR|nZ@=w<$0$6To0EJG8I1nUc|Xg(sWPn{#c6~vo!IIs4zrZ2BUbe)~yk%>($4upx6t(w!B&(i5VlsoH zEv&tV{<=0vsV#GH z6yVY!yI2eT!C!x}-K-IN;>quzqgzpde8%USfVQVC;A7*J!bdX2dfS&G5G_##TjLVJ z0xqQ5wr*fvgSD~R?k0~ixb*mxl)kVrZgr!k*X?(?#NnoJLvUdTtcZWTQVxbH5hrYI z);mqB*6pwVZo3tl!g=%(gf#!=8Xxb7|2QXqwe6X+T0Jp;@dY0YV+ zmc^FKa0?CF-5Qp;o|1Wgu~6t(l+Q^l^FO-#svlgyEHp!qO3q8rY-p|QXK1Y3#R+{Liou^Q8LU*q$K zBsm;zJwN(b#Wh^WtMF&lmF3nV45WRbrX9$Ts6>x9wiQNmg0;aZH6 z_wTtZpU4l}A+Gk#0`k9!( z^hA(RMzm*x1YBC8BIy#fya^*d&Hg^Uym|yXS7P&29~goB>|(Q>Ut*~~m}h!^K_wJC z>Q1CDqT;f5=WY>$3p556#g2$o=x{)xY~OHLcj^iFjs?%nIexE37pDzTQ>k7`9ZP%b zbeY@aM^V85Gdx&lZ1i_P={4FzY(@lVUn$hHvg%?3`MqHhWO$ODF&J!ElJ*$UqsujC zSV)+boX6ZoI`!I|4;Lzo4Ey|VC=nRmZ!iA5jX7HNHU{D%iUXELcCCKt>D|f=;MMsy znW)G@)A{%$m(Aie=%Q)mw8E7yyNYE9@Kdm_xV;W~1GG74;9u@h?1b14$$;dwk_3M` zV83tmC9-EU(_!{_yyjU@wOpbgTckpw2X(tS9+MXzXN>%mn}-N^(voLTh|#dkk=5I% z4dNhRs?S&ioj{}rxVaV>Kzne{?-{m6WIFHk{@(YTnHLNK$O2j{)^ZIHoN;lFSZknD z=QaFO$`oi#w>Fpn@lt^xR9%{td~AC*IlLf30hhU_eIAlhO_{Cog>0r~PyS3ajJGXM zaDm9F_V=GXlG~JvJ@p6~>ZEr<)uc&u=xu66YUn;X*VDJ=t>27}>}_s32Iv~_It(HH z5y|@bpXwq^gs-N;S!+LObOua)XYp#QOP6}8C~m?bM;u9ck?ncFoY1R>H;SWkJvv1U z58`^2@tf1pbE<{6BYVkZQ$0O6^u=VrcPB?&!%r5@2-)}nc#utxSpy&}q}>tyd^qP7 z)*l4`%?cDjmE^R7QACaMHd*w@k%r|*)F#8lu#hRP?fXdTG0rd}Q3T1g&jBC5J{h0w z+&?~?KsoATj;S+`B2nVLF=%&Lh`iflx;uu_+~pnD)3!YpfShwZi|tG3|&H6Z6h2$Q0n_fvKkUvOSpQj zvAa3*^B3;C<6E|nr~4C5`)yN_j|ddCvdi;qB;^Kja?fwCzi)|sn`Fg??l3}osiV`O zN>e>*v8wz*sQT2m*;(U}S!@vof!;=#mpUeNz7~DS z>;Q`t7pRyqrq_7B{|Ghk!`G4Jcy>H~o4L0W3Tk~c9+#)^7#z`wH`KI%ohE8h$=cAX z`v!Nt(BG!8O>0qpvV1X@0Ig!qoWTnkdZ4|o#N!@!Z_mhxtM7>^k>BZ(PRj1NJFn{IN+k z{!7uM=_>>|{29$}bXVP*2EvtacHBqGaz$u8b@4~e0>FdE`8i#M?eS3qiCfvcKpWlf zSLA)dX8OHdNCSDpIC?|0BuLV%TV@DPbvgl`#XA+8ssWu2K*$!oqCKj4Ry_(atC`rl zaov8U8jb0YTYnJQwE=YnAmX`@+1-7Mls;B=(Hl0C{g}Pph~f`uhdGqS9V?mS;wQI& zItl7N+2$fZ+;gy(nu3KOv+`m!HQ4ekj0jvE^MgSm7(Qpg)Q;6*Cd0%mY{0Kt$I5xw?$C3EvDw_#@m_Sw7Q(b(`YG?liGML z?5}@G6g`z5Nq7I;_O{F~`}u`WvmlJ_c1d?;-41iBc+xUctR%}}l;8Z_Pnk5L=bMXr zkO7mH5{E$zu{ug3n?8+fO?38e7~=>ci=$8zyp4{OuI=fg9u2t?oN?Std_b{&&iB(2 z{eA)c8zIN()IQ+M%%5ikzH!Zb$eW{%`|s~`rlDj!3<{a834JJxw!U9SSOXN3OfZHM zhf8`SzgM@q`4H_!fQYVlJ|)#1#mCPqb~Sl}f>a0d|6Qd;75eQT0hyO@6J@|mi1N;) zsQJIBlD_E_v9@^a#wBh>f;3>aWhR}5HtEkkR^-g>C}*(}_2q!$5@b-=<* zJr%+Eds;lerv;kqlDNw@e)i1ab)IAVHiAv}Opl?{EQKj|@T6#d>_3z{znrYMWD?LU z8A*g!sXJxjj^EzAi|9iYa>e`lSdFK4qrv@=54N*ZFz?k7ICI zT^m+A=-ektB0#QxAe}F&tz&a?OX)ca&RIJWNQp&L|D+<@R@L^|dmtrATrXqb{EUAe zC(6gwQl!jb%<6To#L$Jp{!90SD82Vo`)^S{Dw0qCO|b<@P5LEhi!=~jY2~mzQX-^* z;ILL;du8JGeHjyUvmE28;$lRH)RQ1%e0e0wve$hZlE@kg%#&5y(9%QXp9Y!IH2_m? zo*=&zsv@e%d>63b^zhBuP=5TUQYIfqsNW8iy>OtB#d&L1yhf7-E%fZw2gP$yc7F>Vo;eN54s+PlaiNc~r*Sp4^%PgKPk(*>*_B|D zj*=|prFY4&X}ZQYBo+mi=a1G4qdw(HPK0|b!QX}C{nygIS9%$e1TdHGANUkrg(#M2 zp0|=vB={+rK<)uWm^?K??7cdzJ}ZukmPl-Ki>MXe9Ihv&bg>FGS^JKmq&7ncg%ymB zkPr0=CCG_e^=lR?A;C|{HY`+mTDh|@4ESw*y9%83Y5dOl^IKyBQ1v%n=Dv z;B15qN3sD{&hWl)+3WpbvnY_2y~Ab>UD}jbarc#YX_kPO6aprxOz5($gVUBGcff~V zLIme#Kwv|}vTe~{snoi7wUHpIJn2s9CDId&&^tV|&cH0R!&0FyMr= z5X&7OX6Oz&O$taSO}S<|NquCeSN(EDIArq{d0GgDjM)mZmRYMtYFF%i*CpNhUs>a_ zk6@QwEcibp+h_y9f&Z=@fe~&LH3)(&z1fK7UAytu=%52q1T6Rp|BmXn{3#gz1XI)O z_e5ViId^h5oOI^S83m*t#B{o^5rko(B01QFOU6j*CcaRv4IL6;HgN7dnS|%M+zk}R zK~v;sp&^2C@L0dS)uYGcGgb?O9-@Cm_o^`Z2!L?;wQ7c}oVwNOT9mQNLmm-cpJnDD3fEP?1)Quauim=K|R`dn- z?@LbX4Wd!79-bVO)h8yjU+`>wUr_gZDLUXEa&V#QDZmt4_geml;66Sq&N=$E;sLt4MXkV3;A+@Fp8IZaS+QHtkoIc$ngW z)XDtL?~>`iLY@qA!HAnh&=PQonS7?Q9Gw=)P+9FGkiss?#)VXKR+XrmLw2*B1_SO@{@5 zRSWxhG;h!uRRQl-af&q9*TkuR!D6u|Kc}jYo2x2Vly>=t_1`acZ3!~H_H-yP9f32u zD6O^V2rUc;!~Wr>hHd!&C(%Rf-ik3$&W>`H3Z#&@mmPVO|I10mWVY3K1xQ4+AoM!`0gZWimu6nh#?I10TMesQr zG#Q_$+2~^(hi%448fazm-vDlyOlv640(gF-|DND--KY&GH!+E3(-2kw4-q@N$^!p$ z{PY>MYPG#gbub_Yj5%K#z?K@eOjC9mv=y&cS25|orBQTL{Z!qIV2u4ipUnJv8s;GY z8`W}kKbG9U^4ri+@XcxKWY>1DIF3!(FA zR-5t1)-!PN_}g&H=S>yuN&f>MsnuKxHd zJWF9X%1z3-oL0lhkbX1v_$T~N^nssRG-2pe{tL)HlT$^51lMxf<1~}62;e@MDYEO8 zy8j+LSDHyxje^TesR z-kOBPZ$*ps@ur`Kts3yglHQx#sO?#kPzipmTc4$5EY2`F)fVZ zd!+|{q>Ih_kuY77pZnwNczttSnkUKS%*fnqzjN*SeRNzCq4K}o$A zb9jBUwaes8dQH5i4^j0=t4~7Bk5hAHu=zuzms#h(l|@UP9>fZ&j0BFuY8hZfUwAr& zQGyxk0-7Ij{YuW!tKwDSE@kG%>S`U!Q#? zbU7cGdDgPd-A`_9D(=gPo?qOs1E{o1z7?dY9v;xDDg=N>BT>=W>Z{NYMo*6*uJmn| z#q=mYG?zpoJZ#dk;k>=;6wGMKqW8>U$+tWpHSpU^`fQ zRJgs-^_pQTbl--?3#5QPEfw`x=ZG4Gc{jIZ9oOVXl&!)&{D{(0$~D4j8W}AdjRr8r zKK%IB@IHACLd9HDZMg|e$lv&NIMKmTVc;$iN1H^tFH>na)x8WWcwN!Pf;ci9mkJNG z8}LkQb;pjkVbc2zprI@xpe7>Qq{>64DJ}PvYR2H5q~t+2P>hf^rmZhDlSWuoXmd z9f`?tk#0NNM+!C66R`pnn0+^g5|8Pf-<1L1uV=Ls@+lB|7Hq;u&ASt~s=`w#U7dB% zwNj0F)Qk|&O)~=N@dLvc0?9el*%}))P8#}+{D5w zE3-qF>9|)1_iQ@5Lxz#H=v8_(87N61c$!x%*599gBF)-ZykECFMLz4=bv&+#2VNCy z!*aYDJ~xS1eXlUZm4pM>=j3TI`d+Qxb0OgAMP}V#4Uy)b@YJl=cxQ6OTpZWDHdaKt z>-uOZ)ju_3)`_TF#0#?TW@;rX=-Ue1=)Eae`?&j@(RX<|mpTfR=1`HqK>(QS*~_LM zQNTLBi`nCf0eZjTQX@5XU2La#YP{cXMnc#v<`_?(`l#yGFwIl>Y%PXk9zDZF3g)4s z&(Bs046>B&8_#Clx{vI($DVlGySq{Ys;9XWE4ni@Mg-k)c_08afkr=TGf6~hCkZsn z5aJr>US6_Tr`UTm8IpPf{WaPt*TjHKqlRI!EXU*@*0>uur^+Xq7Ae6Rr^4-K=pEa?CAs`?ao1v9gYsdNbOGaOL;f|z{F26RQ~uV$81HReqkw- zFQ^q>u9KmqsXH}2$SzXIQ@Qa)Z=sY8&Q!~Gu^pZ#0qf~2N#YQliFmDNeX*A+!Tr9$ zr$wGcv-m0FDEdnTD6cHv>#tMR;ou1}v`VzvH(wuZw#)6=48u-DEm4>!JC0)%3pf7a zf|9l2kz*QO$jqQKd3}U$DsDCcCJ>iS`jq z`;Fpp8Tv82zcXTV{hsI-2@vpu&_jK>lCi2{`QfgRae4SL!r7O^e&)xfTO^@?MXwF* zko45_4B1z#`hIm?Wng`AWoY9|_PydOp`_G<*IVOZg}zotV1DYrG2;><6XT0o>6BFM z^_?{8nUMXU;iM#vY9LKmJ4w=mcH&7Qz2Gb+V8dT>Jn+tI|0ywChrR2E3GQKf`Znel z`P3Z>=`D)u!O+lqp}3!hwBG$uP)5#$f+Y(gQWyRkw@P`7!H!Zc^gZq^xgh1>{ex z)$946oVLF7ANV7bzVxwDMC!0xzuYC+3`xUJVJ3*{WO6JVVM>!^?A>!aDQK-ikn$RE z#`)LwPnSvJ2rx-{!8BDwitRz35G~|P;&pF0z!%cG5ZMyDqTyh1rhwztPzGBm%pEo)CzBjmx1*mJ} zk;ZLLzOFXx4g&j3N30j!Mt|ph3S*0JPw(my@^IfbZ29Za7_bYzJoKD0I(pP8ViT&? zp>kFpe%u$D`Q=Y;KbrKp!kl0TsD-o#g?_g~@M3m&@EuhP4xmW>cVCgkVrEn|(;;VV zJmxMI{_syI&ppVOCH^!wkAa32hYidtQ1Og4HDkm$Gg_F$|`bjvI_Oi|35#n=%_A^VklDHh+L)C-J2#XOIO(MLu0#jL&~M zziYSd=+7?bSydOZM0`Bhw4rnSrQqsFwKpU$-6O>S+cP&fbrD-YDZ~ig?8^KRbmcN4 znok3tIm9b;pVxLMoy3y)cJA*wK!tB$whyGZ)j)+q;A9%Jj+p?bUC(uRQPhD|!(Kct zI;3q^7x^m7lNz2EY~e8M{R8uY=>r4f;)N z#nw-MFruprKEF4vjX9QA)?Q1KUP>8H#_xJvHyO0?b+YJk&ZMXIDu*#nELl#<5)^Fu1h$X&aS1&Eoc0wuDdHrejekN{yz zwRYt^@a*Bicc0HQ@s^wm=0z{s#%qicd#=|9;n_4N)}o=|>3$sj!_f@y#J|j8y}0xh zpL%CcyP*G7&$rXpEsLsN@U$YbPD)(-qqk$;T=G8aLZk>{=x|mzOKwSqNy`zP??&J-pQ>c131>}*OH<#UpLdY|z zb?oH9uMwH{I9*r~wOYmT`OvNdbX2oC(dLxl4SP?m(+2jLxFQMesw7(1xP&fFzM}57 zz55(5O2Tp_7jrJ~zPX>b&U=~*w_VMRfixmU>z>DB73NRcEzjSbuf=^S3)YRKtc!DL zLpXfr_Y4FL`1(>Z#@O2&?=ywk%Az=l9p4A&&qv*!FvV-zoYS}jr_=>mJ$f{VtJ)QA zKp5J$e;#iaD%>SSqA|gjgA4~OsnOKZIq2+OJiKsH&+d@n{c1YeR+w@x>f_K_6)fyXZP7lR&zI|f|NIfCj{&GbrvB2`) z`V7}?Igq`QxX-n{CXb0G9R;X#^hYoQ;U#J4xS1?Dd>B~VcgsfISoD@S|80vryy}bH z+m+8zU2;*#%A4YkBF8Q++?mQ2)AqaC6x9F-@?|B|2(ssb%uM#ZtG9&-pJNSmloBQx zJnzMV`kbNBvBqdY4@WQ)xHd|&+tQ8nlVIJ_I;*d$lQjASQ4mB}tLf0Zc?e~F{Y`A# z^ehA8)m#2s{Jy?)N=p3@s*r>1I?8ny$~S$ET_HB2qNUZ@9?YBP4|0`6X<{vfwu1&f zqVdmF--L{=R+c5AtLwXlzlNHZJ!lXD0Nh1KsKAV=o8Kx5iiG`{E4=2b^#e5Cy6k@< z2w`++@v3@`Y7$2c^ULWCYNq7|fBs5v5hcN0-nS7DDR zGL3l_)4qu+d<+%}IhM9udP&t;G@7O3JCE45$uG8WhyEp&@&2_PlR z!7fHQcz(i^*wzg8e2#1_csTYWJIbRFapDeG`{UnvGl-fN_U|4|NqvW|)ZVWtcd&M5`6tw0$r_h|y#C&%jis|EKq`CV%DeGDT+f{qbk)@kK|JKfF@IH~c|gzUb=i_YUO?yGwXe9dwrk2gst^`VYbyK3Hw6@z#!_KnVT@kRal3_&xCylF#Zs29I zGH89i!x;K4zes{DVY^vasjaE=VRD7?8k;ez>0nWkNat$*H$iQ+2RR$FOc;ZQ_hy*{ zA~d8QUy+dTsYk~Q$GeC3vc{+9sAM?e28rvjkY(`0>fR6aA_AXj6;({0jq6~GJBz)~ zY9aG7znh``Q0pzG;&SDe^3nZtxG@A#C7Id+}cH$vW}^@*SlO*Z?~0+#1Y@fo}uZk#h3~jC(?M_#&dV08MOu7HrcMZyoj=X zUW^}cB($t!Ospuhbb_{-m8v#@MQ@!pJ1$@%p1hoEyc+^Hb1rXTZqOFkR5ujwks!IH z4oYZ6-I;h_yH$#K^D^Q_#j)a?3>&nc=E;Y~QLi7umk?<`ZmI1F;G?QIC6DhDXtfZX zvW1_MyCAj+BlV;Y4j1sc)>#Bp@~@v>?|+ig#X2PYOo!}b@_drvp|WtEy4EFqH?_UU z6UEd+6GM#sB9xgoBx0TTcY_bM2iaMgE7Pa?H6hYx;#L zf>agyB9IY#&tYJMsZcPHUfmZ{q09`2mwss3Z5oHM5Lj9{5rzA27Ga!}MYf&~g$u03 zZayn6A9p>DAJtTW?-dGb8+D7TkK+=0!R>bsns!oqwVi*Oqf-T3W`o7)dGeO3j_WON zy1%P-?k5{A z>vg^+1gc&GSjTpV1NDuFD;-=bdv>$yyTj^NKDPM$BJ+yzW7V5&q0~R+?3jPnWXZU> zUndCf?IhVM7c(O*uq-7c+{})>5_#Q*nA+K@Kx&0u|06r@WqTjk?HoHgs+&bf85#RSR z7#YxsgF%ER@;QI3>urbYvQl4G-U-Oz zxfU#y?68F12KM)@)E+^Rtt*+y>H<8QogrfmvGlr_;z{N6USEN6QG8BSisG?XHm>7_ zp)(~k;;uXd6lU6-(qj`mwzssjLzfYl!%k4kO?D}66g{Mqtjv@Y)TK0}6GsuUGSkz_ znX7a4E@i^wHSOPlq3yJS(nVw&CGU>zc^s$aqir6L(cXQ zYV$-B^B(3Xqsvj`zSMvN7rct2H-KL>V@Ao~Iwisg# zvBa!yQOShm0lpAp<%zx}GTlJ~eJplJ+ znP4qnLJmVUM^w_We$PEztVD=;$bk`Im?p zQWyxpc#bNrnkEMf>BpAzx*hK-*#x>;h9TCm>L47kID|NwDTa}_3zF;2Qgd|#=0u8A zBdJ&aZe>0i;nJbF{FqZ#@voZL;whN1-7}Qp_$uF`RFkB+PMyob&M8-5wBXm5&dQH7 z)oWQ;i5W?W#ZY{YwI_kvvF`LUnd?msM{~)Yo3^{2&whqP&Ftpd2n_p&HOg|GK}Y z+U9-7W-oQt2U>9W!B@%!mjlVp+jCzfIQ6vT(JIEq^aBDM2f}r?iq*2vt_5O3fvKqe z29`f8=Rh@Inpt?E!KR!|W=CG2)hZ#O{rTwH)`S#%r~Pc^o+);S50_97KmhtzjOPzVk^dhp3q$X!N zI=??4W^g*6pxn7QGyU6VkWJ7CCmlCL5>924kMQ=Lfle7FBdhjrXYO^iE8C1N@Dan z(#MpB%o2*3CrSBMaWg$F<(;9v%+x{2{9`J&PN}Tf8x|$rmOy1kI?!~eZi(&vq1B;h zcJL%UNLHg_*@7LnU2xsoEmDsKB$5AO;%XZ{?yVAsL0-2nj8`&e1?iVfBW!`R3EYCa!Xd zEDCK;`F4_eS-ab*!emz)k6Qv}Wj|H&#JsZC_*@VwjObL!*39lVQc}3BzSHThr-KTp z@V@Qa3?Hf2Pmd@Iv)kd(#r!8H? zeN*_Fx_1V7#Gf1=DfRPNYU@!xNaSE%dCcfEJzRG!R}ng5@jw;`5e@;bqW7D zv`c(&1&se}8g$t%w-)pq_RoC=0B+?@p-B%>T2|IzXr(3JU+yw5ze){R+u5~vbk`3~ zBTiq&FRnftFo!C8d9C=m+4wl`nSeSm3_>6Qv-Ay^V2m1C$=zaU)%Uf!PQ)>Hofwzb z>g7-9jAkWDXIcdZZ-(nVY8&GilZV|gwTbI|gtX)vc~k z2Y6$DbRxx%8B~(#1W+%U;A3VttBf|yK3399om|oK5cb=HvrWHh`R!~3e}Or<7x9s+ zPMGA+X&5-Awkx{ThbBeu0M`g+TV*je5t}_$WVc`BK zr|h_V@X@ZLp1=0Se>UHtC#&lLtf3e(Gxv1^S%JZW>GSVg^^#mLW|&P>JePGK)fLnG zy^rAj*9moSbmz?RwZ>B+T`q;pW8;d-{Qq7UR4{3dLmAWSJu&YWL2g^J4*b77 zMpwS71VsynGV9i02<=EW5|;E3Ce|%dn=mDkB-W4>&)tuh!*=*X9S(GWNYe8@exwAZ zPs7i75=x%WIlbYS5=rx$Truq8@e?4DZK)z6(WbM92m*-8*&^8=T=8yRatHv$eXHZb z<&fyOC(~8uHY2OBncdE8+t!LHC{Ym+{sFnB_HqHB*~H5@woI@w1QYTxTYGX9q=%JJ?#fPi;m;5nDyMy|1$&SX z9$1diYIbOR2eCHIkWx!Hl(*DaL%^SaAy3<|8x~dJ1#!RG!$Zi|SVy?LuSzM)1FIG} zEjkd*aq1cxg^v1iB@{weB1x@01~Qo-Mt+}L06mzChTFc8cLk0z>Tu1TzaCQC#NPqu zeblt^hmI{4Yk7EN2_8WPUZoD}p@vnmOU?X`)Tkx}jS)iC>x-2Yrt3cDo@vc5F-kQ= zuA%#q*mPmWHJVT&6!Fk?n;1qcXfZv9xFyQxL$ypy(&Qk*PBi(g#E>31MMj#V_a-dE V28k_-C9oF)kQSF0s{|VQ|1XA&PP_mB literal 37145 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

y{$2eA?T->xqCd%ljlQ|Ub<;c~&*>1{TAt{- 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 Date: Sat, 12 Jan 2019 13:33:26 -0600 Subject: [PATCH 09/14] added white svg's --- src/res/qml/media_keys/outline-pause-24px.svg | 1 + src/res/qml/media_keys/outline-play_arrow-24px.svg | 1 + src/res/qml/media_keys/outline-skip_next-24px.svg | 1 + src/res/qml/media_keys/outline-skip_previous-24px.svg | 1 + src/res/qml/media_keys/outline-stop-24px.svg | 1 + 5 files changed, 5 insertions(+) create mode 100644 src/res/qml/media_keys/outline-pause-24px.svg create mode 100644 src/res/qml/media_keys/outline-play_arrow-24px.svg create mode 100644 src/res/qml/media_keys/outline-skip_next-24px.svg create mode 100644 src/res/qml/media_keys/outline-skip_previous-24px.svg create mode 100644 src/res/qml/media_keys/outline-stop-24px.svg diff --git a/src/res/qml/media_keys/outline-pause-24px.svg b/src/res/qml/media_keys/outline-pause-24px.svg new file mode 100644 index 0000000..f59d7c9 --- /dev/null +++ b/src/res/qml/media_keys/outline-pause-24px.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/res/qml/media_keys/outline-play_arrow-24px.svg b/src/res/qml/media_keys/outline-play_arrow-24px.svg new file mode 100644 index 0000000..2b248b9 --- /dev/null +++ b/src/res/qml/media_keys/outline-play_arrow-24px.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/res/qml/media_keys/outline-skip_next-24px.svg b/src/res/qml/media_keys/outline-skip_next-24px.svg new file mode 100644 index 0000000..23fa6ea --- /dev/null +++ b/src/res/qml/media_keys/outline-skip_next-24px.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/res/qml/media_keys/outline-skip_previous-24px.svg b/src/res/qml/media_keys/outline-skip_previous-24px.svg new file mode 100644 index 0000000..1d08e59 --- /dev/null +++ b/src/res/qml/media_keys/outline-skip_previous-24px.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/res/qml/media_keys/outline-stop-24px.svg b/src/res/qml/media_keys/outline-stop-24px.svg new file mode 100644 index 0000000..2123cee --- /dev/null +++ b/src/res/qml/media_keys/outline-stop-24px.svg @@ -0,0 +1 @@ + \ No newline at end of file From 50fe6748e9eadcf2772bed1d72b639f3f01cf199 Mon Sep 17 00:00:00 2001 From: ykeara Date: Sat, 12 Jan 2019 13:38:18 -0600 Subject: [PATCH 10/14] changed size to 50x50 of svg --- src/res/qml/media_keys/outline-pause-24px.svg | 2 +- src/res/qml/media_keys/outline-play_arrow-24px.svg | 2 +- src/res/qml/media_keys/outline-skip_next-24px.svg | 2 +- src/res/qml/media_keys/outline-skip_previous-24px.svg | 2 +- src/res/qml/media_keys/outline-stop-24px.svg | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/res/qml/media_keys/outline-pause-24px.svg b/src/res/qml/media_keys/outline-pause-24px.svg index f59d7c9..3c8ab22 100644 --- a/src/res/qml/media_keys/outline-pause-24px.svg +++ b/src/res/qml/media_keys/outline-pause-24px.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/res/qml/media_keys/outline-play_arrow-24px.svg b/src/res/qml/media_keys/outline-play_arrow-24px.svg index 2b248b9..ff2dcd6 100644 --- a/src/res/qml/media_keys/outline-play_arrow-24px.svg +++ b/src/res/qml/media_keys/outline-play_arrow-24px.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/res/qml/media_keys/outline-skip_next-24px.svg b/src/res/qml/media_keys/outline-skip_next-24px.svg index 23fa6ea..93bd3ba 100644 --- a/src/res/qml/media_keys/outline-skip_next-24px.svg +++ b/src/res/qml/media_keys/outline-skip_next-24px.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/res/qml/media_keys/outline-skip_previous-24px.svg b/src/res/qml/media_keys/outline-skip_previous-24px.svg index 1d08e59..17c24b2 100644 --- a/src/res/qml/media_keys/outline-skip_previous-24px.svg +++ b/src/res/qml/media_keys/outline-skip_previous-24px.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/res/qml/media_keys/outline-stop-24px.svg b/src/res/qml/media_keys/outline-stop-24px.svg index 2123cee..dd0a6c1 100644 --- a/src/res/qml/media_keys/outline-stop-24px.svg +++ b/src/res/qml/media_keys/outline-stop-24px.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From d308c6005fb67936972c06b6126f121d792f489b Mon Sep 17 00:00:00 2001 From: ykeara Date: Sat, 12 Jan 2019 14:44:43 -0600 Subject: [PATCH 11/14] resized svg back to original hackish fix --- src/res/qml/UtilitiesPage.qml | 66 ++++++++++++------- src/res/qml/media_keys/outline-pause-24px.svg | 1 - .../media_keys/outline-play_arrow-24px.svg | 1 - .../qml/media_keys/outline-skip_next-24px.svg | 1 - .../media_keys/outline-skip_previous-24px.svg | 1 - src/res/qml/media_keys/outline-stop-24px.svg | 1 - .../media_keys/outline_pause_white_24dp.svg | 1 + .../outline_play_arrow_white_24dp.svg | 1 + .../outline_skip_next_white_24dp.svg | 1 + .../outline_skip_previous_white_24dp.svg | 1 + .../media_keys/outline_stop_white_24dp.svg | 1 + 11 files changed, 48 insertions(+), 28 deletions(-) delete mode 100644 src/res/qml/media_keys/outline-pause-24px.svg delete mode 100644 src/res/qml/media_keys/outline-play_arrow-24px.svg delete mode 100644 src/res/qml/media_keys/outline-skip_next-24px.svg delete mode 100644 src/res/qml/media_keys/outline-skip_previous-24px.svg delete mode 100644 src/res/qml/media_keys/outline-stop-24px.svg create mode 100644 src/res/qml/media_keys/outline_pause_white_24dp.svg create mode 100644 src/res/qml/media_keys/outline_play_arrow_white_24dp.svg create mode 100644 src/res/qml/media_keys/outline_skip_next_white_24dp.svg create mode 100644 src/res/qml/media_keys/outline_skip_previous_white_24dp.svg create mode 100644 src/res/qml/media_keys/outline_stop_white_24dp.svg diff --git a/src/res/qml/UtilitiesPage.qml b/src/res/qml/UtilitiesPage.qml index d1ab100..f085376 100644 --- a/src/res/qml/UtilitiesPage.qml +++ b/src/res/qml/UtilitiesPage.qml @@ -349,12 +349,17 @@ MyStackViewPage { property bool playButtonIsPlay: false MyPushButton2 { id: previousSongButton - Layout.preferredHeight: 50 - Layout.preferredWidth: 50 + Layout.preferredHeight: 48 + Layout.preferredWidth: 48 contentItem: Image { - source: "media_keys/outline_skip_previous_white_24dp.png" - sourceSize.width: 50 - sourceSize.height: 50 + source: "media_keys/outline_skip_previous_white_24dp.svg" + sourceSize: Qt.size( imgSP.sourceSize.width*2, imgSP.sourceSize.height*2 ) + Image{ + id: imgSP + source: parent.source + width:0 + height:0 + } anchors.fill: parent } onClicked: { @@ -370,18 +375,23 @@ MyStackViewPage { } MyPushButton2 { id: stopSongButton - Layout.preferredHeight: 50 - Layout.preferredWidth: 50 + Layout.preferredHeight: 48 + Layout.preferredWidth: 48 contentItem: Image { - source: "media_keys/outline_stop_white_24dp.png" - sourceSize.width: 50 - sourceSize.height: 50 + source: "media_keys/outline_stop_white_24dp.svg" + sourceSize: Qt.size( imgS.sourceSize.width*2, imgS.sourceSize.height*2 ) + Image{ + id: imgS + source: parent.source + width:0 + height:0 + } anchors.fill: parent } onClicked: { UtilitiesTabController.sendMediaStopSong() - playPauseSongButton.contentItem.source = "media_keys/outline_play_arrow_white_24dp.png" + playPauseSongButton.contentItem.source = "media_keys/outline_play_arrow_white_24dp.svg" parent.playButtonIsPlay = true } @@ -394,23 +404,28 @@ MyStackViewPage { } MyPushButton2 { id: playPauseSongButton - Layout.preferredHeight: 50 - Layout.preferredWidth: 50 + Layout.preferredHeight: 48 + Layout.preferredWidth: 48 contentItem: Image { // Assume that music is playing when people enter VR. - source: "media_keys/outline_pause_white_24dp.png" - sourceSize.width: 50 - sourceSize.height: 50 + source: "media_keys/outline_pause_white_24dp.svg" + sourceSize: Qt.size( imgP.sourceSize.width*2, imgP.sourceSize.height*2 ) + Image{ + id: imgP + source: parent.source + width:0 + height:0 + } anchors.fill: parent } onClicked: { UtilitiesTabController.sendMediaPausePlay() if (parent.playButtonIsPlay) { - playPauseSongButton.contentItem.source = "media_keys/outline_pause_white_24dp.png" + playPauseSongButton.contentItem.source = "media_keys/outline_pause_white_24dp.svg" parent.playButtonIsPlay = false } else { - playPauseSongButton.contentItem.source = "media_keys/outline_play_arrow_white_24dp.png" + playPauseSongButton.contentItem.source = "media_keys/outline_play_arrow_white_24dp.svg" parent.playButtonIsPlay = true } @@ -425,13 +440,18 @@ MyStackViewPage { } MyPushButton2 { id: nextSongButton - Layout.preferredHeight: 50 - Layout.preferredWidth: 50 + Layout.preferredHeight: 48 + Layout.preferredWidth: 48 contentItem: Image { - source: "media_keys/outline_skip_next_white_24dp.png" - sourceSize.width: 50 - sourceSize.height: 50 + source: "media_keys/outline_skip_next_white_24dp.svg" + sourceSize: Qt.size( imgSN.sourceSize.width*2, imgSN.sourceSize.height*2 ) + Image{ + id: imgSN + source: parent.source + width:0 + height:0 + } anchors.fill: parent } onClicked: { diff --git a/src/res/qml/media_keys/outline-pause-24px.svg b/src/res/qml/media_keys/outline-pause-24px.svg deleted file mode 100644 index 3c8ab22..0000000 --- a/src/res/qml/media_keys/outline-pause-24px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/res/qml/media_keys/outline-play_arrow-24px.svg b/src/res/qml/media_keys/outline-play_arrow-24px.svg deleted file mode 100644 index ff2dcd6..0000000 --- a/src/res/qml/media_keys/outline-play_arrow-24px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/res/qml/media_keys/outline-skip_next-24px.svg b/src/res/qml/media_keys/outline-skip_next-24px.svg deleted file mode 100644 index 93bd3ba..0000000 --- a/src/res/qml/media_keys/outline-skip_next-24px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/res/qml/media_keys/outline-skip_previous-24px.svg b/src/res/qml/media_keys/outline-skip_previous-24px.svg deleted file mode 100644 index 17c24b2..0000000 --- a/src/res/qml/media_keys/outline-skip_previous-24px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/res/qml/media_keys/outline-stop-24px.svg b/src/res/qml/media_keys/outline-stop-24px.svg deleted file mode 100644 index dd0a6c1..0000000 --- a/src/res/qml/media_keys/outline-stop-24px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/res/qml/media_keys/outline_pause_white_24dp.svg b/src/res/qml/media_keys/outline_pause_white_24dp.svg new file mode 100644 index 0000000..f59d7c9 --- /dev/null +++ b/src/res/qml/media_keys/outline_pause_white_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/res/qml/media_keys/outline_play_arrow_white_24dp.svg b/src/res/qml/media_keys/outline_play_arrow_white_24dp.svg new file mode 100644 index 0000000..2b248b9 --- /dev/null +++ b/src/res/qml/media_keys/outline_play_arrow_white_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/res/qml/media_keys/outline_skip_next_white_24dp.svg b/src/res/qml/media_keys/outline_skip_next_white_24dp.svg new file mode 100644 index 0000000..23fa6ea --- /dev/null +++ b/src/res/qml/media_keys/outline_skip_next_white_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/res/qml/media_keys/outline_skip_previous_white_24dp.svg b/src/res/qml/media_keys/outline_skip_previous_white_24dp.svg new file mode 100644 index 0000000..1d08e59 --- /dev/null +++ b/src/res/qml/media_keys/outline_skip_previous_white_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/res/qml/media_keys/outline_stop_white_24dp.svg b/src/res/qml/media_keys/outline_stop_white_24dp.svg new file mode 100644 index 0000000..2123cee --- /dev/null +++ b/src/res/qml/media_keys/outline_stop_white_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file From 95b7eaa664e43447d3a46c4adce0f69d13d20e48 Mon Sep 17 00:00:00 2001 From: ykeara Date: Sat, 12 Jan 2019 14:49:07 -0600 Subject: [PATCH 12/14] SteamVRTab SSOverride update (#40) * Added Manual Override Checkbox * added profile logic/synch fixed bug with profile * Added Function definitions + re-arranged code into more logical blocks * formatting and fixed reset function in steamvrtabcontroler * updated documentation * removed some comments(for later standardization), params as const (where applicable), changed SS minimum value to .2 to match with steamVR minimum * changed c style cast to c++ * re-applied formatting * removed un-used lines in steamvrtabcontroller.h --- Readme.md | 3 +- docs/screenshots/SteamVRPage.png | Bin 58727 -> 67473 bytes src/res/qml/SteamVRPage.qml | 33 +- src/tabcontrollers/SteamVRTabController.cpp | 504 ++++++++++++-------- src/tabcontrollers/SteamVRTabController.h | 19 +- 5 files changed, 344 insertions(+), 215 deletions(-) diff --git a/Readme.md b/Readme.md index 90902a1..76248ba 100644 --- a/Readme.md +++ b/Readme.md @@ -126,7 +126,8 @@ If you want to try latest and greatest unreleased features, you can download lat - **Profile**: Allows to apply/define/delete supersampling profiles that save supersampling and reprojection settings. - **Application Supersampling**: Supersampling setting for OpenVR applications/games. Application supersampling [now behaves linearly](https://steamcommunity.com/games/250820/announcements/detail/1256913672017664045) where 2.0 means twice the number of pixel. - - **Note**: Manual Override for Super-Sampling must be checked in the SteamVR/OpenVR settings menu. + - **Note**: Manual Supersampling Override be checked. +- **Enable Manual Supersampling Override**: Enables user control of Supersampling, instead of SteamVR auto profiles. - **Enable Motion Smoothing**: Enables Motion Smoothing, and disables asynchronous reprojection. - **Restart SteamVR**: Restart SteamVR (May crash the Steam overlay when SteamVR Home is running when you restart. Therefore I advice that you close SteamVR Home before restarting). diff --git a/docs/screenshots/SteamVRPage.png b/docs/screenshots/SteamVRPage.png index 53b18c64951a8b6b9e681dc5a634d4c8d15c0ddc..81c835b1506bbb224fdde91ae6213f74e8feb7ed 100644 GIT binary patch literal 67473 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 = var_widget; } -void SteamVRTabController::reloadSteamVRProfiles() -{ - steamvrProfiles.clear(); - auto settings = OverlayController::appSettings(); - settings->beginGroup( "steamVRSettings" ); - auto profileCount = settings->beginReadArray( "steamVRProfiles" ); - for ( int i = 0; i < profileCount; i++ ) - { - settings->setArrayIndex( i ); - steamvrProfiles.emplace_back(); - auto& entry = steamvrProfiles[i]; - entry.profileName - = settings->value( "profileName" ).toString().toStdString(); - entry.includesSupersampling - = settings->value( "includesSupersampling", false ).toBool(); - if ( entry.includesSupersampling ) - { - entry.supersampling - = settings->value( "supersampling", 1.0f ).toFloat(); - } - entry.includesSupersampleFiltering - = settings->value( "includesSupersampleFiltering", false ).toBool(); - if ( entry.includesSupersampleFiltering ) - { - entry.supersampleFiltering - = settings->value( "supersampleFiltering", true ).toBool(); - } - entry.includesMotionSmoothing - = settings->value( "includesMotionSmoothing", false ).toBool(); - if ( entry.includesMotionSmoothing ) - { - entry.motionSmooth - = settings->value( "motionSmooth", true ).toBool(); - } - } - settings->endArray(); - settings->endGroup(); -} - -void SteamVRTabController::saveSteamVRProfiles() -{ - auto settings = OverlayController::appSettings(); - settings->beginGroup( "steamVRSettings" ); - settings->beginWriteArray( "steamVRProfiles" ); - unsigned i = 0; - for ( auto& p : steamvrProfiles ) - { - settings->setArrayIndex( i ); - settings->setValue( "profileName", - QString::fromStdString( p.profileName ) ); - settings->setValue( "includesSupersampling", p.includesSupersampling ); - if ( p.includesSupersampling ) - { - settings->setValue( "supersampling", p.supersampling ); - } - settings->setValue( "includesSupersampleFiltering", - p.includesSupersampleFiltering ); - if ( p.includesSupersampleFiltering ) - { - settings->setValue( "supersampleFiltering", - p.supersampleFiltering ); - } - settings->setValue( "includesMotionSmoothing", - p.includesMotionSmoothing ); - if ( p.includesMotionSmoothing ) - { - settings->setValue( "motionSmooth", p.motionSmooth ); - } - - i++; - } - settings->endArray(); - settings->endGroup(); -} - -Q_INVOKABLE unsigned SteamVRTabController::getSteamVRProfileCount() -{ - return ( unsigned ) steamvrProfiles.size(); -} - -Q_INVOKABLE QString - SteamVRTabController::getSteamVRProfileName( unsigned index ) -{ - if ( index >= steamvrProfiles.size() ) - { - return QString(); - } - else - { - return QString::fromStdString( steamvrProfiles[index].profileName ); - } -} -// TODO DISC does it make any sense to check these settings once every ~ -// 1second. primary purpose seems to be to re-sync settings if changed via other -// means? void SteamVRTabController::eventLoopTick() { if ( settingsUpdateCounter >= 50 ) { vr::EVRSettingsError vrSettingsError; + // checks supersampling override and resynchs if necessry + // also prints error if can't find. + auto sso = vr::VRSettings()->GetBool( + vr::k_pch_SteamVR_Section, + vr::k_pch_SteamVR_SupersampleManualOverride_Bool, + &vrSettingsError ); + if ( vrSettingsError != vr::VRSettingsError_None ) + { + LOG( WARNING ) << "Could not read \"" + << vr::k_pch_SteamVR_SupersampleManualOverride_Bool + << "\" setting: " + << vr::VRSettings()->GetSettingsErrorNameFromEnum( + vrSettingsError ); + } + setAllowSupersampleOverride( sso ); // checks supersampling and re-synchs if necessary auto ss = vr::VRSettings()->GetFloat( vr::k_pch_SteamVR_Section, @@ -185,10 +106,192 @@ void SteamVRTabController::eventLoopTick() } } -void SteamVRTabController::setSuperSampling( float value, bool notify ) +/* -----------------------------------------*/ +/*------------------------------------------*/ +/*Profile Logic Functions*/ + +void SteamVRTabController::addSteamVRProfile( + const QString name, + const bool includeSupersampling, + const bool includeSupersampleFiltering, + const bool includeMotionSmoothing ) +{ + SteamVRProfile* profile = nullptr; + for ( auto& p : steamvrProfiles ) + { + if ( p.profileName.compare( name.toStdString() ) == 0 ) + { + profile = &p; + break; + } + } + if ( !profile ) + { + auto i = steamvrProfiles.size(); + steamvrProfiles.emplace_back(); + profile = &steamvrProfiles[i]; + } + profile->profileName = name.toStdString(); + profile->includesSupersampling = includeSupersampling; + if ( includeSupersampling ) + { + profile->supersampleOverride = m_allowSupersampleOverride; + profile->supersampling = m_superSampling; + } + profile->includesSupersampleFiltering = includeSupersampleFiltering; + if ( includeSupersampleFiltering ) + { + profile->supersampleFiltering = m_allowSupersampleFiltering; + } + profile->includesMotionSmoothing = includeMotionSmoothing; + if ( includeMotionSmoothing ) + { + profile->motionSmooth = m_motionSmoothing; + } + saveSteamVRProfiles(); + OverlayController::appSettings()->sync(); + emit steamVRProfilesUpdated(); + emit steamVRProfileAdded(); +} + +void SteamVRTabController::applySteamVRProfile( const unsigned index ) +{ + if ( index < steamvrProfiles.size() ) + { + auto& profile = steamvrProfiles[index]; + if ( profile.includesSupersampling ) + { + setAllowSupersampleOverride( profile.supersampleOverride ); + setSuperSampling( profile.supersampling ); + } + if ( profile.includesSupersampleFiltering ) + { + setAllowSupersampleFiltering( profile.supersampleFiltering ); + } + if ( profile.includesMotionSmoothing ) + { + setMotionSmoothing( profile.motionSmooth ); + } + vr::VRSettings()->Sync( true ); + } +} + +void SteamVRTabController::deleteSteamVRProfile( const unsigned index ) +{ + if ( index < steamvrProfiles.size() ) + { + auto pos = steamvrProfiles.begin() + index; + steamvrProfiles.erase( pos ); + saveSteamVRProfiles(); + OverlayController::appSettings()->sync(); + emit steamVRProfilesUpdated(); + } +} + +void SteamVRTabController::reloadSteamVRProfiles() +{ + steamvrProfiles.clear(); + auto settings = OverlayController::appSettings(); + settings->beginGroup( "steamVRSettings" ); + auto profileCount = settings->beginReadArray( "steamVRProfiles" ); + for ( int i = 0; i < profileCount; i++ ) + { + settings->setArrayIndex( i ); + steamvrProfiles.emplace_back(); + auto& entry = steamvrProfiles[i]; + entry.profileName + = settings->value( "profileName" ).toString().toStdString(); + entry.includesSupersampling + = settings->value( "includesSupersampling", false ).toBool(); + if ( entry.includesSupersampling ) + { + entry.supersampleOverride + = settings->value( "supersamplingOverride", false ).toBool(); + entry.supersampling + = settings->value( "supersampling", 1.0f ).toFloat(); + } + entry.includesSupersampleFiltering + = settings->value( "includesSupersampleFiltering", false ).toBool(); + if ( entry.includesSupersampleFiltering ) + { + entry.supersampleFiltering + = settings->value( "supersampleFiltering", true ).toBool(); + } + entry.includesMotionSmoothing + = settings->value( "includesMotionSmoothing", false ).toBool(); + if ( entry.includesMotionSmoothing ) + { + entry.motionSmooth + = settings->value( "motionSmooth", true ).toBool(); + } + } + settings->endArray(); + settings->endGroup(); +} + +void SteamVRTabController::saveSteamVRProfiles() +{ + auto settings = OverlayController::appSettings(); + settings->beginGroup( "steamVRSettings" ); + settings->beginWriteArray( "steamVRProfiles" ); + unsigned i = 0; + for ( auto& p : steamvrProfiles ) + { + settings->setArrayIndex( i ); + settings->setValue( "profileName", + QString::fromStdString( p.profileName ) ); + settings->setValue( "includesSupersampling", p.includesSupersampling ); + if ( p.includesSupersampling ) + { + settings->setValue( "supersamplingOverride", + p.supersampleOverride ); + settings->setValue( "supersampling", p.supersampling ); + } + settings->setValue( "includesSupersampleFiltering", + p.includesSupersampleFiltering ); + if ( p.includesSupersampleFiltering ) + { + settings->setValue( "supersampleFiltering", + p.supersampleFiltering ); + } + settings->setValue( "includesMotionSmoothing", + p.includesMotionSmoothing ); + if ( p.includesMotionSmoothing ) + { + settings->setValue( "motionSmooth", p.motionSmooth ); + } + + i++; + } + settings->endArray(); + settings->endGroup(); +} +int SteamVRTabController::getSteamVRProfileCount() +{ + return static_cast( steamvrProfiles.size() ); +} + +QString SteamVRTabController::getSteamVRProfileName( const unsigned index ) +{ + if ( index >= steamvrProfiles.size() ) + { + return QString(); + } + else + { + return QString::fromStdString( steamvrProfiles[index].profileName ); + } +} + +/* -----------------------------------------*/ +/*------------------------------------------*/ +/*SuperSample (value) functions*/ + +void SteamVRTabController::setSuperSampling( float value, const bool notify ) { bool override = false; - if ( value <= 0.01f ) + // Mirrors Desktop Clamp + if ( value <= 0.2f ) { LOG( WARNING ) << "Encountered a supersampling value <= 0.01, setting " "supersampling to 1.0"; @@ -215,26 +318,16 @@ float SteamVRTabController::superSampling() const { return m_superSampling; } - +/* -----------------------------------------*/ +/*------------------------------------------*/ +/*Motion Smoothing boolean/toggle functions*/ bool SteamVRTabController::motionSmoothing() const { return m_motionSmoothing; } -/* -Name: setMotionSmoothing - -input: bool value, bool notify -output: none - -@value - value to be passed to m_motionSMoothing -@notify - whether QML is informed of change (default true) - -Description: -sets value of m_motionSmoothing AND applies changes in Steam/OpenVr -*/ - -void SteamVRTabController::setMotionSmoothing( bool value, bool notify ) +void SteamVRTabController::setMotionSmoothing( const bool value, + const bool notify ) { if ( m_motionSmoothing != value ) { @@ -250,21 +343,6 @@ void SteamVRTabController::setMotionSmoothing( bool value, bool notify ) } } -/* -Name: initMotionSmoothing - -input: none -output: none - -description: Gets the Value of Motion Smoothing from Steam/OpenVR. -Sets the member variable of motion smoothing for UI -Adds error to log if unable to find variable. - -OnError: -default value of true for motion smoothing is initialized, if user has disabled -motion smoothing on their end, they will have to toggle the variable twice to -get it to re-sync. -*/ void SteamVRTabController::initMotionSmoothing() { bool temporary = false; @@ -285,13 +363,17 @@ void SteamVRTabController::initMotionSmoothing() setMotionSmoothing( temporary, true ); } +/* -----------------------------------------*/ +/*------------------------------------------*/ +/*Supersample Filtering boolean/toggle functions*/ + bool SteamVRTabController::allowSupersampleFiltering() const { return m_allowSupersampleFiltering; } -void SteamVRTabController::setAllowSupersampleFiltering( bool value, - bool notify ) +void SteamVRTabController::setAllowSupersampleFiltering( const bool value, + const bool notify ) { if ( m_allowSupersampleFiltering != value ) { @@ -309,6 +391,56 @@ void SteamVRTabController::setAllowSupersampleFiltering( bool value, } } +/* -----------------------------------------*/ +/*------------------------------------------*/ +/*SuperSampling Override boolean/toggle functions*/ + +bool SteamVRTabController::allowSupersampleOverride() const +{ + return m_allowSupersampleOverride; +} + +void SteamVRTabController::setAllowSupersampleOverride( const bool value, + const bool notify ) +{ + if ( m_allowSupersampleOverride != value ) + { + m_allowSupersampleOverride = value; + vr::VRSettings()->SetBool( + vr::k_pch_SteamVR_Section, + vr::k_pch_SteamVR_SupersampleManualOverride_Bool, + m_allowSupersampleOverride ); + vr::VRSettings()->Sync(); + if ( notify ) + { + emit allowSupersampleOverrideChanged( m_allowSupersampleOverride ); + } + } +} + +void SteamVRTabController::initSupersampleOverride() +{ + bool temporary = false; + vr::EVRSettingsError vrSettingsError; + temporary = vr::VRSettings()->GetBool( + vr::k_pch_SteamVR_Section, + vr::k_pch_SteamVR_SupersampleManualOverride_Bool, + &vrSettingsError ); + if ( vrSettingsError != vr::VRSettingsError_None ) + { + LOG( WARNING ) << "Could not get SuperSampling Override State \"" + << vr::k_pch_SteamVR_SupersampleManualOverride_Bool + << "\" setting: " + << vr::VRSettings()->GetSettingsErrorNameFromEnum( + vrSettingsError ); + } + vr::VRSettings()->Sync(); + setAllowSupersampleOverride( temporary, true ); +} + +/*------------------------------------------*/ +/* -----------------------------------------*/ + void SteamVRTabController::reset() { vr::EVRSettingsError vrSettingsError; @@ -339,6 +471,45 @@ void SteamVRTabController::reset() vrSettingsError ); } + vr::VRSettings()->RemoveKeyInSection( + vr::k_pch_SteamVR_Section, + vr::k_pch_SteamVR_SupersampleManualOverride_Bool, + &vrSettingsError ); + if ( vrSettingsError != vr::VRSettingsError_None ) + { + LOG( WARNING ) << "Could not remove \"" + << vr::k_pch_SteamVR_SupersampleManualOverride_Bool + << "\" setting: " + << vr::VRSettings()->GetSettingsErrorNameFromEnum( + vrSettingsError ); + } + + vr::VRSettings()->RemoveKeyInSection( + vr::k_pch_SteamVR_Section, + vr::k_pch_SteamVR_SupersampleScale_Float, + &vrSettingsError ); + if ( vrSettingsError != vr::VRSettingsError_None ) + { + LOG( WARNING ) << "Could not remove \"" + << vr::k_pch_SteamVR_SupersampleScale_Float + << "\" setting: " + << vr::VRSettings()->GetSettingsErrorNameFromEnum( + vrSettingsError ); + } + + vr::VRSettings()->RemoveKeyInSection( + vr::k_pch_SteamVR_Section, + vr::k_pch_SteamVR_MotionSmoothing_Bool, + &vrSettingsError ); + if ( vrSettingsError != vr::VRSettingsError_None ) + { + LOG( WARNING ) << "Could not remove \"" + << vr::k_pch_SteamVR_MotionSmoothing_Bool + << "\" setting: " + << vr::VRSettings()->GetSettingsErrorNameFromEnum( + vrSettingsError ); + } + vr::VRSettings()->Sync(); settingsUpdateCounter = 999; // Easiest way to get default values } @@ -352,79 +523,4 @@ void SteamVRTabController::restartSteamVR() QProcess::startDetached( cmd ); } -void SteamVRTabController::addSteamVRProfile( QString name, - bool includeSupersampling, - bool includeSupersampleFiltering, - bool includeMotionSmoothing ) -{ - SteamVRProfile* profile = nullptr; - for ( auto& p : steamvrProfiles ) - { - if ( p.profileName.compare( name.toStdString() ) == 0 ) - { - profile = &p; - break; - } - } - if ( !profile ) - { - auto i = steamvrProfiles.size(); - steamvrProfiles.emplace_back(); - profile = &steamvrProfiles[i]; - } - profile->profileName = name.toStdString(); - profile->includesSupersampling = includeSupersampling; - if ( includeSupersampling ) - { - profile->supersampling = m_superSampling; - } - profile->includesSupersampleFiltering = includeSupersampleFiltering; - if ( includeSupersampleFiltering ) - { - profile->supersampleFiltering = m_allowSupersampleFiltering; - } - profile->includesMotionSmoothing = includeMotionSmoothing; - if ( includeMotionSmoothing ) - { - profile->motionSmooth = m_motionSmoothing; - } - saveSteamVRProfiles(); - OverlayController::appSettings()->sync(); - emit steamVRProfilesUpdated(); - emit steamVRProfileAdded(); -} - -void SteamVRTabController::applySteamVRProfile( unsigned index ) -{ - if ( index < steamvrProfiles.size() ) - { - auto& profile = steamvrProfiles[index]; - if ( profile.includesSupersampling ) - { - setSuperSampling( profile.supersampling ); - } - if ( profile.includesSupersampleFiltering ) - { - setAllowSupersampleFiltering( profile.supersampleFiltering ); - } - if ( profile.includesMotionSmoothing ) - { - setMotionSmoothing( profile.motionSmooth ); - } - vr::VRSettings()->Sync( true ); - } -} - -void SteamVRTabController::deleteSteamVRProfile( unsigned index ) -{ - if ( index < steamvrProfiles.size() ) - { - auto pos = steamvrProfiles.begin() + index; - steamvrProfiles.erase( pos ); - saveSteamVRProfiles(); - OverlayController::appSettings()->sync(); - emit steamVRProfilesUpdated(); - } -} - } // namespace advsettings diff --git a/src/tabcontrollers/SteamVRTabController.h b/src/tabcontrollers/SteamVRTabController.h index a6c2220..1974bc6 100644 --- a/src/tabcontrollers/SteamVRTabController.h +++ b/src/tabcontrollers/SteamVRTabController.h @@ -21,6 +21,7 @@ struct SteamVRProfile bool supersampleFiltering = false; bool motionSmooth = false; bool includesMotionSmoothing = false; + bool supersampleOverride = false; }; class SteamVRTabController : public QObject @@ -28,27 +29,27 @@ class SteamVRTabController : public QObject Q_OBJECT Q_PROPERTY( float superSampling READ superSampling WRITE setSuperSampling NOTIFY superSamplingChanged ) - /*Q_PROPERTY( - float compositorSuperSampling READ compositorSuperSampling WRITE - setCompositorSuperSampling NOTIFY compositorSuperSamplingChanged ) - */ Q_PROPERTY( bool motionSmoothing READ motionSmoothing WRITE setMotionSmoothing NOTIFY motionSmoothingChanged ) Q_PROPERTY( bool allowSupersampleFiltering READ allowSupersampleFiltering WRITE setAllowSupersampleFiltering NOTIFY allowSupersampleFilteringChanged ) + Q_PROPERTY( + bool allowSupersampleOverride READ allowSupersampleOverride WRITE + setAllowSupersampleOverride NOTIFY allowSupersampleOverrideChanged ) private: OverlayController* parent; QQuickWindow* widget; float m_superSampling = 1.0; - // float m_compositorSuperSampling = 1.0; bool m_motionSmoothing = true; bool m_allowSupersampleFiltering = true; + bool m_allowSupersampleOverride = false; void initMotionSmoothing(); + void initSupersampleOverride(); std::vector steamvrProfiles; @@ -61,21 +62,21 @@ public: void eventLoopTick(); float superSampling() const; - // float compositorSuperSampling() const; bool motionSmoothing() const; bool allowSupersampleFiltering() const; + bool allowSupersampleOverride() const; void reloadSteamVRProfiles(); void saveSteamVRProfiles(); - Q_INVOKABLE unsigned getSteamVRProfileCount(); + Q_INVOKABLE int getSteamVRProfileCount(); Q_INVOKABLE QString getSteamVRProfileName( unsigned index ); public slots: void setSuperSampling( float value, bool notify = true ); - // void setCompositorSuperSampling( float value, bool notify = true ); void setMotionSmoothing( bool value, bool notify = true ); void setAllowSupersampleFiltering( bool value, bool notify = true ); + void setAllowSupersampleOverride( bool value, bool notify = true ); void addSteamVRProfile( QString name, bool includeSupersampling, @@ -89,9 +90,9 @@ public slots: signals: void superSamplingChanged( float value ); - // void compositorSuperSamplingChanged( float value ); void motionSmoothingChanged( bool value ); void allowSupersampleFilteringChanged( bool value ); + void allowSupersampleOverrideChanged( bool value ); void steamVRProfilesUpdated(); void steamVRProfileAdded(); From a5da5b71083c5e54eaab9c5751a205f2bd9f6b8c Mon Sep 17 00:00:00 2001 From: Vasily Date: Sat, 12 Jan 2019 21:55:44 +0100 Subject: [PATCH 13/14] Remove png files --- .../qml/media_keys/outline_pause_white_24dp.png | Bin 90 -> 0 bytes .../media_keys/outline_play_arrow_white_24dp.png | Bin 256 -> 0 bytes .../media_keys/outline_skip_next_white_24dp.png | Bin 257 -> 0 bytes .../outline_skip_previous_white_24dp.png | Bin 254 -> 0 bytes .../qml/media_keys/outline_stop_white_24dp.png | Bin 97 -> 0 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/res/qml/media_keys/outline_pause_white_24dp.png delete mode 100644 src/res/qml/media_keys/outline_play_arrow_white_24dp.png delete mode 100644 src/res/qml/media_keys/outline_skip_next_white_24dp.png delete mode 100644 src/res/qml/media_keys/outline_skip_previous_white_24dp.png delete mode 100644 src/res/qml/media_keys/outline_stop_white_24dp.png diff --git a/src/res/qml/media_keys/outline_pause_white_24dp.png b/src/res/qml/media_keys/outline_pause_white_24dp.png deleted file mode 100644 index f49aed757118a941b567629ec217cde1aaf257e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZA`BpB)|k7xlYrjj7PUzopr0AL7>TR0|Qg+LTQlz2Xzi121f=fM}}?&LB$CQT1);!o{Csdp|AUX_kr_g&g?0C zHeWJ%MsS(@gQve4-ekUJdvI`ugYkq8&Qj)rrOQP>ObaPtE>O6{Ip?FA$P?z$q&>X6 z4;zYEdUkv+TkP*=GGW0{zI<0-Abo`Ay^Fh5K*}txlBLr#R&R4*;R&8?qp-ZvXZEG< z4;EEl+@n14U2^!@H^qC^uE@^(d4}(A>!j{fS4TqVM?`Byz%(l&QHco6{ zQhxWxMl#sMTWrBWsqzKc@+XHq)$ From e75a4c235316482635c39b23be382a18b6dd9482 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sat, 12 Jan 2019 23:34:45 +0100 Subject: [PATCH 14/14] use QStandardPaths to get resource locations (#44) * use QStandardPaths to get resource locations While this shouldn't change behaviour for windows, it allows installing the resource files seperate from the binary on unix systems * initialize battery overlay handles to 0 --- src/main.cpp | 7 ++-- src/overlaycontroller.cpp | 18 +++++----- src/tabcontrollers/AudioTabController.cpp | 13 +++---- src/tabcontrollers/UtilitiesTabController.cpp | 35 ++++++++++--------- src/tabcontrollers/UtilitiesTabController.h | 4 +-- 5 files changed, 43 insertions(+), 34 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 5c72d6b..65eb57a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -411,8 +411,11 @@ int main( int argc, char* argv[] ) advsettings::OverlayController controller( desktopMode, noSound, qmlEngine ); - QQmlComponent component( - &qmlEngine, QUrl::fromLocalFile( "res/qml/mainwidget.qml" ) ); + QString path = QStandardPaths::locate( + QStandardPaths::AppDataLocation, + QStringLiteral( "res/qml/mainwidget.qml" ) ); + + QQmlComponent component( &qmlEngine, QUrl::fromLocalFile( path ) ); auto errors = component.errors(); for ( auto& e : errors ) { diff --git a/src/overlaycontroller.cpp b/src/overlaycontroller.cpp index 1d84ec9..a585437 100644 --- a/src/overlaycontroller.cpp +++ b/src/overlaycontroller.cpp @@ -85,8 +85,9 @@ OverlayController::OverlayController( bool desktopMode, << focusChangedSoundFile; } - QString alarm01SoundFile = QApplication::applicationDirPath().append( - "/res/sounds/alarm01.wav" ); + QString alarm01SoundFile + = QStandardPaths::locate( QStandardPaths::AppDataLocation, + QStringLiteral( "res/sounds/alarm01.wav" ) ); QFileInfo alarm01SoundFileInfo( alarm01SoundFile ); if ( alarm01SoundFileInfo.exists() && alarm01SoundFileInfo.isFile() ) { @@ -433,13 +434,14 @@ void OverlayController::SetWidget( QQuickItem* quickItem, m_ulOverlayHandle, vr::VROverlayInputMethod_Mouse ); vr::VROverlay()->SetOverlayFlag( m_ulOverlayHandle, vr::VROverlayFlags_SendVRScrollEvents, true ); - std::string thumbIconPath - = QApplication::applicationDirPath().toStdString() - + "\\res\\thumbicon.png"; - if ( QFile::exists( QString::fromStdString( thumbIconPath ) ) ) + QString thumbIconPath + = QStandardPaths::locate( QStandardPaths::AppDataLocation, + QStringLiteral( "res/thumbicon.png" ) ); + if ( QFile::exists( thumbIconPath ) ) { - vr::VROverlay()->SetOverlayFromFile( m_ulOverlayThumbnailHandle, - thumbIconPath.c_str() ); + vr::VROverlay()->SetOverlayFromFile( + m_ulOverlayThumbnailHandle, + thumbIconPath.toStdString().c_str() ); } else { diff --git a/src/tabcontrollers/AudioTabController.cpp b/src/tabcontrollers/AudioTabController.cpp index dd0feb8..94e671e 100644 --- a/src/tabcontrollers/AudioTabController.cpp +++ b/src/tabcontrollers/AudioTabController.cpp @@ -70,13 +70,14 @@ void AudioTabController::initStage2( OverlayController* var_parent, notifKey.c_str(), notifKey.c_str(), &m_ulNotificationOverlayHandle ); if ( overlayError == vr::VROverlayError_None ) { - std::string notifIconPath - = QApplication::applicationDirPath().toStdString() - + "/res/qml/ptt_notification.png"; - if ( QFile::exists( QString::fromStdString( notifIconPath ) ) ) + QString notifIconPath = QStandardPaths::locate( + QStandardPaths::AppDataLocation, + QStringLiteral( "/res/qml/ptt_notification.png" ) ); + if ( QFile::exists( notifIconPath ) ) { - vr::VROverlay()->SetOverlayFromFile( m_ulNotificationOverlayHandle, - notifIconPath.c_str() ); + vr::VROverlay()->SetOverlayFromFile( + m_ulNotificationOverlayHandle, + notifIconPath.toStdString().c_str() ); vr::VROverlay()->SetOverlayWidthInMeters( m_ulNotificationOverlayHandle, 0.02f ); vr::HmdMatrix34_t notificationTransform diff --git a/src/tabcontrollers/UtilitiesTabController.cpp b/src/tabcontrollers/UtilitiesTabController.cpp index 49812fa..948492e 100644 --- a/src/tabcontrollers/UtilitiesTabController.cpp +++ b/src/tabcontrollers/UtilitiesTabController.cpp @@ -267,6 +267,14 @@ void UtilitiesTabController::modAlarmTimeMinute( int value, bool notify ) } } +QString getBatteryIconPath( int batteryState ) +{ + QString batteryPrefix = "/res/battery_"; + return QStandardPaths::locate( + QStandardPaths::AppDataLocation, + batteryPrefix + QString::number( batteryState ) + ".png" ); +} + vr::VROverlayHandle_t createBatteryOverlay( vr::TrackedDeviceIndex_t index ) { vr::VROverlayHandle_t handle = vr::k_ulOverlayHandleInvalid; @@ -276,13 +284,11 @@ vr::VROverlayHandle_t createBatteryOverlay( vr::TrackedDeviceIndex_t index ) batteryKey.c_str(), batteryKey.c_str(), &handle ); if ( overlayError == vr::VROverlayError_None ) { - std::string batteryIconPath - = QApplication::applicationDirPath().toStdString() - + "/res/battery_0.png"; - if ( QFile::exists( QString::fromStdString( batteryIconPath ) ) ) + QString batteryIconPath = getBatteryIconPath( 0 ); + if ( QFile::exists( batteryIconPath ) ) { - vr::VROverlay()->SetOverlayFromFile( handle, - batteryIconPath.c_str() ); + vr::VROverlay()->SetOverlayFromFile( + handle, batteryIconPath.toStdString().c_str() ); vr::VROverlay()->SetOverlayWidthInMeters( handle, 0.05f ); vr::HmdMatrix34_t notificationTransform = { { { 1.0f, 0.0f, 0.0f, 0.00f }, @@ -486,8 +492,7 @@ void UtilitiesTabController::eventLoopTick() if ( deviceClass == vr::ETrackedDeviceClass::TrackedDeviceClass_GenericTracker ) { - if ( m_batteryOverlayHandles[i] - == vr::k_ulOverlayHandleInvalid ) + if ( m_batteryOverlayHandles[i] == 0 ) { LOG( INFO ) << "Creating battery overlay for device " << i; m_batteryOverlayHandles[i] = createBatteryOverlay( i ); @@ -529,17 +534,15 @@ void UtilitiesTabController::eventLoopTick() { LOG( INFO ) << "Updating battery overlay for device " << i - << " to " << batteryState << "(" << battery << ""; - std::string batteryIconPath - = QApplication::applicationDirPath().toStdString() - + "/res/battery_" + std::to_string( batteryState ) - + ".png"; - if ( QFile::exists( - QString::fromStdString( batteryIconPath ) ) ) + << " to " << batteryState << "(" << battery << ")" + << QString::number( m_batteryOverlayHandles[i] ); + QString batteryIconPath + = getBatteryIconPath( batteryState ); + if ( QFile::exists( batteryIconPath ) ) { vr::VROverlay()->SetOverlayFromFile( m_batteryOverlayHandles[i], - batteryIconPath.c_str() ); + batteryIconPath.toStdString().c_str() ); } else { diff --git a/src/tabcontrollers/UtilitiesTabController.h b/src/tabcontrollers/UtilitiesTabController.h index 1eb601d..d73f8e8 100644 --- a/src/tabcontrollers/UtilitiesTabController.h +++ b/src/tabcontrollers/UtilitiesTabController.h @@ -44,8 +44,8 @@ private: QTime m_alarmLastCheckTime; bool m_steamDesktopOverlayAvailable = false; float m_steamDesktopOverlayWidth = 4.0f; - vr::VROverlayHandle_t - m_batteryOverlayHandles[vr::k_unMaxTrackedDeviceCount]; + vr::VROverlayHandle_t m_batteryOverlayHandles[vr::k_unMaxTrackedDeviceCount] + = { 0 }; int m_batteryState[vr::k_unMaxTrackedDeviceCount]; bool m_batteryVisible[vr::k_unMaxTrackedDeviceCount];