5.6.2 (#612)
* add nlhomann json header * add get scene app fn * add get current binding and related logic * add save binding file to settings folder * apply binding fn added fixed uid bug * add button logic to QML, add enable Bind Setting * add finding logic for all custom bind * fix minor qml issues * fix get controllername bug, fix bug with save bind * fix regex issue * change webrequest for selectconfig * change to properly urlify path to send * fix race condition web requests * change steamvr tab qml formatting * change color scheme * change colors of icons to text color * change bind qml better for better ux * add possible workaround for space drag issues * add deact color to pushbutton * increment version * adjust button size in movecenter * move nlhomann json * fix PKGBUILD to include missing dependency (#606) (#613) It turns out qt5-websockets needs to be included for a successful build. Co-authored-by: James R <71466513+ColdIce1605@users.noreply.github.com> * fix warning * improved logging messages around perapp bindings * improve getsceneappID logging * add HMD based controller Finding * improve logging controller name * change logging around initial chaperone calibration * increment version * improve logging/error handling around sceneappid failures * added fallback for getting scene app by pid * update version string * update documentation Co-authored-by: James R <71466513+ColdIce1605@users.noreply.github.com>
@@ -365,6 +365,20 @@ These version are not stable and this should be considered for advanced users on
|
||||
- **Camera for Bounds**: Your camera view will replace your vr view as you near/exit chaperone
|
||||
- **Camera for Dashboard**: You will have a small camera view attached to your controller when you have the dashboard active.
|
||||
- **Camera for Room View**: You will have a Tron/Shadow version of the room when double-clicking system button.
|
||||
- **Binds**
|
||||
- **Enable Per-App**: Enables Per App Binding Feature
|
||||
- **Application**: Application to set Per app Bindings
|
||||
- **Common Overlay App Keys**
|
||||
- (default) [OVR Advanced Settings](https://store.steampowered.com/app/1009850/OVR_Advanced_Settings/) = steam.overlay.1009850
|
||||
- [OVR Toolkit](https://store.steampowered.com/app/1068820/OVR_Toolkit/) = steam.overlay.1068820
|
||||
- [XSOverlay](https://store.steampowered.com/app/1173510/XSOverlay/) = steam.overlay.1173510
|
||||
- [Desktop +](https://store.steampowered.com/app/1494460/Desktop/) = steam.overlay.1494460
|
||||
- [fpsVR](https://store.steampowered.com/app/908520/fpsVR/) = steam.overlay.908520
|
||||
- [LIV](https://store.steampowered.com/app/755540/LIV/) = steam.overlay.755540
|
||||
- **Open Bindings**: another shortcut to the SteamVR Binding Menu
|
||||
- **Save Current Binding of Selected App**:
|
||||
- **For Current Game**: Saves your Current Binding of the selected game to be used on a per-app basis for this game.
|
||||
- **As Default**: Saves your Current Binding of the selected game to be used if no other bindings are found when a new game loads.
|
||||
- **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).
|
||||
|
||||
## - SteamVR Pair Page
|
||||
@@ -437,6 +451,7 @@ Allows users to temporarily move and rotate the center of the playspace. This al
|
||||
- **Left/Right Hand**: Toggles functionality (must be active in addition to binding via input system to work.)
|
||||
- **Comfort Mode**: Limits the rate at which your movement updates, reducing smoothness so that perceived motion starts to feel more like mini-teleports. Higher values reduce smoothness more.
|
||||
- **Force Bounds**: Forces the display of the chaperone bounds during Space Drag.
|
||||
- **Ignore Boundary State**: Will for this session, ignroe the current state of the chaperone(boundary), this should improve compatibility with third party hmd's
|
||||
- **Drag Multiplier**: Adds a Multiplier to the distance of your drag.
|
||||
- **Height Toggle**: Toggle between zero and an offset for gravity floor height. If gravity is inactive the user is also moved to this offset. (Example: allows for quick switching between a seated and standing height.) Can be bound via SteamVr Input System.
|
||||
- **On**: Current toggle state, Binds directly modify this.
|
||||
|
||||
@@ -1 +1 @@
|
||||
5.5.0-release
|
||||
5.6.2-release
|
||||
@@ -40,6 +40,7 @@ DISTFILES += \
|
||||
src/res/qml/steamvr_page/steamvr_additional/* \
|
||||
src/res/qml/steamvr_page/camera/* \
|
||||
src/res/qml/steamvr_page/steamvrmisc/* \
|
||||
src/res/qml/steamvr_page/steamvrbind/* \
|
||||
src/res/qml/utilities_page/* \
|
||||
src/res/qml/utilities_page/media_keys/* \
|
||||
src/res/qml/utilities_page/keyboard_utils/* \
|
||||
|
||||
@@ -17,6 +17,7 @@ SOURCES += src/main.cpp\
|
||||
src/openvr/ovr_overlay_wrapper.cpp \
|
||||
src/openvr/ovr_system_wrapper.cpp \
|
||||
src/openvr/lh_console_util.cpp \
|
||||
src/openvr/ovr_application_wrapper.cpp \
|
||||
src/utils/setup.cpp \
|
||||
src/utils/paths.cpp \
|
||||
src/utils/FrameRateUtils.cpp \
|
||||
@@ -55,6 +56,7 @@ HEADERS += src/overlaycontroller.h \
|
||||
src/openvr/ovr_settings_wrapper.h \
|
||||
src/openvr/ovr_overlay_wrapper.h \
|
||||
src/openvr/ovr_system_wrapper.h \
|
||||
src/openvr/ovr_application_wrapper.h \
|
||||
src/openvr/lh_console_util.h \
|
||||
src/utils/setup.h \
|
||||
src/utils/paths.h \
|
||||
|
||||
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 109 KiB |
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 87 KiB |
@@ -0,0 +1,44 @@
|
||||
#include "ovr_application_wrapper.h"
|
||||
constexpr uint32_t bufferLen = 4096;
|
||||
namespace ovr_application_wrapper
|
||||
{
|
||||
std::string getSceneAppID()
|
||||
{
|
||||
uint32_t pidScene = vr::VRApplications()->GetCurrentSceneProcessId();
|
||||
char key[bufferLen];
|
||||
vr::EVRApplicationError error
|
||||
= vr::VRApplications()->GetApplicationKeyByProcessId(
|
||||
pidScene, key, bufferLen );
|
||||
std::string keys = key;
|
||||
if ( error != vr::VRApplicationError_None )
|
||||
{
|
||||
LOG( WARNING ) << "Could not Get App ID by PID: "
|
||||
+ std::to_string( error );
|
||||
LOG( WARNING ) << "Attempting to find through Enumeration";
|
||||
auto appCount = vr::VRApplications()->GetApplicationCount();
|
||||
const uint32_t bufferMax = vr::k_unMaxApplicationKeyLength;
|
||||
char cStringOut[bufferMax];
|
||||
for ( uint32_t i = 0; i < appCount; i++ )
|
||||
{
|
||||
auto error2 = vr::VRApplications()->GetApplicationKeyByIndex(
|
||||
i, cStringOut, bufferMax );
|
||||
std::string appID( cStringOut );
|
||||
if ( appID.find( "steam.app" ) != std::string::npos )
|
||||
{
|
||||
LOG( WARNING ) << "Found App ID through Enumeration (only "
|
||||
"steam apps caught): "
|
||||
<< appID;
|
||||
if ( error2 == vr::VRApplicationError_None )
|
||||
{
|
||||
return appID;
|
||||
}
|
||||
LOG( WARNING ) << "Error getting app id via Enum: " << error2;
|
||||
}
|
||||
}
|
||||
LOG( ERROR ) << "Unable to Find App ID by PID or by Enumeration";
|
||||
return "error";
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
|
||||
} // namespace ovr_application_wrapper
|
||||
@@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
|
||||
#include <openvr.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <easylogging++.h>
|
||||
#include <utility>
|
||||
#include <map>
|
||||
|
||||
/* Wrapper For OpenVR's IVR application class, allows us to do our error logging
|
||||
* while also minimizing code
|
||||
*
|
||||
*/
|
||||
namespace ovr_application_wrapper
|
||||
{
|
||||
// might make sense to mirror ovr's errors exactly, but for now this is more
|
||||
// than sufficient
|
||||
|
||||
enum class ApplicationError
|
||||
{
|
||||
NoError,
|
||||
UndefinedError,
|
||||
|
||||
};
|
||||
|
||||
std::string getSceneAppID();
|
||||
|
||||
} // namespace ovr_application_wrapper
|
||||
@@ -231,4 +231,111 @@ std::vector<int> getAllConnectedDevices( bool onlyWearable )
|
||||
return output;
|
||||
}
|
||||
|
||||
std::string getControllerName()
|
||||
{
|
||||
// This call is deprecated but probably exactly what we need
|
||||
int found = 0;
|
||||
bool hasHMD = false;
|
||||
uint32_t hmdIdx = 999;
|
||||
uint32_t lftIdx = 999;
|
||||
uint32_t rightIdx = 999;
|
||||
for ( uint32_t i = 0; i < vr::k_unMaxTrackedDeviceCount; i++ )
|
||||
{
|
||||
auto trackedDeviceClass = vr::VRSystem()->GetTrackedDeviceClass( i );
|
||||
if ( trackedDeviceClass == vr::TrackedDeviceClass_HMD )
|
||||
{
|
||||
hmdIdx = i;
|
||||
hasHMD = true;
|
||||
}
|
||||
if ( trackedDeviceClass == vr::TrackedDeviceClass_Controller )
|
||||
{
|
||||
auto handRole = getInt32TrackedProperty(
|
||||
i, vr::Prop_ControllerRoleHint_Int32 )
|
||||
.second;
|
||||
switch ( handRole )
|
||||
{
|
||||
case vr::TrackedControllerRole_LeftHand:
|
||||
lftIdx = i;
|
||||
found |= 0b100;
|
||||
break;
|
||||
case vr::TrackedControllerRole_RightHand:
|
||||
rightIdx = i;
|
||||
found |= 0b010;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( found == 0b110 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
bool isRightCon = false, isLeftCon = false;
|
||||
std::string right, left;
|
||||
if ( found == 0b110 || found == 0b100 )
|
||||
{
|
||||
isLeftCon = vr::VRSystem()->IsTrackedDeviceConnected( lftIdx );
|
||||
if ( isLeftCon )
|
||||
{
|
||||
left = getStringTrackedProperty( lftIdx,
|
||||
vr::Prop_ControllerType_String )
|
||||
.second;
|
||||
}
|
||||
}
|
||||
if ( found == 0b110 || found == 0b010 )
|
||||
{
|
||||
isRightCon = vr::VRSystem()->IsTrackedDeviceConnected( rightIdx );
|
||||
if ( isRightCon )
|
||||
{
|
||||
right = getStringTrackedProperty( rightIdx,
|
||||
vr::Prop_ControllerType_String )
|
||||
.second;
|
||||
}
|
||||
}
|
||||
if ( !isLeftCon && !isRightCon && hasHMD )
|
||||
{
|
||||
LOG( WARNING ) << "WARNING: No Controllers assuming based on HMD";
|
||||
auto hmdName
|
||||
= getStringTrackedProperty( hmdIdx, vr::Prop_ControllerType_String )
|
||||
.second;
|
||||
if ( hmdName == "indexhmd" )
|
||||
{
|
||||
return "knuckles";
|
||||
}
|
||||
if ( hmdName == "vive" )
|
||||
{
|
||||
return "vive_controller";
|
||||
}
|
||||
if ( hmdName == "vive_pro" )
|
||||
{
|
||||
LOG( WARNING )
|
||||
<< "Vive Pro Detected, Assuming Knuckles this may be wrong";
|
||||
return "knuckles";
|
||||
}
|
||||
if ( hmdName == "holographic_hmd" )
|
||||
{
|
||||
LOG( WARNING ) << "WMR detected, Assuming HP CONTROLLERS";
|
||||
return "hpmotioncontroller";
|
||||
}
|
||||
if ( hmdName == "rift" )
|
||||
{
|
||||
return "oculus_touch";
|
||||
}
|
||||
LOG( WARNING ) << "Headset Not recognized Assuming touch controllers "
|
||||
+ hmdName;
|
||||
return "oculus_touch";
|
||||
}
|
||||
if ( right != left )
|
||||
{
|
||||
LOG( WARNING ) << "WARNING: Left and Right Controllers are Different, "
|
||||
"Prioritizing right";
|
||||
}
|
||||
if ( rightIdx == 999 )
|
||||
{
|
||||
return left;
|
||||
}
|
||||
return right;
|
||||
}
|
||||
|
||||
} // namespace ovr_system_wrapper
|
||||
|
||||
@@ -53,5 +53,6 @@ vr::ETrackedDeviceClass getDeviceClass( int index );
|
||||
|
||||
std::vector<int> getAllConnectedDevices( bool onlyWearable = false );
|
||||
std::string getDeviceName( int index );
|
||||
std::string getControllerName();
|
||||
|
||||
} // namespace ovr_system_wrapper
|
||||
|
||||
@@ -1275,6 +1275,17 @@ void OverlayController::mainEventLoop()
|
||||
}
|
||||
}
|
||||
break;
|
||||
case vr::VREvent_Input_ActionManifestReloaded:
|
||||
{
|
||||
// LOG( WARNING ) << "Action Manifest Reloaded";
|
||||
if ( m_steamVRTabController.perAppBindEnabled() )
|
||||
{
|
||||
m_steamVRTabController.applyAllCustomBindings();
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2013-2022 Niels Lohmann
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -4,7 +4,7 @@
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st1{fill:#d9dbe0;}
|
||||
</style>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
<path class="st1" d="M5,8.6l5.3,3.4L5,15.4V8.6 M3,5v14l11-7L3,5z"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 598 B After Width: | Height: | Size: 598 B |
@@ -1 +1,51 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path fill="white" d="M6 18l8.5-6L6 6v12zm2-8.14L11.03 12 8 14.14V9.86zM16 6h2v12h-2z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
version="1.1"
|
||||
id="svg483"
|
||||
sodipodi:docname="outline_skip_next_white_24dp.svg"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs487" />
|
||||
<sodipodi:namedview
|
||||
id="namedview485"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="41.75"
|
||||
inkscape:cx="12.011976"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1387"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg483" />
|
||||
<path
|
||||
fill="none"
|
||||
d="M0 0h24v24H0V0z"
|
||||
id="path479" />
|
||||
<path
|
||||
fill="d9dbe0"
|
||||
d="M6 18l8.5-6L6 6v12zm2-8.14L11.03 12 8 14.14V9.86zM16 6h2v12h-2z"
|
||||
id="path481" />
|
||||
<path
|
||||
style="fill:#d9dbe0;stroke-width:0.0239521"
|
||||
d="M 6.011976,12.000363 V 6.0247354 l 0.3652695,0.2582853 c 0.2008982,0.1420569 2.0898204,1.4746434 4.1976045,2.9613034 2.107785,1.4866599 3.846428,2.7158709 3.863653,2.7315789 0.02493,0.02273 -0.781583,0.602286 -3.952096,2.839957 -2.1908773,1.546268 -4.093892,2.889861 -4.228922,2.985763 l -0.245509,0.174368 z m 3.5100594,1.083469 C 10.347054,12.500898 11.022723,12.013636 11.023522,12.001027 11.024783,11.981129 8.0402106,9.8562874 8.0110007,9.8562874 8.0049503,9.8562874 8,10.820958 8,12 c 0,1.179042 0.00495,2.143713 0.011001,2.143713 0.00605,0 0.6860161,-0.476947 1.5110344,-1.059881 z"
|
||||
id="path558" />
|
||||
<path
|
||||
style="fill:#d9dbe0;stroke-width:0.0239521"
|
||||
d="M 16,12 V 6 h 0.994012 0.994012 v 6 6 H 16.994012 16 Z"
|
||||
id="path560" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 216 B After Width: | Height: | Size: 2.0 KiB |
@@ -1 +1,51 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path fill="white" d="M6 6h2v12H6zm3.5 6l8.5 6V6l-8.5 6zm6.5 2.14L12.97 12 16 9.86v4.28z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
version="1.1"
|
||||
id="svg590"
|
||||
sodipodi:docname="outline_skip_previous_white_24dp.svg"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs594" />
|
||||
<sodipodi:namedview
|
||||
id="namedview592"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="41.75"
|
||||
inkscape:cx="12.011976"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1387"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg590" />
|
||||
<path
|
||||
fill="none"
|
||||
d="M0 0h24v24H0V0z"
|
||||
id="path586" />
|
||||
<path
|
||||
fill="d9dbe0"
|
||||
d="M6 6h2v12H6zm3.5 6l8.5 6V6l-8.5 6zm6.5 2.14L12.97 12 16 9.86v4.28z"
|
||||
id="path588" />
|
||||
<path
|
||||
style="fill:#d9dbe0;stroke-width:0.0239521"
|
||||
d="M 6.011976,12 V 6 H 7.005988 8 v 6 6 H 7.005988 6.011976 Z"
|
||||
id="path596" />
|
||||
<path
|
||||
style="fill:#d9dbe0;stroke-width:0.0239521"
|
||||
d="m 13.760479,14.992438 c -2.318563,-1.638523 -4.2121727,-2.987515 -4.2080218,-2.997761 0.00415,-0.01025 1.9038518,-1.35724 4.2215568,-2.9933189 l 4.21401,-2.9746899 v 5.9746898 c 0,3.286079 -0.0027,5.973682 -0.006,5.972451 -0.0033,-0.0012 -1.902994,-1.342849 -4.221557,-2.981371 z M 16,11.998004 c 0,-1.18014 -0.0089,-2.1421159 -0.01967,-2.1377245 -0.01082,0.00439 -0.697171,0.4870405 -1.525223,1.0725535 l -1.50555,1.064569 0.06176,0.04611 c 0.211567,0.157958 2.956098,2.096221 2.970725,2.098007 C 15.991916,14.142726 16,13.178144 16,11.998004 Z"
|
||||
id="path600" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 219 B After Width: | Height: | Size: 2.0 KiB |
@@ -1 +1,47 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path fill="white" d="M16 8v8H8V8h8m2-2H6v12h12V6z"/></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
version="1.1"
|
||||
id="svg623"
|
||||
sodipodi:docname="outline_stop_white_24dp.svg"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs627" />
|
||||
<sodipodi:namedview
|
||||
id="namedview625"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="41.75"
|
||||
inkscape:cx="12.035928"
|
||||
inkscape:cy="12"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1387"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg623" />
|
||||
<path
|
||||
fill="none"
|
||||
d="M0 0h24v24H0V0z"
|
||||
id="path619" />
|
||||
<path
|
||||
fill="d9dbe0"
|
||||
d="M16 8v8H8V8h8m2-2H6v12h12V6z"
|
||||
id="path621" />
|
||||
<path
|
||||
style="fill:#d9dbe0;stroke-width:0.0239521"
|
||||
d="M 6.011976,12 V 6 H 12 17.988024 v 6 6 H 12 6.011976 Z M 16,12 V 7.988024 H 12 8 V 12 16.011976 h 4 4 z"
|
||||
id="path720" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 181 B After Width: | Height: | Size: 1.4 KiB |
@@ -55,21 +55,21 @@
|
||||
<g
|
||||
transform="matrix(0.1327649,0,0,0.1327649,3.5653647,1.971854)"
|
||||
id="g10"
|
||||
style="fill:#ffffff">
|
||||
style="fill:#d9dbe0">
|
||||
<path
|
||||
d="M 20.722,77.21 C 19.907,73.951 19.5,70.883 19.5,68.004 l 0,-10.43 c 0,-1.412 -0.516,-2.634 -1.548,-3.666 -1.032,-1.032 -2.254,-1.548 -3.666,-1.548 -1.413,0 -2.635,0.516 -3.667,1.548 -1.032,1.032 -1.548,2.254 -1.548,3.666 l 0,10.429 c 0,6.03 1.141,11.841 3.422,17.437 l 8.229,-8.23"
|
||||
id="path12"
|
||||
style="fill:#ffffff"
|
||||
style="fill:#d9dbe0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 56,94.07 c 7.17,0 13.309,-2.553 18.412,-7.657 C 79.517,81.309 82.07,75.17 82.07,68 l 0,-10.429 29.412,-29.412 c 0.543,-0.543 0.815,-1.168 0.815,-1.874 0,-0.706 -0.271,-1.331 -0.815,-1.874 l -6.68,-6.681 c -0.544,-0.544 -1.168,-0.815 -1.875,-0.815 -0.705,0 -1.33,0.271 -1.873,0.815 L 0.514,118.27 c -0.543,0.543 -0.814,1.168 -0.814,1.873 0,0.707 0.271,1.332 0.814,1.875 l 6.681,6.681 c 0.543,0.543 1.168,0.814 1.874,0.814 0.706,0 1.331,-0.271 1.874,-0.814 l 20.694,-20.694 c 5.974,3.695 12.356,5.895 19.15,6.6 l 0,10.756 -20.857,0 c -1.412,0 -2.635,0.516 -3.666,1.548 -1.032,1.032 -1.549,2.254 -1.549,3.666 0,1.411 0.517,2.635 1.549,3.666 1.031,1.032 2.254,1.549 3.666,1.549 l 52.14,0 c 1.412,0 2.635,-0.517 3.666,-1.549 1.033,-1.031 1.549,-2.255 1.549,-3.666 0,-1.412 -0.516,-2.634 -1.549,-3.666 -1.031,-1.032 -2.254,-1.548 -3.666,-1.548 l -20.856,0 0,-10.756 C 73,113.302 82.899,108.21 90.911,99.33 98.921,90.45 102.931,80.008 102.931,68 l 0,-10.431 c 0,-1.412 -0.516,-2.634 -1.547,-3.666 -1.033,-1.032 -2.255,-1.548 -3.667,-1.548 -1.412,0 -2.634,0.516 -3.666,1.548 -1.032,1.032 -1.548,2.254 -1.548,3.666 l 0,10.429 c 0,10.05 -3.572,18.643 -10.714,25.785 -7.142,7.142 -15.738,10.714 -25.786,10.714 -5.866,0 -11.433,-1.384 -16.702,-4.155 l 7.821,-7.82 c 2.934,1.031 5.894,1.546 8.881,1.546"
|
||||
id="path14"
|
||||
style="fill:#ffffff"
|
||||
style="fill:#d9dbe0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="M 71.03,5.02 C 66.549,1.815 61.538,0.212 56,0.212 c -7.17,0 -13.308,2.554 -18.413,7.659 -5.105,5.105 -7.658,11.243 -7.658,18.413 l 0,41.714 50.594,-50.595 C 78.676,12.353 75.513,8.224 71.032,5.02"
|
||||
id="path16"
|
||||
style="fill:#ffffff"
|
||||
style="fill:#d9dbe0"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
@@ -55,16 +55,16 @@
|
||||
<g
|
||||
transform="matrix(0.13276686,0,0,0.13276686,4.7597584,1.971588)"
|
||||
id="g10"
|
||||
style="fill:#ffffff">
|
||||
style="fill:#d9dbe0">
|
||||
<path
|
||||
d="m 47,94.07 c 7.17,0 13.307,-2.553 18.412,-7.657 C 70.517,81.309 73.07,75.17 73.07,68 l 0,-41.714 C 73.07,19.116 70.519,12.979 65.412,7.873 60.307,2.768 54.17,0.214 47,0.214 c -7.17,0 -13.307,2.554 -18.413,7.659 -5.106,5.105 -7.659,11.243 -7.659,18.413 l 0,41.714 c 0,7.17 2.554,13.309 7.659,18.413 C 33.692,91.517 39.83,94.07 47,94.07"
|
||||
id="path12"
|
||||
style="fill:#ffffff"
|
||||
style="fill:#d9dbe0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 92.38,53.905 c -1.03,-1.032 -2.254,-1.548 -3.666,-1.548 -1.412,0 -2.634,0.516 -3.666,1.548 -1.032,1.032 -1.548,2.254 -1.548,3.666 L 83.5,68 C 83.5,78.05 79.928,86.643 72.786,93.786 65.645,100.929 57.049,104.5 47,104.5 36.95,104.5 28.356,100.929 21.213,93.786 14.071,86.645 10.5,78.049 10.5,68 l 0,-10.429 C 10.5,56.159 9.984,54.937 8.952,53.905 7.92,52.873 6.699,52.357 5.286,52.357 c -1.413,0 -2.635,0.516 -3.667,1.548 -1.032,1.032 -1.548,2.254 -1.548,3.666 l 0,10.429 c 0,12 4.01,22.446 12.02,31.33 8.01,8.88 17.91,13.972 29.697,15.275 l 0,10.756 -20.857,0 c -1.412,0 -2.634,0.516 -3.666,1.548 -1.032,1.032 -1.548,2.254 -1.548,3.666 0,1.411 0.516,2.635 1.548,3.666 1.032,1.032 2.254,1.549 3.666,1.549 l 52.14,0 c 1.412,0 2.636,-0.517 3.666,-1.549 1.033,-1.031 1.55,-2.255 1.55,-3.666 0,-1.412 -0.517,-2.634 -1.55,-3.666 -1.03,-1.032 -2.254,-1.548 -3.666,-1.548 l -20.855,0 0,-10.756 C 64.001,113.302 73.9,108.21 81.912,99.33 89.922,90.45 93.932,80.008 93.932,68 l 0,-10.429 c 0,-1.412 -0.517,-2.633 -1.55,-3.666"
|
||||
id="path14"
|
||||
style="fill:#ffffff"
|
||||
style="fill:#d9dbe0"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
@@ -59,18 +59,18 @@
|
||||
<g
|
||||
transform="matrix(0.12612852,0,0,0.12612852,2.0717705,2.4230086)"
|
||||
id="g10"
|
||||
style="fill:#ffffff">
|
||||
style="fill:#d9dbe0">
|
||||
<g
|
||||
id="g4141"
|
||||
transform="matrix(1.1111111,0,0,1.1111111,-5.2223894,-7.5557786)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff"
|
||||
style="fill:#d9dbe0"
|
||||
id="path12"
|
||||
d="m 47,94.07 c 7.17,0 13.307,-2.553 18.412,-7.657 C 70.517,81.309 73.07,75.17 73.07,68 l 0,-41.714 C 73.07,19.116 70.519,12.979 65.412,7.873 60.307,2.768 54.17,0.214 47,0.214 c -7.17,0 -13.307,2.554 -18.413,7.659 -5.106,5.105 -7.659,11.243 -7.659,18.413 l 0,41.714 c 0,7.17 2.554,13.309 7.659,18.413 C 33.692,91.517 39.83,94.07 47,94.07" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff"
|
||||
style="fill:#d9dbe0"
|
||||
id="path14"
|
||||
d="m 92.38,53.905 c -1.03,-1.032 -2.254,-1.548 -3.666,-1.548 -1.412,0 -2.634,0.516 -3.666,1.548 -1.032,1.032 -1.548,2.254 -1.548,3.666 L 83.5,68 C 83.5,78.05 79.928,86.643 72.786,93.786 65.645,100.929 57.049,104.5 47,104.5 36.95,104.5 28.356,100.929 21.213,93.786 14.071,86.645 10.5,78.049 10.5,68 l 0,-10.429 C 10.5,56.159 9.984,54.937 8.952,53.905 7.92,52.873 6.699,52.357 5.286,52.357 c -1.413,0 -2.635,0.516 -3.667,1.548 -1.032,1.032 -1.548,2.254 -1.548,3.666 l 0,10.429 c 0,12 4.01,22.446 12.02,31.33 8.01,8.88 17.91,13.972 29.697,15.275 l 0,10.756 -20.857,0 c -1.412,0 -2.634,0.516 -3.666,1.548 -1.032,1.032 -1.548,2.254 -1.548,3.666 0,1.411 0.516,2.635 1.548,3.666 1.032,1.032 2.254,1.549 3.666,1.549 l 52.14,0 c 1.412,0 2.636,-0.517 3.666,-1.549 1.033,-1.031 1.55,-2.255 1.55,-3.666 0,-1.412 -0.517,-2.634 -1.55,-3.666 -1.03,-1.032 -2.254,-1.548 -3.666,-1.548 l -20.855,0 0,-10.756 C 64.001,113.302 73.9,108.21 81.912,99.33 89.922,90.45 93.932,80.008 93.932,68 l 0,-10.429 c 0,-1.412 -0.517,-2.633 -1.55,-3.666" />
|
||||
</g>
|
||||
|
||||
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
@@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22"><g transform="matrix(.13811 0 0 .13811 4.955 5.808)" fill-opacity=".8"><g transform="matrix(6.5167 0 0 6.5167-28.01-34.23)"><g transform="matrix(1.17633 0 0 1.17633 1 1.589)" stroke-opacity=".85" fill="#000" stroke="none" fill-opacity="0" stroke-width=".73"><path d="m11.243 12.993c-.192 0-.384-.073-.53-.22-.293-.293-.293-.768 0-1.061 2.047-2.047 2.047-5.378 0-7.425-.293-.293-.293-.768 0-1.061.293-.293.768-.293 1.061 0 1.275 1.275 1.977 2.97 1.977 4.773 0 1.803-.702 3.498-1.977 4.773-.146.146-.338.22-.53.22z"/><path d="m8.578 11.578c-.192 0-.384-.073-.53-.22-.293-.293-.293-.768 0-1.061 1.267-1.267 1.267-3.329 0-4.596-.293-.293-.293-.768 0-1.061.293-.293.768-.293 1.061 0 1.852 1.852 1.852 4.865 0 6.718-.146.146-.338.22-.53.22z"/></g><g transform="translate(16 4)"><g fill="#f2f2f2" fill-opacity="0"><path d="m-1.773 12.874c-.226 0-.452-.086-.623-.259-.345-.345-.345-.903 0-1.248 2.408-2.408 2.408-6.326 0-8.734-.345-.345-.345-.903 0-1.248.345-.345.903-.345 1.248 0 1.5 1.5 2.326 3.494 2.326 5.615 0 2.121-.826 4.115-2.326 5.615-.172.172-.398.259-.623.259z"/><path d="m-4.908 11.209c-.226 0-.452-.086-.623-.259-.345-.345-.345-.903 0-1.248 1.49-1.49 1.49-3.916 0-5.406-.345-.345-.345-.903 0-1.248.345-.345.903-.345 1.248 0 2.179 2.179 2.179 5.723 0 7.903-.172.172-.398.259-.623.259z"/></g><path d="m-7.353 15.235c-.153 0-.303-.06-.416-.172l-4.534-4.534h-2.109c-.325 0-.588-.263-.588-.588v-5.882c0-.325.263-.588.588-.588h2.109l4.534-4.534c.168-.168.421-.219.641-.127.22.092.363.306.363.543v15.292c0 .238-.144.453-.363.543-.073.031-.149.045-.225.045" fill="#fff" fill-opacity="1"/></g></g><path d="m14.75 9.674v1.326h-1.326l-1.674-1.674-1.674 1.674h-1.326v-1.326l1.674-1.674-1.674-1.674v-1.326h1.326l1.674 1.674 1.674-1.674h1.326v1.326l-1.674 1.674 1.674 1.674" fill="#fff" fill-opacity="1" transform="matrix(8.22579 0 0 8.22579-32.543-28.351)"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22"><g transform="matrix(.13811 0 0 .13811 4.955 5.808)" fill-opacity=".8"><g transform="matrix(6.5167 0 0 6.5167-28.01-34.23)"><g transform="matrix(1.17633 0 0 1.17633 1 1.589)" stroke-opacity=".85" fill="#000" stroke="none" fill-opacity="0" stroke-width=".73"><path d="m11.243 12.993c-.192 0-.384-.073-.53-.22-.293-.293-.293-.768 0-1.061 2.047-2.047 2.047-5.378 0-7.425-.293-.293-.293-.768 0-1.061.293-.293.768-.293 1.061 0 1.275 1.275 1.977 2.97 1.977 4.773 0 1.803-.702 3.498-1.977 4.773-.146.146-.338.22-.53.22z"/><path d="m8.578 11.578c-.192 0-.384-.073-.53-.22-.293-.293-.293-.768 0-1.061 1.267-1.267 1.267-3.329 0-4.596-.293-.293-.293-.768 0-1.061.293-.293.768-.293 1.061 0 1.852 1.852 1.852 4.865 0 6.718-.146.146-.338.22-.53.22z"/></g><g transform="translate(16 4)"><g fill="#d9dbe0" fill-opacity="0"><path d="m-1.773 12.874c-.226 0-.452-.086-.623-.259-.345-.345-.345-.903 0-1.248 2.408-2.408 2.408-6.326 0-8.734-.345-.345-.345-.903 0-1.248.345-.345.903-.345 1.248 0 1.5 1.5 2.326 3.494 2.326 5.615 0 2.121-.826 4.115-2.326 5.615-.172.172-.398.259-.623.259z"/><path d="m-4.908 11.209c-.226 0-.452-.086-.623-.259-.345-.345-.345-.903 0-1.248 1.49-1.49 1.49-3.916 0-5.406-.345-.345-.345-.903 0-1.248.345-.345.903-.345 1.248 0 2.179 2.179 2.179 5.723 0 7.903-.172.172-.398.259-.623.259z"/></g><path d="m-7.353 15.235c-.153 0-.303-.06-.416-.172l-4.534-4.534h-2.109c-.325 0-.588-.263-.588-.588v-5.882c0-.325.263-.588.588-.588h2.109l4.534-4.534c.168-.168.421-.219.641-.127.22.092.363.306.363.543v15.292c0 .238-.144.453-.363.543-.073.031-.149.045-.225.045" fill="#d9dbe0" fill-opacity="1"/></g></g><path d="m14.75 9.674v1.326h-1.326l-1.674-1.674-1.674 1.674h-1.326v-1.326l1.674-1.674-1.674-1.674v-1.326h1.326l1.674 1.674 1.674-1.674h1.326v1.326l-1.674 1.674 1.674 1.674" fill="#d9dbe0" fill-opacity="1" transform="matrix(8.22579 0 0 8.22579-32.543-28.351)"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
@@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22"><g transform="matrix(.90003 0 0 .90003 15.507 4.708)" fill-opacity="1" fill="#fff"><path d="m1.36 14.537c-.226 0-.452-.086-.623-.259-.345-.345-.345-.903 0-1.248 1.61-1.61 2.497-3.752 2.497-6.03 0-2.279-.887-4.419-2.497-6.03-.345-.345-.345-.903 0-1.248.345-.345.903-.345 1.248 0 1.944 1.944 3.01 4.529 3.01 7.278 0 2.749-1.07 5.333-3.01 7.278-.172.172-.398.259-.623.259"/><path d="m-1.773 12.874c-.226 0-.452-.086-.623-.259-.345-.345-.345-.903 0-1.248 2.408-2.408 2.408-6.326 0-8.734-.345-.345-.345-.903 0-1.248.345-.345.903-.345 1.248 0 1.5 1.5 2.326 3.494 2.326 5.615 0 2.121-.826 4.115-2.326 5.615-.172.172-.398.259-.623.259z"/><path d="m-4.908 11.209c-.226 0-.452-.086-.623-.259-.345-.345-.345-.903 0-1.248 1.49-1.49 1.49-3.916 0-5.406-.345-.345-.345-.903 0-1.248.345-.345.903-.345 1.248 0 2.179 2.179 2.179 5.723 0 7.903-.172.172-.398.259-.623.259z"/><path d="m-7.353 15.235c-.153 0-.303-.06-.416-.172l-4.534-4.534h-2.109c-.325 0-.588-.263-.588-.588v-5.882c0-.325.263-.588.588-.588h2.109l4.534-4.534c.168-.168.421-.219.641-.127.22.092.363.306.363.543v15.292c0 .238-.144.453-.363.543-.073.031-.149.045-.225.045"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22"><g transform="matrix(.90003 0 0 .90003 15.507 4.708)" fill-opacity="1" fill="#d9dbe0"><path d="m1.36 14.537c-.226 0-.452-.086-.623-.259-.345-.345-.345-.903 0-1.248 1.61-1.61 2.497-3.752 2.497-6.03 0-2.279-.887-4.419-2.497-6.03-.345-.345-.345-.903 0-1.248.345-.345.903-.345 1.248 0 1.944 1.944 3.01 4.529 3.01 7.278 0 2.749-1.07 5.333-3.01 7.278-.172.172-.398.259-.623.259"/><path d="m-1.773 12.874c-.226 0-.452-.086-.623-.259-.345-.345-.345-.903 0-1.248 2.408-2.408 2.408-6.326 0-8.734-.345-.345-.345-.903 0-1.248.345-.345.903-.345 1.248 0 1.5 1.5 2.326 3.494 2.326 5.615 0 2.121-.826 4.115-2.326 5.615-.172.172-.398.259-.623.259z"/><path d="m-4.908 11.209c-.226 0-.452-.086-.623-.259-.345-.345-.345-.903 0-1.248 1.49-1.49 1.49-3.916 0-5.406-.345-.345-.345-.903 0-1.248.345-.345.903-.345 1.248 0 2.179 2.179 2.179 5.723 0 7.903-.172.172-.398.259-.623.259z"/><path d="m-7.353 15.235c-.153 0-.303-.06-.416-.172l-4.534-4.534h-2.109c-.325 0-.588-.263-.588-.588v-5.882c0-.325.263-.588.588-.588h2.109l4.534-4.534c.168-.168.421-.219.641-.127.22.092.363.306.363.543v15.292c0 .238-.144.453-.363.543-.073.031-.149.045-.225.045"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="270" height="270"><path d="M30 180l60 60L240 30" stroke="#000" stroke-width="30" fill="none"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="270" height="270"><path d="M30 180l60 60L240 30" stroke="#d9dbe0" stroke-width="30" fill="none"/></svg>
|
||||
|
Before Width: | Height: | Size: 147 B After Width: | Height: | Size: 150 B |
@@ -3,7 +3,7 @@
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
.st0{fill:#d9dbe0;}
|
||||
.st1{fill:none;}
|
||||
</style>
|
||||
<path class="st0" d="M3,9v6h4l5,5V4L7,9H3z M16.5,12c0-1.8-1-3.3-2.5-4V16C15.5,15.3,16.5,13.8,16.5,12z M14,3.2v2.1
|
||||
|
||||
|
Before Width: | Height: | Size: 667 B After Width: | Height: | Size: 667 B |
@@ -3,7 +3,7 @@
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
.st0{fill:#d9dbe0;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M21.6,6.3V19c0,1.9-1.6,3.5-3.5,3.5h-6.4c-0.9,0-1.8-0.4-2.5-1l-6.9-7c0,0,1.1-1.1,1.1-1.1
|
||||
|
||||
|
Before Width: | Height: | Size: 807 B After Width: | Height: | Size: 807 B |
@@ -3,7 +3,7 @@
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
.st0{fill:#d9dbe0;}
|
||||
.st1{fill:none;}
|
||||
</style>
|
||||
<path class="st0" d="M13,7h-2v2h2V7z M13,11h-2v2h2V11z M17,11h-2v2h2V11z M3,3v18h18V3H3z M19,19H5V5h14V19z M13,15h-2v2h2V15z
|
||||
|
||||
|
Before Width: | Height: | Size: 622 B After Width: | Height: | Size: 622 B |
@@ -3,7 +3,7 @@
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
.st0{fill:#d9dbe0;}
|
||||
.st1{fill:none;}
|
||||
</style>
|
||||
<path class="st0" d="M15.5,5.5l-1.8,1.8L12,5.5l-1.8,1.8L8.5,5.5L12,2L15.5,5.5z M18.5,15.5l-1.8-1.8l1.8-1.8l-1.8-1.8l1.8-1.8
|
||||
|
||||
|
Before Width: | Height: | Size: 783 B After Width: | Height: | Size: 783 B |
@@ -4,7 +4,7 @@
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st1{fill:#d9dbe0;}
|
||||
</style>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
<path class="st1" d="M20,2H4C2.9,2,2,2.9,2,4v16c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V4C22,2.9,21.1,2,20,2z M8,20H4v-4h4V20z M8,14
|
||||
|
||||
|
Before Width: | Height: | Size: 745 B After Width: | Height: | Size: 745 B |
@@ -4,7 +4,7 @@
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st1{fill:#d9dbe0;}
|
||||
</style>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
<path class="st1" d="M15.6,5.6L11,1v3.1C7.1,4.6,4,7.9,4,12s3.1,7.4,7,7.9v-2C8.2,17.4,6,15,6,12s2.2-5.4,5-5.9V10L15.6,5.6z
|
||||
|
||||
|
Before Width: | Height: | Size: 827 B After Width: | Height: | Size: 827 B |
@@ -4,7 +4,7 @@
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st1{fill:#d9dbe0;}
|
||||
</style>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
<path class="st1" d="M12,10c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S13.1,10,12,10z M19,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14
|
||||
|
||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -4,7 +4,7 @@
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st1{fill:#d9dbe0;}
|
||||
</style>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
<path class="st1" d="M3,5H1v16c0,1.1,0.9,2,2,2h16v-2H3V5z M21,1H7C5.9,1,5,1.9,5,3v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V3
|
||||
|
||||
|
Before Width: | Height: | Size: 641 B After Width: | Height: | Size: 641 B |
@@ -3,7 +3,7 @@
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
.st0{fill:#d9dbe0;}
|
||||
.st1{fill:none;}
|
||||
</style>
|
||||
<path class="st0" d="M4,10.5c-0.8,0-1.5,0.7-1.5,1.5s0.7,1.5,1.5,1.5s1.5-0.7,1.5-1.5S4.8,10.5,4,10.5z M4,4.5
|
||||
|
||||
|
Before Width: | Height: | Size: 788 B After Width: | Height: | Size: 788 B |
@@ -4,7 +4,7 @@
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st1{fill:#d9dbe0;}
|
||||
</style>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
<path class="st1" d="M3,17v2h6v-2H3z M3,5v2h10V5H3z M13,21v-2h8v-2h-8v-2h-2v6H13z M7,9v2H3v2h4v2h2V9H7z M21,13v-2H11v2H21z M15,9
|
||||
|
||||
|
Before Width: | Height: | Size: 629 B After Width: | Height: | Size: 629 B |
@@ -4,7 +4,7 @@
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st1{fill:#d9dbe0;}
|
||||
</style>
|
||||
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||
<path class="st1" d="M22.7,19l-9.1-9.1c0.9-2.3,0.4-5-1.5-6.9c-2-2-5-2.4-7.4-1.3L9,6L6,9L1.6,4.7c-1.2,2.4-0.7,5.4,1.3,7.4
|
||||
|
||||
|
Before Width: | Height: | Size: 689 B After Width: | Height: | Size: 689 B |
@@ -3,7 +3,7 @@
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
.st0{fill:#d9dbe0;}
|
||||
.st1{fill:none;}
|
||||
</style>
|
||||
<path class="st0" d="M21,3H3C1.9,3,1,3.9,1,5v12c0,1.1,0.9,2,2,2h5v2h8v-2h5c1.1,0,2-0.9,2-2l0-12C23,3.9,22.1,3,21,3z M21,17H3V5
|
||||
|
||||
|
Before Width: | Height: | Size: 615 B After Width: | Height: | Size: 615 B |
@@ -167,14 +167,14 @@ MyStackViewPage {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
@@ -364,7 +364,7 @@ MyStackViewPage {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -372,7 +372,7 @@ MyStackViewPage {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -409,11 +409,11 @@ MyStackViewPage {
|
||||
Rectangle {
|
||||
id: summaryVersionCheckTextRect
|
||||
visible: true
|
||||
color: "#1b2939"
|
||||
color: "#2a2e35"
|
||||
MyText {
|
||||
id: summaryVersionCheckText
|
||||
text: ""
|
||||
color: "#fffec8"
|
||||
color: "#3d4450"
|
||||
font.pointSize: 22
|
||||
minimumPointSize: 11
|
||||
fontSizeMode: Text.Fit
|
||||
@@ -451,7 +451,7 @@ MyStackViewPage {
|
||||
{
|
||||
summaryVersionCheckTextRect.color = "#ff0000"
|
||||
} else {
|
||||
summaryVersionCheckTextRect.color = "#1b2939"
|
||||
summaryVersionCheckTextRect.color = "#2a2e35"
|
||||
}
|
||||
|
||||
|
||||
@@ -478,7 +478,7 @@ MyStackViewPage {
|
||||
{
|
||||
summaryVersionCheckTextRect.color = "#ff0000"
|
||||
} else {
|
||||
summaryVersionCheckTextRect.color = "#1b2939"
|
||||
summaryVersionCheckTextRect.color = "#2a2e35"
|
||||
}
|
||||
}
|
||||
onVersionCheckTextChanged: {
|
||||
@@ -488,14 +488,14 @@ MyStackViewPage {
|
||||
if (OverlayController.disableVersionCheck)
|
||||
{
|
||||
summaryVersionCheckText.visible = false
|
||||
summaryVersionCheckTextRect.color = "#1b2939"
|
||||
summaryVersionCheckTextRect.color = "#2a2e35"
|
||||
} else {
|
||||
summaryVersionCheckText.visible = true
|
||||
if (OverlayController.newVersionDetected)
|
||||
{
|
||||
summaryVersionCheckTextRect.color = "#ff0000"
|
||||
} else {
|
||||
summaryVersionCheckTextRect.color = "#1b2939"
|
||||
summaryVersionCheckTextRect.color = "#2a2e35"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,7 +157,7 @@ MyStackViewPage {
|
||||
MyTextField {
|
||||
id: customTickRateText
|
||||
text: "20"
|
||||
keyBoardUID: 1001
|
||||
keyBoardUID: 501
|
||||
Layout.preferredWidth: 140
|
||||
Layout.leftMargin: 10
|
||||
Layout.rightMargin: 1
|
||||
@@ -200,7 +200,7 @@ MyStackViewPage {
|
||||
MyTextField {
|
||||
id: debugStateText
|
||||
text: "0"
|
||||
keyBoardUID: 1002
|
||||
keyBoardUID: 502
|
||||
Layout.preferredWidth: 140
|
||||
Layout.leftMargin: 10
|
||||
Layout.rightMargin: 1
|
||||
|
||||
@@ -47,7 +47,7 @@ MyStackViewPage {
|
||||
MyTextField {
|
||||
id: chaperoneNewProfileName
|
||||
keyBoardUID: 390
|
||||
color: "#cccccc"
|
||||
color: "#d9dbe0"
|
||||
text: ""
|
||||
Layout.fillWidth: true
|
||||
font.pointSize: 20
|
||||
|
||||
@@ -16,7 +16,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -16,7 +16,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -16,7 +16,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -34,7 +34,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
|
||||
@@ -40,10 +40,10 @@ MyComboBox {
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: parent.text
|
||||
color: parent.enabled ? "#ffffff" : "#909090"
|
||||
color: parent.enabled ? "#d9dbe0" : "#65676b"
|
||||
}
|
||||
background: Rectangle {
|
||||
color: parent.pressed ? "#406288" : (parent.hovered ? "#365473" : "#2c435d")
|
||||
color: parent.pressed ? "#282b31" : (parent.hovered ? "#484f5b" : "#2a2e35")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import ".."
|
||||
// Insert inside a ColumnLayout containing this and a RowLayout
|
||||
// to neatly separate header and buttons.
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -76,10 +76,10 @@ MyComboBox {
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: parent.text
|
||||
color: parent.enabled ? "#ffffff" : "#909090"
|
||||
color: parent.enabled ? "#d9dbe0" : "#65676b"
|
||||
}
|
||||
background: Rectangle {
|
||||
color: parent.pressed ? "#406288" : (parent.hovered ? "#365473" : "#2c435d")
|
||||
color: parent.pressed ? "#282b31" : (parent.hovered ? "#484f5b" : "#2a2e35")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ ComboBox {
|
||||
id: myComboBox
|
||||
hoverEnabled: true
|
||||
background: Rectangle {
|
||||
color: parent.pressed ? "#406288" : (parent.activeFocus ? "#365473" : "#2c435d")
|
||||
color: parent.pressed ? "#181a1e" : (parent.activeFocus ? "#586170" : "#3d4450")
|
||||
}
|
||||
|
||||
contentItem: MyText {
|
||||
@@ -27,10 +27,10 @@ ComboBox {
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: parent.text
|
||||
color: parent.enabled ? "#ffffff" : "#909090"
|
||||
color: parent.enabled ? "#d9dbe0" : "#65676b"
|
||||
}
|
||||
background: Rectangle {
|
||||
color: parent.pressed ? "#406288" : (parent.hovered ? "#365473" : "#2c435d")
|
||||
color: parent.pressed ? "#181a1e" : (parent.hovered ? "#586170" : "#3d4450")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,6 +68,6 @@ ComboBox {
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
popup.background.color = "#2c435d"
|
||||
popup.background.color = "#2a2e35"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,8 +35,8 @@ Popup {
|
||||
implicitHeight: dialogHeight
|
||||
anchors.centerIn: parent
|
||||
radius: 24
|
||||
color: "#1b2939"
|
||||
border.color: "#cccccc"
|
||||
color: "#2a2e35"
|
||||
border.color: "#d9dbe0"
|
||||
border.width: 2
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
@@ -47,7 +47,7 @@ Popup {
|
||||
text: dialogTitle
|
||||
}
|
||||
Rectangle {
|
||||
color: "#cccccc"
|
||||
color: "#2a2e35"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
@@ -35,8 +35,8 @@ Popup {
|
||||
implicitHeight: dialogHeight
|
||||
anchors.centerIn: parent
|
||||
radius: 24
|
||||
color: "#1b2939"
|
||||
border.color: "#cccccc"
|
||||
color: "#2a2e35"
|
||||
border.color: "#d9dbe0"
|
||||
border.width: 2
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
@@ -47,7 +47,7 @@ Popup {
|
||||
text: dialogTitle
|
||||
}
|
||||
Rectangle {
|
||||
color: "#cccccc"
|
||||
color: "#2a2e35"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
@@ -13,10 +13,10 @@ Button {
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: parent.text
|
||||
color: parent.enabled ? "#ffffff" : "#909090"
|
||||
color: parent.enabled ? "#d9dbe0" : "#65676b"
|
||||
}
|
||||
background: Rectangle {
|
||||
color: parent.down ? "#406288" : (parent.activeFocus ? "#365473" : "#2c435d")
|
||||
color: parent.enabled? (parent.down ? "#181a1e" : (parent.activeFocus ? "#586170" : "#3d4450")): "#181a1e"
|
||||
}
|
||||
|
||||
Image {
|
||||
|
||||
@@ -8,11 +8,11 @@ Button {
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: parent.text
|
||||
color: parent.enabled ? "#ffffff" : "#909090"
|
||||
color: parent.enabled ? "#d9dbe0" : "#65676b"
|
||||
}
|
||||
background: Rectangle {
|
||||
color: parent.down ? "#406288" : (parent.activeFocus ? "#365473" : "transparent")
|
||||
border.color: parent.enabled ? "#ffffff" : "#909090"
|
||||
color: parent.down ? "#282b31" : (parent.activeFocus ? "#484f5b" : "transparent")
|
||||
border.color: parent.enabled ? "#d9dbe0" : "#65676b"
|
||||
radius: 8
|
||||
}
|
||||
onHoveredChanged: {
|
||||
|
||||
@@ -8,7 +8,7 @@ RadioButton {
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: parent.text
|
||||
color: parent.enabled ? "#ffffff" : "#909090"
|
||||
color: parent.enabled ? "#d9dbe0" : "#65676b"
|
||||
}
|
||||
onHoveredChanged: {
|
||||
if (hovered) {
|
||||
|
||||
@@ -17,14 +17,14 @@ Slider {
|
||||
width: parent.availableWidth
|
||||
height: parent.availableHeight
|
||||
radius: 2
|
||||
color: parent.activeFocus ? "#2c435d" : "#1b2939"
|
||||
color: parent.activeFocus ? "#484f5b" : "#2a2e35"
|
||||
Rectangle {
|
||||
y: parent.height / 2 - height / 2
|
||||
implicitHeight: 4
|
||||
width: parent.width
|
||||
height: implicitHeight
|
||||
radius: 2
|
||||
color: "#bdbebf"
|
||||
color: "#181a1e"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,8 +34,8 @@ Slider {
|
||||
implicitWidth: 20
|
||||
implicitHeight: 40
|
||||
radius: 4
|
||||
color: parent.pressed ? "#ffffff" : "#eeeeee"
|
||||
border.color: "#bdbebf"
|
||||
color: parent.pressed ? "#586170" : "#3d4450"
|
||||
border.color: "#181a1e"
|
||||
}
|
||||
|
||||
onHoveredChanged: {
|
||||
|
||||
@@ -6,7 +6,7 @@ import "." // QTBUG-34418, singletons require explicit import to load qmldir fil
|
||||
import ".."
|
||||
|
||||
Rectangle {
|
||||
color: "#1b2939"
|
||||
color: "#2a2e35"
|
||||
width: 1200
|
||||
height: 800
|
||||
|
||||
@@ -33,7 +33,7 @@ Rectangle {
|
||||
}
|
||||
background: Rectangle {
|
||||
opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0)
|
||||
color: "#406288"
|
||||
color: "#2a2e35"
|
||||
radius: 4
|
||||
anchors.fill: parent
|
||||
}
|
||||
|
||||
@@ -3,6 +3,6 @@ import QtQuick.Controls 2.0
|
||||
|
||||
|
||||
Text {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
font.pointSize: 20
|
||||
}
|
||||
|
||||
@@ -6,14 +6,14 @@ TextField {
|
||||
property int keyBoardUID: 0
|
||||
property string savedText: ""
|
||||
id: myTextField
|
||||
color: "#cccccc"
|
||||
color: "#d9dbe0"
|
||||
text: ""
|
||||
font.pointSize: 20
|
||||
background: Button {
|
||||
hoverEnabled: true
|
||||
background: Rectangle {
|
||||
color: parent.hovered ? "#2c435d" : "#1b2939"
|
||||
border.color: "#cccccc"
|
||||
color: parent.hovered ? "#484f5b" : "#2a2e35"
|
||||
border.color: "#d9dbe0"
|
||||
border.width: 2
|
||||
}
|
||||
onClicked: {
|
||||
|
||||
@@ -15,7 +15,7 @@ CheckBox {
|
||||
implicitHeight: 28
|
||||
x: parent.leftPadding
|
||||
y: parent.height / 2 - height / 2
|
||||
color: parent.enabled ? (parent.down ? "#e0e0e0" : "#ffffff") : "#a0a0a0"
|
||||
color: parent.enabled ? (parent.down ? "#181a1e" : "#3d4450") : "#181a1e"
|
||||
border.width: 0
|
||||
Path {
|
||||
startX: 0
|
||||
@@ -43,11 +43,11 @@ CheckBox {
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
leftPadding: parent.indicator.width + parent.spacing
|
||||
color: parent.enabled ? "#ffffff" : "#909090"
|
||||
color: parent.enabled ? "#d9dbe0" : "#65676b"
|
||||
}
|
||||
|
||||
background: Rectangle {
|
||||
color: "#2c435d"
|
||||
color: "#2a2e35"
|
||||
opacity: parent.activeFocus ? 1.0 : 0
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ import "../steamvr_page/steamvr_additional"
|
||||
|
||||
Rectangle {
|
||||
id: root
|
||||
color: "#1b2939"
|
||||
color: "#2a2e35"
|
||||
width: 1200
|
||||
height: 800
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
@@ -89,6 +89,14 @@ GroupBox {
|
||||
}
|
||||
}
|
||||
RowLayout{
|
||||
MyPushButton{
|
||||
text:"Ignore Boundary State"
|
||||
Layout.preferredWidth: 300
|
||||
onClicked:{
|
||||
MoveCenterTabController.setIgnoreChaperoneState();
|
||||
}
|
||||
}
|
||||
|
||||
Item{
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 3
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 3
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 3
|
||||
|
||||
@@ -5,6 +5,7 @@ import ovras.advsettings 1.0
|
||||
import "../common"
|
||||
import "camera"
|
||||
import "steamvrmisc"
|
||||
import "steamvrbind"
|
||||
|
||||
MyStackViewPage {
|
||||
width: 1200
|
||||
@@ -17,6 +18,9 @@ MyStackViewPage {
|
||||
id: steamVRMiscGroupBox}
|
||||
CameraGroupBox {
|
||||
id: cameraGroupBox}
|
||||
SteamVRBindGroupBox{
|
||||
id: steamVRBindGroupBox
|
||||
}
|
||||
|
||||
Item { Layout.fillHeight: true; Layout.fillWidth: true}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -102,14 +102,14 @@ MyStackViewPage {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Layouts 1.3
|
||||
import ovras.advsettings 1.0
|
||||
import "../../common"
|
||||
|
||||
GroupBox {
|
||||
id: steamVRBindGroupBox
|
||||
Layout.fillWidth: true
|
||||
|
||||
label:
|
||||
MyText {
|
||||
leftPadding: 10
|
||||
text: "Binds:"
|
||||
bottomPadding: -10
|
||||
}
|
||||
|
||||
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
spacing: 16
|
||||
|
||||
MyToggleButton {
|
||||
id: steamvrBindingToggle
|
||||
text: "Enable Per-App"
|
||||
Layout.preferredWidth: 250
|
||||
onCheckedChanged: {
|
||||
SteamVRTabController.setPerAppBindEnabled(this.checked, false)
|
||||
if(!steamvrBindingToggle.checked){
|
||||
appSelect.enabled = false;
|
||||
setDefaultBtn.enabled = false;
|
||||
setBinding.enabled = false;
|
||||
}else{
|
||||
appSelect.enabled = true;
|
||||
setDefaultBtn.enabled = true;
|
||||
setBinding.enabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
MyText {
|
||||
Layout.preferredWidth: 0
|
||||
text: " "
|
||||
}
|
||||
|
||||
MyText {
|
||||
text: "Application: "
|
||||
Layout.preferredWidth: 150
|
||||
horizontalAlignment: Text.AlignRight
|
||||
Layout.rightMargin: 2
|
||||
}
|
||||
MyTextField {
|
||||
id: appSelect
|
||||
Layout.fillWidth: true
|
||||
text: "steam.overlay.1009850"
|
||||
keyBoardUID: 201
|
||||
Layout.leftMargin: 10
|
||||
Layout.rightMargin: 10
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
function onInputEvent(input) {
|
||||
this.text = input
|
||||
}
|
||||
}
|
||||
MyPushButton {
|
||||
id: bindingsButton
|
||||
activationSoundEnabled: false
|
||||
text: "Open Bindings"
|
||||
Layout.preferredWidth: 180
|
||||
onClicked: {
|
||||
SteamVRTabController.launchBindingUI()
|
||||
}
|
||||
}
|
||||
}
|
||||
RowLayout {
|
||||
spacing: 16
|
||||
MyText {
|
||||
text: "Save Current Binding of Selected App: "
|
||||
Layout.preferredWidth: 500
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
Layout.rightMargin: 2
|
||||
}
|
||||
MyPushButton {
|
||||
id: setBinding
|
||||
text:"For Current Game"
|
||||
onClicked: {
|
||||
SteamVRTabController.setBindingQMLWrapper(appSelect.text)
|
||||
}
|
||||
}
|
||||
MyText {
|
||||
Layout.preferredWidth: 50
|
||||
text: " "
|
||||
}
|
||||
MyPushButton {
|
||||
id: setDefaultBtn
|
||||
text:"As Default"
|
||||
onClicked: {
|
||||
SteamVRTabController.setBindingQMLWrapper(appSelect.text,true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
steamvrBindingToggle.checked = SteamVRTabController.perAppBindEnabled
|
||||
if(!steamvrBindingToggle.checked){
|
||||
appSelect.enabled = false;
|
||||
setDefaultBtn.enabled = false;
|
||||
setBinding.enabled = false;
|
||||
}else{
|
||||
appSelect.enabled = true;
|
||||
setDefaultBtn.enabled = true;
|
||||
setBinding.enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: SteamVRTabController
|
||||
onPerformanceGraphChanged:{
|
||||
steamvrBindingToggle.checked = SteamVRTabController.perAppBindEnabled
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
ColumnLayout {
|
||||
|
||||
@@ -15,14 +15,14 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -30,7 +30,7 @@ MyPushButton2 {
|
||||
background: Rectangle {
|
||||
// Provides feedback for mousing over and clicking buttons.
|
||||
opacity: parent.down ? 1.0 : (parent.activeFocus ? 0.5 : 0.0)
|
||||
color: "#406288"
|
||||
color: "#3d4450"
|
||||
radius: 4
|
||||
anchors.fill: parent
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
ColumnLayout {
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -22,7 +22,7 @@ MyDialogOkCancelPopup {
|
||||
MyTextField {
|
||||
id: videoNewProfileName
|
||||
keyBoardUID: 990
|
||||
color: "#cccccc"
|
||||
color: "#d9dbe0"
|
||||
text: ""
|
||||
Layout.fillWidth: true
|
||||
font.pointSize: 20
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -27,14 +27,14 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -15,7 +15,7 @@ GroupBox {
|
||||
}
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
border.color: "#ffffff"
|
||||
border.color: "#d9dbe0"
|
||||
radius: 8
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ GroupBox {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
color: "#ffffff"
|
||||
color: "#d9dbe0"
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 5
|
||||
|
||||
@@ -419,7 +419,11 @@ private:
|
||||
BoolSettingValue{ BoolSetting::ROTATION_autoturnShowNotification,
|
||||
SettingCategory::Rotation,
|
||||
QtInfo{ "autoturnShowNotification" },
|
||||
true }
|
||||
true },
|
||||
BoolSettingValue{ BoolSetting::STEAMVR_perappBindEnabled,
|
||||
SettingCategory::SteamVR,
|
||||
QtInfo{ "perappBindEnabled" },
|
||||
false }
|
||||
};
|
||||
|
||||
constexpr static auto doubleSettingSize
|
||||
|
||||
@@ -17,6 +17,7 @@ enum class SettingCategory
|
||||
Chaperone,
|
||||
ChaperoneProfiles,
|
||||
Rotation,
|
||||
SteamVR,
|
||||
};
|
||||
|
||||
struct QtInfo
|
||||
@@ -56,6 +57,8 @@ struct QtInfo
|
||||
return "chaperoneProfiles";
|
||||
case SettingCategory::Rotation:
|
||||
return "rotationSettings";
|
||||
case SettingCategory::SteamVR:
|
||||
return "steamVRSettings";
|
||||
}
|
||||
return "no-value";
|
||||
}
|
||||
|
||||
@@ -63,7 +63,8 @@ enum class BoolSetting
|
||||
ROTATION_autoturnViewRatchettingEnabled,
|
||||
ROTATION_autoturnShowNotification,
|
||||
// LAST_ENUMERATOR must always be set to the last value
|
||||
LAST_ENUMERATOR = ROTATION_autoturnShowNotification,
|
||||
STEAMVR_perappBindEnabled,
|
||||
LAST_ENUMERATOR = STEAMVR_perappBindEnabled,
|
||||
};
|
||||
|
||||
enum class DoubleSetting
|
||||
|
||||
@@ -1120,9 +1120,21 @@ void MoveCenterTabController::zeroOffsets()
|
||||
|
||||
// finished checking if out of bounds, proceed with normal zeroing
|
||||
// offsets
|
||||
if ( vr::VRChaperone()->GetCalibrationState()
|
||||
== vr::ChaperoneCalibrationState_OK )
|
||||
auto chaperoneState = vr::VRChaperone()->GetCalibrationState();
|
||||
if ( chaperoneState < vr::ChaperoneCalibrationState_Error
|
||||
|| m_ignoreChaperoneState )
|
||||
{
|
||||
if ( !m_chaperoneInit )
|
||||
{
|
||||
m_chaperoneInit = true;
|
||||
LOG( INFO ) << "Chaperone Initially Calibrated";
|
||||
}
|
||||
if ( chaperoneState > vr::ChaperoneCalibrationState_OK )
|
||||
{
|
||||
LOG( WARNING )
|
||||
<< "Chaperone Cal State Is warning during zero offsets: "
|
||||
<< chaperoneState;
|
||||
}
|
||||
m_oldOffsetX = 0.0f;
|
||||
m_oldOffsetY = 0.0f;
|
||||
m_oldOffsetZ = 0.0f;
|
||||
@@ -1180,7 +1192,6 @@ void MoveCenterTabController::zeroOffsets()
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG( WARNING ) << "Chaperone not calibrated?";
|
||||
if ( !m_pendingZeroOffsets )
|
||||
{
|
||||
LOG( INFO ) << "PENDING: Chaperone Data Update and Offsets zeroing";
|
||||
@@ -3088,4 +3099,11 @@ void MoveCenterTabController::eventLoopTick(
|
||||
updateSpace();
|
||||
}
|
||||
}
|
||||
|
||||
void MoveCenterTabController::setIgnoreChaperoneState()
|
||||
{
|
||||
m_ignoreChaperoneState = true;
|
||||
LOG( INFO ) << "Ignoring Chaperone State for Zero Offsets";
|
||||
}
|
||||
|
||||
} // namespace advsettings
|
||||
|
||||
@@ -161,6 +161,7 @@ private:
|
||||
float m_lastControllerPosition[3];
|
||||
bool m_heightToggle = false;
|
||||
float m_gravityFloor = 0.0f;
|
||||
bool m_ignoreChaperoneState = false;
|
||||
// Set lastHandQuaternion.w to -1000.0 when last hand is invalid.
|
||||
vr::HmdQuaternion_t m_lastHandQuaternion
|
||||
= { k_quaternionInvalidValue, 0.0, 0.0, 0.0 };
|
||||
@@ -206,6 +207,8 @@ private:
|
||||
unsigned m_dragComfortFrameSkipCounter = 0;
|
||||
unsigned m_turnComfortFrameSkipCounter = 0;
|
||||
|
||||
bool m_chaperoneInit = true;
|
||||
|
||||
// Matrix used For Center Marker
|
||||
vr::HmdMatrix34_t m_offsetmatrix = utils::k_forwardUpMatrix;
|
||||
|
||||
@@ -290,6 +293,7 @@ public:
|
||||
void saveOffsetProfiles();
|
||||
Q_INVOKABLE unsigned getOffsetProfileCount();
|
||||
Q_INVOKABLE QString getOffsetProfileName( unsigned index );
|
||||
Q_INVOKABLE void setIgnoreChaperoneState();
|
||||
|
||||
// actions:
|
||||
void leftHandSpaceDrag( bool leftHandDragActive );
|
||||
|
||||
@@ -628,4 +628,351 @@ std::vector<QString>
|
||||
return dongleList;
|
||||
}
|
||||
|
||||
// Binding Functions
|
||||
void SteamVRTabController::getBindingUrlReq( std::string appID )
|
||||
{
|
||||
m_lastAppID = appID;
|
||||
std::string urls
|
||||
= "http://localhost:27062/input/getactions.json?app_key=" + appID;
|
||||
QUrl url = QUrl( urls.c_str() );
|
||||
QNetworkRequest request;
|
||||
request.setUrl( url );
|
||||
// This is Important as otherwise Valve's VRWebServerWillIgnore the Request
|
||||
request.setRawHeader(
|
||||
QByteArray( "Referer" ),
|
||||
QByteArray(
|
||||
"http://localhost:27062/dashboard/controllerbinding.html" ) );
|
||||
// TODO start Timeout timer?
|
||||
connect( &m_networkManagerUrl,
|
||||
SIGNAL( finished( QNetworkReply* ) ),
|
||||
this,
|
||||
SLOT( onGetBindingUrlResponse( QNetworkReply* ) ) );
|
||||
m_networkManagerUrl.get( request );
|
||||
return;
|
||||
}
|
||||
void SteamVRTabController::onGetBindingUrlResponse( QNetworkReply* reply )
|
||||
{
|
||||
QString data = QString::fromUtf8( reply->readAll() );
|
||||
if ( data.size() < 2 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
std::string controllerName = ovr_system_wrapper::getControllerName();
|
||||
if ( controllerName == "" )
|
||||
{
|
||||
LOG( WARNING ) << "No Controller Detected Skipping Bindings";
|
||||
return;
|
||||
}
|
||||
json jsonfull = json::parse( data.toStdString() );
|
||||
// LOG( INFO ) << "URL RESPOSNE XXXXXXX";
|
||||
// LOG( INFO ) << jsonfull.dump().c_str();
|
||||
std::string filepath
|
||||
= jsonfull["current_binding_url"][controllerName].get<std::string>();
|
||||
LOG( INFO ) << "binding url at " << filepath;
|
||||
// TODO perhaps some form of error checking if packet wrong?
|
||||
reply->close();
|
||||
getBindingDataReq( filepath, m_lastAppID, controllerName );
|
||||
return;
|
||||
}
|
||||
|
||||
void SteamVRTabController::getBindingDataReq( std::string steamURL,
|
||||
std::string appID,
|
||||
std::string ctrlType )
|
||||
{
|
||||
std::string urls = "http://localhost:27062/input/"
|
||||
"loadbindingfromurl.json?binding_url="
|
||||
+ steamURL + "&controller_type=" + ctrlType
|
||||
+ "&app_key=" + appID;
|
||||
QUrl url = QUrl( urls.c_str() );
|
||||
QNetworkRequest request;
|
||||
request.setUrl( url );
|
||||
// This is Important as otherwise Valve's VRWebServerWillIgnore the Request
|
||||
request.setRawHeader(
|
||||
QByteArray( "Referer" ),
|
||||
QByteArray(
|
||||
"http://localhost:27062/dashboard/controllerbinding.html" ) );
|
||||
// TODO start Timeout timer?
|
||||
connect( &m_networkManagerBind,
|
||||
SIGNAL( finished( QNetworkReply* ) ),
|
||||
this,
|
||||
SLOT( onGetBindingDataResponse( QNetworkReply* ) ) );
|
||||
m_networkManagerBind.get( request );
|
||||
return;
|
||||
}
|
||||
void SteamVRTabController::onGetBindingDataResponse( QNetworkReply* reply )
|
||||
{
|
||||
json output = "";
|
||||
QString data = QString::fromUtf8( reply->readAll() );
|
||||
if ( data.size() < 2 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
// LOG( WARNING ) << "DATA RESPONSE";
|
||||
// LOG( WARNING ) << data.toStdString();
|
||||
json jsonfull = json::parse( data.toStdString() );
|
||||
if ( !jsonfull.contains( "success" ) )
|
||||
{
|
||||
LOG( ERROR ) << "Binding Data Packet Mal-Formed?";
|
||||
}
|
||||
if ( !jsonfull["success"].get<bool>() )
|
||||
{
|
||||
// TODO better error handling?
|
||||
LOG( ERROR ) << "Binding Data Request Failed";
|
||||
}
|
||||
reply->close();
|
||||
output = jsonfull["binding_config"];
|
||||
std::string sceneAppID = ovr_application_wrapper::getSceneAppID();
|
||||
if ( sceneAppID == "error" )
|
||||
{
|
||||
LOG( ERROR ) << "aborting bind save, could not find scene app ID";
|
||||
return;
|
||||
}
|
||||
std::string ctrl = ovr_system_wrapper::getControllerName();
|
||||
saveBind( m_lastAppID, sceneAppID, ctrl, output, m_setDefault );
|
||||
return;
|
||||
}
|
||||
|
||||
bool SteamVRTabController::saveBind( std::string appID,
|
||||
std::string sceneAppID,
|
||||
std::string ctrlType,
|
||||
json binds,
|
||||
bool def )
|
||||
{
|
||||
m_setDefault = false;
|
||||
QFileInfo fi(
|
||||
QString::fromStdString( settings::initializeAndGetSettingsPath() ) );
|
||||
QDir directory = fi.absolutePath();
|
||||
QString Fn;
|
||||
if ( def )
|
||||
{
|
||||
Fn = QString::fromStdString( "defovl" + appID + "ctrl" + ctrlType
|
||||
+ ".json" );
|
||||
}
|
||||
else
|
||||
{
|
||||
Fn = QString::fromStdString( "ovl" + appID + "scene" + sceneAppID
|
||||
+ "ctrl" + ctrlType + ".json" );
|
||||
}
|
||||
QString absPath = directory.absolutePath() + "/" + Fn;
|
||||
|
||||
QFile bindFile( absPath );
|
||||
bindFile.open( QIODevice::ReadWrite | QIODevice::Truncate
|
||||
| QIODevice::Text );
|
||||
QByteArray qba = binds.dump().c_str();
|
||||
bindFile.write( qba );
|
||||
bindFile.flush();
|
||||
bindFile.close();
|
||||
if ( bindFile.exists() )
|
||||
{
|
||||
LOG( INFO ) << ( def ? "Default " : ( sceneAppID + " " ) )
|
||||
+ "Binding File saved at:"
|
||||
<< absPath.toStdString();
|
||||
std::string jsonstring = binds.dump().c_str();
|
||||
LOG( INFO ) << jsonstring;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SteamVRTabController::customBindExists( std::string appID,
|
||||
std::string sceneAppID,
|
||||
std::string ctrl )
|
||||
{
|
||||
if ( appID == "" )
|
||||
{
|
||||
appID = m_lastAppID;
|
||||
}
|
||||
if ( sceneAppID == "" )
|
||||
{
|
||||
sceneAppID = ovr_application_wrapper::getSceneAppID();
|
||||
}
|
||||
if ( ctrl == "" )
|
||||
{
|
||||
ctrl = ovr_system_wrapper::getControllerName();
|
||||
}
|
||||
QFileInfo fi( QString::fromStdString(
|
||||
settings::initializeAndGetSettingsPath() + "ovl" + appID + "scene"
|
||||
+ sceneAppID + "ctrl" + ctrl + ".json" ) );
|
||||
if ( fi.exists() )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SteamVRTabController::defBindExists( std::string appID, std::string ctrl )
|
||||
{
|
||||
if ( appID == "" )
|
||||
{
|
||||
appID = m_lastAppID;
|
||||
}
|
||||
if ( ctrl == "" )
|
||||
{
|
||||
ctrl = ovr_system_wrapper::getControllerName();
|
||||
}
|
||||
QFileInfo fi( QString::fromStdString(
|
||||
settings::initializeAndGetSettingsPath() + "defovl" + appID + "ctrl"
|
||||
+ ctrl + ".json" ) );
|
||||
if ( fi.exists() )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void SteamVRTabController::applyBindingReq( std::string appID )
|
||||
{
|
||||
std::string ctrlType = ovr_system_wrapper::getControllerName();
|
||||
QFileInfo fi(
|
||||
QString::fromStdString( settings::initializeAndGetSettingsPath() ) );
|
||||
QDir directory = fi.absolutePath();
|
||||
QString Fn;
|
||||
std::string sceneAppID = ovr_application_wrapper::getSceneAppID();
|
||||
if ( sceneAppID == "" )
|
||||
{
|
||||
LOG( ERROR ) << "NO Scene App Detected unable to apply bindings";
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO check forward slash compatibility with linux
|
||||
Fn = QString::fromStdString( "ovl" + appID + "scene" + sceneAppID + "ctrl"
|
||||
+ ctrlType + ".json" );
|
||||
if ( !QFileInfo::exists( fi.absolutePath() + QString( "/" ) + Fn ) )
|
||||
{
|
||||
LOG( INFO ) << "No Specific Binding Detected for: " + appID
|
||||
+ "for Scene: " + sceneAppID + " Checking Default";
|
||||
Fn = QString::fromStdString( "defovl" + appID + "ctrl" + ctrlType
|
||||
+ ".json" );
|
||||
if ( !QFileInfo::exists( fi.absolutePath() + QString( "/" ) + Fn ) )
|
||||
{
|
||||
LOG( INFO ) << "No Def Binding Detected for: " + appID
|
||||
+ " Not Adjusting Bindings";
|
||||
return;
|
||||
}
|
||||
}
|
||||
// TODO possible linux compatibility issue
|
||||
QString absPath = directory.absolutePath() + "/" + Fn;
|
||||
QUrl urlized = QUrl::fromLocalFile( absPath );
|
||||
// std::string filePath = "file:///" + absPath.toStdString();
|
||||
std::string url = "http://localhost:27062/input/selectconfig.action";
|
||||
// LOG( INFO ) << urlized.toEncoded().toStdString();
|
||||
QUrl urls = QUrl( url.c_str() );
|
||||
QNetworkRequest request;
|
||||
request.setUrl( urls );
|
||||
LOG( INFO ) << "Attempting to Apply Binding at: "
|
||||
<< urlized
|
||||
.toEncoded( QUrl::EncodeSpaces | QUrl::EncodeReserved )
|
||||
.toStdString();
|
||||
// This is Important as otherwise Valve's VRWebServerWillIgnore the Request
|
||||
// If referrer is wrong
|
||||
request.setHeader( QNetworkRequest::ContentTypeHeader,
|
||||
"application/x-www-form-urlencoded" );
|
||||
request.setRawHeader(
|
||||
QByteArray( "Referer" ),
|
||||
QByteArray(
|
||||
"http://localhost:27062/dashboard/controllerbinding.html" ) );
|
||||
QByteArray data
|
||||
= ( "{\"app_key\":\"" + appID + "\",\"controller_type\":\"" + ctrlType
|
||||
+ "\",\"url\":\""
|
||||
+ urlized.toEncoded( QUrl::EncodeSpaces | QUrl::EncodeReserved )
|
||||
.toStdString()
|
||||
+ "\"}" )
|
||||
.c_str();
|
||||
// LOG( INFO ) << "Sending Binding Set Request";
|
||||
// LOG( INFO ) << data.toStdString();
|
||||
connect( &m_networkManagerApply,
|
||||
SIGNAL( finished( QNetworkReply* ) ),
|
||||
this,
|
||||
SLOT( onApplyBindingResponse( QNetworkReply* ) ) );
|
||||
m_networkManagerApply.post( request, data );
|
||||
}
|
||||
|
||||
void SteamVRTabController::onApplyBindingResponse( QNetworkReply* reply )
|
||||
{
|
||||
json output = "";
|
||||
QString data = QString::fromUtf8( reply->readAll() );
|
||||
if ( data.size() < 2 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
// LOG( INFO ) << "APPLY RESPONSE";
|
||||
// LOG( INFO ) << data.toStdString();
|
||||
reply->close();
|
||||
json jsonfull = json::parse( data.toStdString() );
|
||||
if ( !jsonfull.contains( "success" ) )
|
||||
{
|
||||
LOG( ERROR ) << "Apply Binding Packet Mal-Formed?";
|
||||
return;
|
||||
}
|
||||
if ( !jsonfull["success"].get<bool>() )
|
||||
{
|
||||
// TODO better error handling?
|
||||
LOG( ERROR ) << "Binding Failed To Apply";
|
||||
}
|
||||
LOG( INFO ) << "New Binding Applied";
|
||||
return;
|
||||
}
|
||||
|
||||
void SteamVRTabController::setBindingQMLWrapper( QString appID, bool def )
|
||||
{
|
||||
m_setDefault = def;
|
||||
std::string aID = appID.toStdString();
|
||||
getBindingUrlReq( aID );
|
||||
}
|
||||
|
||||
bool SteamVRTabController::perAppBindEnabled() const
|
||||
{
|
||||
return settings::getSetting(
|
||||
settings::BoolSetting::STEAMVR_perappBindEnabled );
|
||||
}
|
||||
void SteamVRTabController::setPerAppBindEnabled( bool value, bool notify )
|
||||
{
|
||||
settings::setSetting( settings::BoolSetting::STEAMVR_perappBindEnabled,
|
||||
value );
|
||||
|
||||
if ( notify )
|
||||
{
|
||||
emit perAppBindEnabledChanged( value );
|
||||
}
|
||||
}
|
||||
|
||||
void SteamVRTabController::applyAllCustomBindings()
|
||||
{
|
||||
QFileInfo fi(
|
||||
QString::fromStdString( settings::initializeAndGetSettingsPath() ) );
|
||||
QDir directory = fi.absolutePath();
|
||||
QStringList bindings = directory.entryList( QStringList() << "*.json"
|
||||
<< "*.JSON",
|
||||
QDir::Files );
|
||||
std::set<std::string> appIDs;
|
||||
std::regex r1( "ovl(.*)scene" );
|
||||
std::regex r2( "defovl(.*)ctrl" );
|
||||
foreach ( QString filename, bindings )
|
||||
{
|
||||
std::smatch m;
|
||||
std::string s = filename.toStdString();
|
||||
|
||||
if ( regex_search( s, m, r1 ) )
|
||||
{
|
||||
if ( m.size() == 2 )
|
||||
{
|
||||
appIDs.insert( m[1].str() );
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if ( regex_search( s, m, r2 ) )
|
||||
{
|
||||
if ( m.size() == 2 )
|
||||
{
|
||||
appIDs.insert( m[1].str() );
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ( std::string appID, appIDs )
|
||||
{
|
||||
applyBindingReq( appID );
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace advsettings
|
||||
|
||||