From 73f9766de7ac3a9ff8014f23cd30d02e92037e5b Mon Sep 17 00:00:00 2001 From: Vasily Date: Fri, 11 Jan 2019 23:58:32 +0100 Subject: [PATCH 01/12] 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/12] 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/12] 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/12] 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/12] 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/12] 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/12] 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/12] 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 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 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/12] 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/12] 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/12] 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 a5da5b71083c5e54eaab9c5751a205f2bd9f6b8c Mon Sep 17 00:00:00 2001 From: Vasily Date: Sat, 12 Jan 2019 21:55:44 +0100 Subject: [PATCH 12/12] 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)$