From 4c79e4a23c20dc39e159309aadb7741b559fd4b5 Mon Sep 17 00:00:00 2001 From: your_username Date: Sun, 22 Feb 2026 23:08:07 -0500 Subject: [PATCH] net 8 upgrade and xbox gamebar widget --- .../workflows/build_performance_overlay.yaml | 68 +++- .gitignore | 3 + CommonHelpers/CommonHelpers.csproj | 4 +- CommonHelpers/Vlv0100.cs | 2 +- ExternalHelpers/ExternalHelpers.csproj | 4 +- PerformanceOverlay/OverlayCommandLine.cs | 332 ++++++++++++++++++ PerformanceOverlay/PerformanceOverlay.csproj | 2 +- PerformanceOverlay/Program.cs | 11 +- PerformanceOverlay/UriProtocolRegistration.cs | 37 ++ README.md | 42 ++- SteamDeckTools.sln | 14 + XboxGameBarWidget/App.xaml | 5 + XboxGameBarWidget/App.xaml.cs | 93 +++++ .../Assets/LargeTile.scale-100.png | Bin 0 -> 19919 bytes .../Assets/SmallTile.scale-100.png | Bin 0 -> 3373 bytes .../Assets/SplashScreen.scale-100.png | Bin 0 -> 19236 bytes .../Assets/Square150x150Logo.scale-100.png | Bin 0 -> 7665 bytes .../Assets/Square44x44Logo.scale-100.png | Bin 0 -> 1886 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 1311 bytes .../Assets/StoreLogo.scale-100.png | Bin 0 -> 2245 bytes .../Assets/Wide310x150Logo.scale-100.png | Bin 0 -> 8242 bytes XboxGameBarWidget/MainPage.xaml | 16 + XboxGameBarWidget/MainPage.xaml.cs | 12 + XboxGameBarWidget/Package.appxmanifest | 112 ++++++ XboxGameBarWidget/Properties/AssemblyInfo.cs | 14 + XboxGameBarWidget/Properties/Default.rd.xml | 5 + .../SteamDeckToolsGameBarWidget.csproj | 159 +++++++++ XboxGameBarWidget/WidgetPage.xaml | 68 ++++ XboxGameBarWidget/WidgetPage.xaml.cs | 42 +++ docs/performance-overlay.md | 21 ++ scripts/build.ps1 | 2 +- scripts/install_gamebar_widget.ps1 | 66 ++++ scripts/run_loop.bat | 4 +- 33 files changed, 1119 insertions(+), 19 deletions(-) create mode 100644 PerformanceOverlay/OverlayCommandLine.cs create mode 100644 PerformanceOverlay/UriProtocolRegistration.cs create mode 100644 XboxGameBarWidget/App.xaml create mode 100644 XboxGameBarWidget/App.xaml.cs create mode 100644 XboxGameBarWidget/Assets/LargeTile.scale-100.png create mode 100644 XboxGameBarWidget/Assets/SmallTile.scale-100.png create mode 100644 XboxGameBarWidget/Assets/SplashScreen.scale-100.png create mode 100644 XboxGameBarWidget/Assets/Square150x150Logo.scale-100.png create mode 100644 XboxGameBarWidget/Assets/Square44x44Logo.scale-100.png create mode 100644 XboxGameBarWidget/Assets/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 XboxGameBarWidget/Assets/StoreLogo.scale-100.png create mode 100644 XboxGameBarWidget/Assets/Wide310x150Logo.scale-100.png create mode 100644 XboxGameBarWidget/MainPage.xaml create mode 100644 XboxGameBarWidget/MainPage.xaml.cs create mode 100644 XboxGameBarWidget/Package.appxmanifest create mode 100644 XboxGameBarWidget/Properties/AssemblyInfo.cs create mode 100644 XboxGameBarWidget/Properties/Default.rd.xml create mode 100644 XboxGameBarWidget/SteamDeckToolsGameBarWidget.csproj create mode 100644 XboxGameBarWidget/WidgetPage.xaml create mode 100644 XboxGameBarWidget/WidgetPage.xaml.cs create mode 100644 scripts/install_gamebar_widget.ps1 diff --git a/.github/workflows/build_performance_overlay.yaml b/.github/workflows/build_performance_overlay.yaml index 4ee391f..65a467a 100644 --- a/.github/workflows/build_performance_overlay.yaml +++ b/.github/workflows/build_performance_overlay.yaml @@ -1,3 +1,5 @@ +name: build-performance-overlay + on: workflow_dispatch: push: @@ -6,6 +8,8 @@ on: - "PerformanceOverlay/**" - "CommonHelpers/**" - "ExternalHelpers/**" + - "XboxGameBarWidget/**" + - "scripts/install_gamebar_widget.ps1" - "VERSION" pull_request: paths: @@ -13,14 +17,17 @@ on: - "PerformanceOverlay/**" - "CommonHelpers/**" - "ExternalHelpers/**" + - "XboxGameBarWidget/**" + - "scripts/install_gamebar_widget.ps1" - "VERSION" env: - DOTNET_VERSION: "6.0.x" + DOTNET_VERSION: "8.0.x" APP_NAME: PerformanceOverlay + WIDGET_NAME: SteamDeckToolsGameBarWidget jobs: - build-performance-overlay: + build: runs-on: windows-latest steps: - uses: actions/checkout@v4 @@ -30,27 +37,80 @@ jobs: with: dotnet-version: ${{ env.DOTNET_VERSION }} - - name: Set RELEASE_VERSION + - name: Setup MSBuild + uses: microsoft/setup-msbuild@v2 + + - name: Set versions shell: pwsh run: | $majorVersion = (Get-Content VERSION -Raw).Trim() $releaseVersion = "$majorVersion.${{ github.run_number }}" "RELEASE_VERSION=$releaseVersion" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + $segments = @($majorVersion.Split('.') | Where-Object { $_ -ne '' }) + switch ($segments.Count) { + 0 { $widgetVersion = "1.0.${{ github.run_number }}.0" } + 1 { $widgetVersion = "$($segments[0]).0.${{ github.run_number }}.0" } + 2 { $widgetVersion = "$($segments[0]).$($segments[1]).${{ github.run_number }}.0" } + default { $widgetVersion = "$($segments[0]).$($segments[1]).$($segments[2]).${{ github.run_number }}" } + } + "WIDGET_PACKAGE_VERSION=$widgetVersion" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + - name: Restore PerformanceOverlay dependencies run: dotnet restore PerformanceOverlay/PerformanceOverlay.csproj - name: Build PerformanceOverlay run: dotnet build PerformanceOverlay/PerformanceOverlay.csproj --configuration Release --output "${{ env.APP_NAME }}-${{ env.RELEASE_VERSION }}/" "/property:Version=${{ env.RELEASE_VERSION }}" "/property:ExtraDefineConstants=PRODUCTION_BUILD" - - name: Create zip artifact + - name: Create PerformanceOverlay zip artifact shell: pwsh run: | Compress-Archive -Path "${{ env.APP_NAME }}-${{ env.RELEASE_VERSION }}\*" -DestinationPath "${{ env.APP_NAME }}-${{ env.RELEASE_VERSION }}.zip" + - name: Build Game Bar widget package + shell: pwsh + run: | + $manifestPath = "XboxGameBarWidget/Package.appxmanifest" + $manifestContent = Get-Content $manifestPath -Raw + $manifestContent = [regex]::Replace( + $manifestContent, + '( - net6.0-windows + net8.0-windows enable true true @@ -9,7 +9,7 @@ $(DefineConstants);$(ExtraDefineConstants) - + diff --git a/CommonHelpers/Vlv0100.cs b/CommonHelpers/Vlv0100.cs index f39eee7..25bf9cc 100644 --- a/CommonHelpers/Vlv0100.cs +++ b/CommonHelpers/Vlv0100.cs @@ -208,7 +208,7 @@ } private void SetRampRate(byte rampRate) { - byte[] data = BitConverter.GetBytes(rampRate); + byte[] data = new byte[] { rampRate }; inpOut?.WriteMemory(FRPR, data); } } diff --git a/ExternalHelpers/ExternalHelpers.csproj b/ExternalHelpers/ExternalHelpers.csproj index 247d3ee..2da42be 100644 --- a/ExternalHelpers/ExternalHelpers.csproj +++ b/ExternalHelpers/ExternalHelpers.csproj @@ -1,7 +1,7 @@  - net6.0-windows + net8.0-windows enable true enable @@ -9,7 +9,7 @@ - + diff --git a/PerformanceOverlay/OverlayCommandLine.cs b/PerformanceOverlay/OverlayCommandLine.cs new file mode 100644 index 0000000..06770e3 --- /dev/null +++ b/PerformanceOverlay/OverlayCommandLine.cs @@ -0,0 +1,332 @@ +using CommonHelpers; + +namespace PerformanceOverlay +{ + internal enum OverlayControlResult + { + NotACommand, + HandledAndExit, + ContinueStartup + } + + internal enum OverlayControlCommandType + { + SetMode, + CycleMode, + ToggleVisibility, + Show, + Hide + } + + internal readonly struct OverlayControlCommand + { + public OverlayControlCommandType CommandType { get; } + public OverlayMode Mode { get; } + + private OverlayControlCommand(OverlayControlCommandType commandType, OverlayMode mode = OverlayMode.FPS) + { + CommandType = commandType; + Mode = mode; + } + + public static OverlayControlCommand SetMode(OverlayMode mode) + { + return new OverlayControlCommand(OverlayControlCommandType.SetMode, mode); + } + + public static OverlayControlCommand CycleMode() + { + return new OverlayControlCommand(OverlayControlCommandType.CycleMode); + } + + public static OverlayControlCommand ToggleVisibility() + { + return new OverlayControlCommand(OverlayControlCommandType.ToggleVisibility); + } + + public static OverlayControlCommand Show() + { + return new OverlayControlCommand(OverlayControlCommandType.Show); + } + + public static OverlayControlCommand Hide() + { + return new OverlayControlCommand(OverlayControlCommandType.Hide); + } + } + + internal static class OverlayCommandLine + { + internal const string ProtocolScheme = "steamdecktools-performanceoverlay"; + private const string RunOnceMutexName = "Global\\PerformanceOverlay"; + + public static OverlayControlResult HandleArgs(string[] args) + { + if (!TryParseCommand(args, out var command)) + return OverlayControlResult.NotACommand; + + if (TryDispatchToRunningInstance(command)) + return OverlayControlResult.HandledAndExit; + + // Avoid run-once fatal dialog if an existing instance is present but IPC failed. + if (IsPerformanceOverlayInstanceRunning()) + return OverlayControlResult.HandledAndExit; + + ApplyLocally(command); + return OverlayControlResult.ContinueStartup; + } + + private static bool TryParseCommand(string[] args, out OverlayControlCommand command) + { + command = default; + + foreach (var arg in args) + { + if (TryParseUriCommand(arg, out command)) + return true; + } + + return TryParseSwitchCommand(args, out command); + } + + private static bool TryParseUriCommand(string arg, out OverlayControlCommand command) + { + command = default; + + if (!Uri.TryCreate(arg, UriKind.Absolute, out var uri)) + return false; + + if (!uri.Scheme.Equals(ProtocolScheme, StringComparison.OrdinalIgnoreCase)) + return false; + + var segments = new List(); + if (!String.IsNullOrWhiteSpace(uri.Host)) + segments.Add(uri.Host); + + segments.AddRange( + uri.AbsolutePath + .Split('/', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) + ); + + if (segments.Count == 0) + return false; + + var head = segments[0]; + if (head.Equals("cycle", StringComparison.OrdinalIgnoreCase)) + { + command = OverlayControlCommand.CycleMode(); + return true; + } + + if (head.Equals("toggle", StringComparison.OrdinalIgnoreCase)) + { + command = OverlayControlCommand.ToggleVisibility(); + return true; + } + + if (head.Equals("show", StringComparison.OrdinalIgnoreCase)) + { + command = OverlayControlCommand.Show(); + return true; + } + + if (head.Equals("hide", StringComparison.OrdinalIgnoreCase)) + { + command = OverlayControlCommand.Hide(); + return true; + } + + if ((head.Equals("mode", StringComparison.OrdinalIgnoreCase) || head.Equals("set", StringComparison.OrdinalIgnoreCase)) + && segments.Count > 1 + && TryParseMode(segments[1], out var uriMode)) + { + command = OverlayControlCommand.SetMode(uriMode); + return true; + } + + return false; + } + + private static bool TryParseSwitchCommand(string[] args, out OverlayControlCommand command) + { + command = default; + for (int i = 0; i < args.Length; i++) + { + var arg = args[i]; + if (arg.Equals("--cycle", StringComparison.OrdinalIgnoreCase)) + { + command = OverlayControlCommand.CycleMode(); + return true; + } + + if (arg.Equals("--toggle", StringComparison.OrdinalIgnoreCase)) + { + command = OverlayControlCommand.ToggleVisibility(); + return true; + } + + if (arg.Equals("--show", StringComparison.OrdinalIgnoreCase)) + { + command = OverlayControlCommand.Show(); + return true; + } + + if (arg.Equals("--hide", StringComparison.OrdinalIgnoreCase)) + { + command = OverlayControlCommand.Hide(); + return true; + } + + if (arg.StartsWith("--mode=", StringComparison.OrdinalIgnoreCase)) + { + var modeArg = arg["--mode=".Length..]; + if (TryParseMode(modeArg, out var inlineMode)) + { + command = OverlayControlCommand.SetMode(inlineMode); + return true; + } + } + + if (arg.Equals("--mode", StringComparison.OrdinalIgnoreCase) && i + 1 < args.Length && TryParseMode(args[i + 1], out var nextMode)) + { + command = OverlayControlCommand.SetMode(nextMode); + return true; + } + } + + return false; + } + + private static bool TryParseMode(string value, out OverlayMode mode) + { + if (Enum.TryParse(value, true, out mode)) + return true; + + var normalized = value.Trim().Replace("-", "").Replace("_", "").ToLowerInvariant(); + switch (normalized) + { + case "fpsbattery": + case "fpswithbattery": + mode = OverlayMode.FPSWithBattery; + return true; + default: + return false; + } + } + + private static bool TryDispatchToRunningInstance(OverlayControlCommand command) + { + try + { + using var sharedData = SharedData.OpenExisting(); + if (!sharedData.GetValue(out var value)) + value = sharedData.NewValue(); + + ApplyToSharedState(ref value, command); + return sharedData.SetValue(value); + } + catch (Exception ex) + { + Log.TraceLine("OverlayCommandLine: IPC dispatch failed: {0}", ex.Message); + return false; + } + } + + private static void ApplyToSharedState(ref OverlayModeSetting value, OverlayControlCommand command) + { + switch (command.CommandType) + { + case OverlayControlCommandType.SetMode: + value.Desired = command.Mode; + value.DesiredEnabled = OverlayEnabled.Yes; + return; + case OverlayControlCommandType.CycleMode: + value.Desired = NextMode(CurrentMode(value)); + value.DesiredEnabled = OverlayEnabled.Yes; + return; + case OverlayControlCommandType.ToggleVisibility: + value.DesiredEnabled = CurrentEnabled(value) == OverlayEnabled.Yes ? OverlayEnabled.No : OverlayEnabled.Yes; + return; + case OverlayControlCommandType.Show: + value.DesiredEnabled = OverlayEnabled.Yes; + return; + case OverlayControlCommandType.Hide: + value.DesiredEnabled = OverlayEnabled.No; + return; + default: + return; + } + } + + private static OverlayMode CurrentMode(OverlayModeSetting value) + { + if (Enum.IsDefined(value.Current)) + return value.Current; + if (Enum.IsDefined(value.Desired)) + return value.Desired; + return Settings.Default.OSDMode; + } + + private static OverlayEnabled CurrentEnabled(OverlayModeSetting value) + { + if (Enum.IsDefined(value.CurrentEnabled)) + return value.CurrentEnabled; + if (Enum.IsDefined(value.DesiredEnabled)) + return value.DesiredEnabled; + return Settings.Default.ShowOSD ? OverlayEnabled.Yes : OverlayEnabled.No; + } + + private static void ApplyLocally(OverlayControlCommand command) + { + switch (command.CommandType) + { + case OverlayControlCommandType.SetMode: + Settings.Default.OSDMode = command.Mode; + Settings.Default.ShowOSD = true; + return; + case OverlayControlCommandType.CycleMode: + Settings.Default.OSDMode = NextMode(Settings.Default.OSDMode); + Settings.Default.ShowOSD = true; + return; + case OverlayControlCommandType.ToggleVisibility: + Settings.Default.ShowOSD = !Settings.Default.ShowOSD; + return; + case OverlayControlCommandType.Show: + Settings.Default.ShowOSD = true; + return; + case OverlayControlCommandType.Hide: + Settings.Default.ShowOSD = false; + return; + default: + return; + } + } + + private static OverlayMode NextMode(OverlayMode current) + { + var values = Enum.GetValues(); + var currentIndex = Array.IndexOf(values, current); + if (currentIndex < 0) + currentIndex = 0; + + return values[(currentIndex + 1) % values.Length]; + } + + private static bool IsPerformanceOverlayInstanceRunning() + { + try + { + using var mutex = Mutex.OpenExisting(RunOnceMutexName); + return true; + } + catch (WaitHandleCannotBeOpenedException) + { + return false; + } + catch (UnauthorizedAccessException) + { + return true; + } + } + } +} diff --git a/PerformanceOverlay/PerformanceOverlay.csproj b/PerformanceOverlay/PerformanceOverlay.csproj index 8286234..4ffe322 100644 --- a/PerformanceOverlay/PerformanceOverlay.csproj +++ b/PerformanceOverlay/PerformanceOverlay.csproj @@ -2,7 +2,7 @@ WinExe - net6.0-windows + net8.0-windows enable true enable diff --git a/PerformanceOverlay/Program.cs b/PerformanceOverlay/Program.cs index 40eb031..b0b65f1 100644 --- a/PerformanceOverlay/Program.cs +++ b/PerformanceOverlay/Program.cs @@ -1,6 +1,5 @@ using CommonHelpers; -using RTSSSharedMemoryNET; -using System.Diagnostics; +using System.Linq; namespace PerformanceOverlay { @@ -11,6 +10,12 @@ namespace PerformanceOverlay { Instance.WithSentry(() => { + UriProtocolRegistration.EnsureRegistered(); + + var commandResult = OverlayCommandLine.HandleArgs(Environment.GetCommandLineArgs().Skip(1).ToArray()); + if (commandResult == OverlayControlResult.HandledAndExit) + return; + ApplicationConfiguration.Initialize(); using (var controller = new Controller()) @@ -20,4 +25,4 @@ namespace PerformanceOverlay }); } } -} \ No newline at end of file +} diff --git a/PerformanceOverlay/UriProtocolRegistration.cs b/PerformanceOverlay/UriProtocolRegistration.cs new file mode 100644 index 0000000..2943c2c --- /dev/null +++ b/PerformanceOverlay/UriProtocolRegistration.cs @@ -0,0 +1,37 @@ +using CommonHelpers; +using Microsoft.Win32; + +namespace PerformanceOverlay +{ + internal static class UriProtocolRegistration + { + private const string ProtocolKey = @"Software\Classes\steamdecktools-performanceoverlay"; + + public static void EnsureRegistered() + { + try + { + var exePath = Environment.ProcessPath; + if (String.IsNullOrWhiteSpace(exePath)) + return; + + using var protocol = Registry.CurrentUser.CreateSubKey(ProtocolKey); + if (protocol is null) + return; + + protocol.SetValue("", "URL:Steam Deck Tools Performance Overlay"); + protocol.SetValue("URL Protocol", ""); + + using var icon = protocol.CreateSubKey("DefaultIcon"); + icon?.SetValue("", "\"" + exePath + "\",0"); + + using var command = protocol.CreateSubKey(@"shell\open\command"); + command?.SetValue("", "\"" + exePath + "\" \"%1\""); + } + catch (Exception ex) + { + Log.TraceLine("UriProtocolRegistration: {0}", ex.Message); + } + } + } +} diff --git a/README.md b/README.md index b6061b8..6552c81 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,14 @@ This repository is a personal fork of Steam Deck Tools, customized for my ROG Al ## Scope -This fork is focused on `PerformanceOverlay` only. +This fork is focused on `PerformanceOverlay` and companion tooling around it (including a Game Bar widget). Included projects: - `PerformanceOverlay` - `CommonHelpers` - `ExternalHelpers` +- `XboxGameBarWidget` The other original applications are intentionally not part of active development in this fork. @@ -21,9 +22,44 @@ dotnet restore PerformanceOverlay/PerformanceOverlay.csproj dotnet build PerformanceOverlay/PerformanceOverlay.csproj --configuration Release ``` +This fork now targets `.NET 8` for desktop projects. + ## CI -GitHub Actions is configured to build only `PerformanceOverlay` and publish a ZIP artifact. +GitHub Actions builds and publishes: + +- `PerformanceOverlay-.zip` +- `SteamDeckToolsGameBarWidget-.zip` (includes MSIX package + install script) + +## Xbox Game Bar widget (Windows 11) + +The widget appears in Xbox Game Bar (`Win+G`) as **Performance Overlay Control** and lets you: + +- Switch directly to `FPS`, `FPSWithBattery`, `Battery`, `Minimal`, `Detail`, `Full` +- `Cycle`, `Show`, `Hide`, or `Toggle` the overlay + +The widget sends URI commands to `PerformanceOverlay` via: + +- `steamdecktools-performanceoverlay://mode/` +- `steamdecktools-performanceoverlay://cycle` +- `steamdecktools-performanceoverlay://show` +- `steamdecktools-performanceoverlay://hide` +- `steamdecktools-performanceoverlay://toggle` + +Run `PerformanceOverlay` once after extracting it so it can register the URI protocol in `HKCU`. + +## Install widget package (PowerShell) + +After downloading the `SteamDeckToolsGameBarWidget-.zip` artifact: + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/install_gamebar_widget.ps1 -PackagePath "C:\path\to\SteamDeckToolsGameBarWidget-.zip" +``` + +Use `-ForceReinstall` to remove an existing widget package before reinstalling. + +If Windows blocks unsigned package installation, enable Developer Mode: +`Settings > Privacy & security > For developers > Developer Mode`. ## Install latest GitHub build artifact (PowerShell) @@ -114,4 +150,4 @@ Steam Deck Tools is not affiliated with Valve, Steam, or any of their partners. [Creative Commons Attribution-NonCommercial-ShareAlike (CC-BY-NC-SA)](http://creativecommons.org/licenses/by-nc-sa/4.0/). -Free for personal use. Contact me in other cases (`ayufan@ayufan.eu`). \ No newline at end of file +Free for personal use. Contact me in other cases (`ayufan@ayufan.eu`). diff --git a/SteamDeckTools.sln b/SteamDeckTools.sln index a24df3a..e72f5ba 100644 --- a/SteamDeckTools.sln +++ b/SteamDeckTools.sln @@ -9,6 +9,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommonHelpers", "CommonHelp EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExternalHelpers", "ExternalHelpers\ExternalHelpers.csproj", "{A3FD29A4-844F-42B1-80C5-0301BD053AC0}" EndProject +Project("{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A}") = "SteamDeckToolsGameBarWidget", "XboxGameBarWidget\SteamDeckToolsGameBarWidget.csproj", "{4E1DE235-5D8B-4ED9-B4AE-2D6B3E5C4E6A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -55,6 +57,18 @@ Global {A3FD29A4-844F-42B1-80C5-0301BD053AC0}.Release|x64.Build.0 = Release|Any CPU {A3FD29A4-844F-42B1-80C5-0301BD053AC0}.Release|x86.ActiveCfg = Release|Any CPU {A3FD29A4-844F-42B1-80C5-0301BD053AC0}.Release|x86.Build.0 = Release|Any CPU + {4E1DE235-5D8B-4ED9-B4AE-2D6B3E5C4E6A}.Debug|Any CPU.ActiveCfg = Debug|x64 + {4E1DE235-5D8B-4ED9-B4AE-2D6B3E5C4E6A}.Debug|Any CPU.Build.0 = Debug|x64 + {4E1DE235-5D8B-4ED9-B4AE-2D6B3E5C4E6A}.Debug|x64.ActiveCfg = Debug|x64 + {4E1DE235-5D8B-4ED9-B4AE-2D6B3E5C4E6A}.Debug|x64.Build.0 = Debug|x64 + {4E1DE235-5D8B-4ED9-B4AE-2D6B3E5C4E6A}.Debug|x86.ActiveCfg = Debug|x86 + {4E1DE235-5D8B-4ED9-B4AE-2D6B3E5C4E6A}.Debug|x86.Build.0 = Debug|x86 + {4E1DE235-5D8B-4ED9-B4AE-2D6B3E5C4E6A}.Release|Any CPU.ActiveCfg = Release|x64 + {4E1DE235-5D8B-4ED9-B4AE-2D6B3E5C4E6A}.Release|Any CPU.Build.0 = Release|x64 + {4E1DE235-5D8B-4ED9-B4AE-2D6B3E5C4E6A}.Release|x64.ActiveCfg = Release|x64 + {4E1DE235-5D8B-4ED9-B4AE-2D6B3E5C4E6A}.Release|x64.Build.0 = Release|x64 + {4E1DE235-5D8B-4ED9-B4AE-2D6B3E5C4E6A}.Release|x86.ActiveCfg = Release|x86 + {4E1DE235-5D8B-4ED9-B4AE-2D6B3E5C4E6A}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/XboxGameBarWidget/App.xaml b/XboxGameBarWidget/App.xaml new file mode 100644 index 0000000..c6b65fe --- /dev/null +++ b/XboxGameBarWidget/App.xaml @@ -0,0 +1,5 @@ + diff --git a/XboxGameBarWidget/App.xaml.cs b/XboxGameBarWidget/App.xaml.cs new file mode 100644 index 0000000..f3f6497 --- /dev/null +++ b/XboxGameBarWidget/App.xaml.cs @@ -0,0 +1,93 @@ +using Microsoft.Gaming.XboxGameBar; +using System; +using Windows.ApplicationModel; +using Windows.ApplicationModel.Activation; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Navigation; + +namespace SteamDeckToolsGameBarWidget +{ + sealed partial class App : Application + { + private XboxGameBarWidget widget = null; + + public App() + { + InitializeComponent(); + Suspending += OnSuspending; + } + + protected override void OnActivated(IActivatedEventArgs args) + { + XboxGameBarWidgetActivatedEventArgs widgetArgs = null; + + if (args.Kind == ActivationKind.Protocol) + { + var protocolArgs = args as IProtocolActivatedEventArgs; + if (protocolArgs != null && protocolArgs.Uri.Scheme.Equals("ms-gamebarwidget", StringComparison.OrdinalIgnoreCase)) + { + widgetArgs = args as XboxGameBarWidgetActivatedEventArgs; + } + } + + if (widgetArgs == null) + return; + + if (widgetArgs.IsLaunchActivation) + { + var rootFrame = new Frame(); + rootFrame.NavigationFailed += OnNavigationFailed; + Window.Current.Content = rootFrame; + + widget = new XboxGameBarWidget( + widgetArgs, + Window.Current.CoreWindow, + rootFrame + ); + + rootFrame.Navigate(typeof(WidgetPage)); + Window.Current.Closed += WidgetWindow_Closed; + Window.Current.Activate(); + } + } + + protected override void OnLaunched(LaunchActivatedEventArgs e) + { + var rootFrame = Window.Current.Content as Frame; + + if (rootFrame == null) + { + rootFrame = new Frame(); + rootFrame.NavigationFailed += OnNavigationFailed; + Window.Current.Content = rootFrame; + } + + if (!e.PrelaunchActivated) + { + if (rootFrame.Content == null) + rootFrame.Navigate(typeof(MainPage), e.Arguments); + + Window.Current.Activate(); + } + } + + private void WidgetWindow_Closed(object sender, Windows.UI.Core.CoreWindowEventArgs e) + { + widget = null; + Window.Current.Closed -= WidgetWindow_Closed; + } + + private void OnNavigationFailed(object sender, NavigationFailedEventArgs e) + { + throw new Exception("Failed to load page " + e.SourcePageType.FullName); + } + + private void OnSuspending(object sender, SuspendingEventArgs e) + { + var deferral = e.SuspendingOperation.GetDeferral(); + widget = null; + deferral.Complete(); + } + } +} diff --git a/XboxGameBarWidget/Assets/LargeTile.scale-100.png b/XboxGameBarWidget/Assets/LargeTile.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..78b17c00b8be3c274c65d2e1f03b2d4469577924 GIT binary patch literal 19919 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 Az5oCK literal 0 HcmV?d00001 diff --git a/XboxGameBarWidget/Assets/SmallTile.scale-100.png b/XboxGameBarWidget/Assets/SmallTile.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..d9052da5626469ac63ec46448f12000691071d61 GIT binary patch literal 3373 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 D2*7)n literal 0 HcmV?d00001 diff --git a/XboxGameBarWidget/Assets/SplashScreen.scale-100.png b/XboxGameBarWidget/Assets/SplashScreen.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..6d2a4a11ac237db8986cd594731dda6ba4723846 GIT binary patch literal 19236 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 literal 0 HcmV?d00001 diff --git a/XboxGameBarWidget/Assets/Square44x44Logo.scale-100.png b/XboxGameBarWidget/Assets/Square44x44Logo.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..aaa17c72ebeaff8572db8ab2aaa1f430e9e0d439 GIT binary patch literal 1886 zcmV-k2ch_hP)`d(S=RJfCyk=bZCAN5OYY%C`;RR9AsVTUUWc zTUQL+(D0UA6DXMl$(Uo?m;u-mEZZvL|1pV$0I5@w*dfJc@A&+|mS4VmyZNmEuexzx ziK3RRu!GhEGGmnrD}-&Eu;{U2i8>M(LCcUNd68iy&=)K|y1M$)U5Qj^$Bq+?fo}}B zsj78_BDvP7O#fcmiX%-h{4=*CxR|HX#k?COl{KxdY~8T=X#Mt41-`FhudhrS_pDnk zT$Hk6h#3I^lAmm31{Z_Eyw|F(;y*uL-FAl=OD@~eJ}WZfz{{%N99sbY9=GhP%YecG z?8TD6-Ge`x;=ebcS(8^*9+1)UMCl*jT${<@^U~2i}$6;CAIYR z^`?rJTl1Oeynr=XdEP4**Y=MfEEn%9W(J`vr8QA+_g|>!p5fXI3%u&450>dJ|AMFy z98uT-321ULg1)<{>frJ%M}F{ZuKGEFADi}WF|(9Se1Y*rGnz_SQ8FQKT08Bt-J1?i z?;EOKPGDxa9`!0Er7?1ad>5Ey*|0O)FeFBOu>9JIMd&K^N78|n^mC(Q;Pnl*+|$#t zJS}E7w^1`~BM~!2EpMR*-eOIZCnB`xGwJ91j)3XaHY$n-X=FLU$X+~b(yTGee_{e|TY3#ju64r* z?nc)~8xRS#i)x;t3e1?f9(8jUp!aMFZ|^#b{m*rYw%$TH3$zVIa+A$iqhnyw3>(?w zl>R^(Q|b$`^f!}mU9~RC!tF2O-)}93B)g&OI>iq_TURj9p+h4$#iY2&v&2^}| z%a6aVJ%uk@!zd_m4eFcQ%mh){H6$<@Ea!pDAlP6U_4N9e|8WXbuPn+eBZl*B8w9MT z`Ea7sKq3WHSNISox9t9O1AOK4!4w_kRXW!Evl`8hpFrztJ@8!u&237s%N+yLD18G_ z*MJgH6LanxhX;Q@t+r`X&Nw7a!8zNvEe_vOGhUo=}^miZ`ItH)5R@7I$ z46Alb#dA-|_~7Mku^_*)OE$?M zcwe?Ps5qx`xkQA=vlq+jld<~qfip?m|LY1AjaA7v zHI&t?!|DA?gwJv};4{l%t#lG&Yo7sg6^QnIv|Ie`=cn-To_qfr=CsRlc#uJt zn~CRKdjhZiu7mu$6NP0O0gVw=qP?dO?v5iBH^mkxK#_I)LX<)wWk%am9{EGZ!2B$4 zs%+WmV%o;x;tAEm#KSj&XfTdQcTAKsSrP-{{|zsjfHkDe_|Bo?h@8M&rkvguH+r8` zn5WdRlEa$h{>|fr+(FI|AT+zNbZ@`~b8F6ex&GXCxS?-l)xoE|thhNJ;46{J3MeK% z|Fb_FncbVK-mnM9R>}aHs#@k!MsUwar$}7<(4oG0*754rBeQo5S3kd#E{>nXwY~~U z7;AVAHd4?Wmik1(2pvks!avTZOq5u( zuAcVEBa+S5Yl?sTz*W`oNvgQ2qQ}ek+OC)x`qh>%>b5zt?-+PMn-AZzeZ>t2c00#tfl?5~4pD^kPTXZ4%ylS?D)4|V0K9kM8Fl^t-N1j-x(Ynn`pyCW Y7iwbak_yh99smFU07*qoM6N<$g0PgcQUCw| literal 0 HcmV?d00001 diff --git a/XboxGameBarWidget/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/XboxGameBarWidget/Assets/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 0000000000000000000000000000000000000000..fa054c5f966a098edc6bc4f12fe1a3f23b5b78a7 GIT binary patch literal 1311 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 z + + + + + diff --git a/XboxGameBarWidget/MainPage.xaml.cs b/XboxGameBarWidget/MainPage.xaml.cs new file mode 100644 index 0000000..dc3dda2 --- /dev/null +++ b/XboxGameBarWidget/MainPage.xaml.cs @@ -0,0 +1,12 @@ +using Windows.UI.Xaml.Controls; + +namespace SteamDeckToolsGameBarWidget +{ + public sealed partial class MainPage : Page + { + public MainPage() + { + InitializeComponent(); + } + } +} diff --git a/XboxGameBarWidget/Package.appxmanifest b/XboxGameBarWidget/Package.appxmanifest new file mode 100644 index 0000000..c17b301 --- /dev/null +++ b/XboxGameBarWidget/Package.appxmanifest @@ -0,0 +1,112 @@ + + + + + + + + + Steam Deck Tools Game Bar Widget + SteamDeckTools + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + true + true + + + 330 + 420 + 240 + 320 + 500 + 700 + + + true + true + + + + + + + + + + + + + + + Microsoft.Gaming.XboxGameBar.winmd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/XboxGameBarWidget/Properties/AssemblyInfo.cs b/XboxGameBarWidget/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2f23c4b --- /dev/null +++ b/XboxGameBarWidget/Properties/AssemblyInfo.cs @@ -0,0 +1,14 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("SteamDeckToolsGameBarWidget")] +[assembly: AssemblyDescription("Xbox Game Bar widget controls for Steam Deck Tools PerformanceOverlay.")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SteamDeckToolsGameBarWidget")] +[assembly: AssemblyCopyright("Copyright © 2026")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] diff --git a/XboxGameBarWidget/Properties/Default.rd.xml b/XboxGameBarWidget/Properties/Default.rd.xml new file mode 100644 index 0000000..fa46763 --- /dev/null +++ b/XboxGameBarWidget/Properties/Default.rd.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/XboxGameBarWidget/SteamDeckToolsGameBarWidget.csproj b/XboxGameBarWidget/SteamDeckToolsGameBarWidget.csproj new file mode 100644 index 0000000..c84c060 --- /dev/null +++ b/XboxGameBarWidget/SteamDeckToolsGameBarWidget.csproj @@ -0,0 +1,159 @@ + + + + + Debug + x86 + {4E1DE235-5D8B-4ED9-B4AE-2D6B3E5C4E6A} + AppContainerExe + Properties + SteamDeckToolsGameBarWidget + SteamDeckToolsGameBarWidget + en-US + UAP + 10.0.22621.0 + 10.0.18362.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + true + False + False + False + False + True + Never + x64|arm64 + 0 + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + true + bin\ARM64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM64 + false + prompt + true + + + bin\ARM64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM64 + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + PackageReference + + + + App.xaml + + + MainPage.xaml + + + WidgetPage.xaml + + + + + + Designer + + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + + + 7.2.240903001 + + + 6.2.9 + + + + win32 + $(Platform) + + + 14.0 + + + diff --git a/XboxGameBarWidget/WidgetPage.xaml b/XboxGameBarWidget/WidgetPage.xaml new file mode 100644 index 0000000..673e668 --- /dev/null +++ b/XboxGameBarWidget/WidgetPage.xaml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/XboxGameBarWidget/WidgetPage.xaml.cs b/XboxGameBarWidget/WidgetPage.xaml.cs new file mode 100644 index 0000000..36f1401 --- /dev/null +++ b/XboxGameBarWidget/WidgetPage.xaml.cs @@ -0,0 +1,42 @@ +using System; +using Windows.System; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; + +namespace SteamDeckToolsGameBarWidget +{ + public sealed partial class WidgetPage : Page + { + public WidgetPage() + { + InitializeComponent(); + } + + private async void CommandButton_Click(object sender, RoutedEventArgs e) + { + var button = sender as Button; + if (button == null || !(button.Tag is string)) + return; + + try + { + var targetUri = (string)button.Tag; + Uri uri; + if (!Uri.TryCreate(targetUri, UriKind.Absolute, out uri)) + { + StatusText.Text = "Invalid command URI."; + return; + } + + bool launched = await Launcher.LaunchUriAsync(uri); + StatusText.Text = launched + ? "Sent command: " + button.Content + : "Unable to launch command URI. Start PerformanceOverlay first."; + } + catch (Exception ex) + { + StatusText.Text = "Failed to send command: " + ex.Message; + } + } + } +} diff --git a/docs/performance-overlay.md b/docs/performance-overlay.md index 94f69bc..eca9755 100644 --- a/docs/performance-overlay.md +++ b/docs/performance-overlay.md @@ -10,6 +10,27 @@ It currently registers two global hotkeys: - **Shift+F11** - enable performance overlay - **Alt+Shift+F11** - cycle to next performance overlay (and enable it) +It also supports command URIs (used by the Xbox Game Bar widget in this fork): + +- `steamdecktools-performanceoverlay://mode/fps` +- `steamdecktools-performanceoverlay://mode/fpswithbattery` +- `steamdecktools-performanceoverlay://mode/battery` +- `steamdecktools-performanceoverlay://mode/minimal` +- `steamdecktools-performanceoverlay://mode/detail` +- `steamdecktools-performanceoverlay://mode/full` +- `steamdecktools-performanceoverlay://cycle` +- `steamdecktools-performanceoverlay://show` +- `steamdecktools-performanceoverlay://hide` +- `steamdecktools-performanceoverlay://toggle` + +Equivalent command-line switches are available: + +- `--mode ` +- `--cycle` +- `--show` +- `--hide` +- `--toggle` + There are 5 modes of presentation: ## 1. FPS diff --git a/scripts/build.ps1 b/scripts/build.ps1 index f71f76e..fc0b16b 100644 --- a/scripts/build.ps1 +++ b/scripts/build.ps1 @@ -30,5 +30,5 @@ if ($lastVer) { } echo "nextVer: $nextVer" -dotnet --list-sdks -or winget install Microsoft.DotNet.SDK.6 +dotnet --list-sdks -or winget install Microsoft.DotNet.SDK.8 dotnet build PerformanceOverlay/PerformanceOverlay.csproj --configuration "$configuration" "/property:Version=$nextVer" --output "$path" diff --git a/scripts/install_gamebar_widget.ps1 b/scripts/install_gamebar_widget.ps1 new file mode 100644 index 0000000..eac2f03 --- /dev/null +++ b/scripts/install_gamebar_widget.ps1 @@ -0,0 +1,66 @@ +param( + [Parameter(Mandatory = $true)] + [string]$PackagePath, + + [switch]$ForceReinstall +) + +$ErrorActionPreference = "Stop" + +if (-not (Test-Path -LiteralPath $PackagePath)) { + throw "PackagePath not found: $PackagePath" +} + +$tempExtractDir = $null + +try { + $packageItem = Get-Item -LiteralPath $PackagePath + if (-not $packageItem.PSIsContainer -and $packageItem.Extension -eq ".zip") { + $tempExtractDir = Join-Path ([System.IO.Path]::GetTempPath()) ("sdt-widget-install-" + [System.Guid]::NewGuid().ToString("N")) + New-Item -ItemType Directory -Path $tempExtractDir -Force | Out-Null + Expand-Archive -Path $packageItem.FullName -DestinationPath $tempExtractDir -Force + $packageItem = Get-Item -LiteralPath $tempExtractDir + } + + if ($packageItem.PSIsContainer) { + $packageItem = Get-ChildItem -LiteralPath $packageItem.FullName -Recurse -File | + Where-Object { $_.Extension -in ".msix", ".appx", ".msixbundle", ".appxbundle" } | + Sort-Object LastWriteTime -Descending | + Select-Object -First 1 + } + + if (-not $packageItem) { + throw "No .msix/.appx package was found under '$PackagePath'." + } + + $identityName = "SteamDeckToolsGameBarWidget" + $installedPackage = Get-AppxPackage -Name $identityName -ErrorAction SilentlyContinue + + if ($ForceReinstall -and $installedPackage) { + Write-Host "Removing existing package: $($installedPackage.PackageFullName)" + Remove-AppxPackage -Package $installedPackage.PackageFullName + } + + Write-Host "Installing package: $($packageItem.FullName)" + + try { + Add-AppxPackage ` + -Path $packageItem.FullName ` + -ForceUpdateFromAnyVersion ` + -ForceApplicationShutdown ` + -AllowUnsigned + } + catch { + Write-Host "" + Write-Host "Install failed. If this is an unsigned package, enable Developer Mode in Windows:" + Write-Host "Settings > Privacy & security > For developers > Developer Mode" + throw + } + + Write-Host "Installed. Open Xbox Game Bar (Win+G), click Widget Menu, then add 'Performance Overlay Control'." +} +finally { + if ($tempExtractDir -and (Test-Path -LiteralPath $tempExtractDir)) { + Remove-Item -LiteralPath $tempExtractDir -Recurse -Force + } +} diff --git a/scripts/run_loop.bat b/scripts/run_loop.bat index d041ff5..4e5590d 100644 --- a/scripts/run_loop.bat +++ b/scripts/run_loop.bat @@ -6,10 +6,10 @@ cd "%~dp0\.." :retry taskkill /F /IM "%2.exe" -del %2\bin\Debug\net6.0-windows\%2.exe +del %2\bin\Debug\net8.0-windows\%2.exe dotnet build %2\%2.csproj -%2\bin\Debug\net6.0-windows\%2.exe +%2\bin\Debug\net8.0-windows\%2.exe timeout /t 3 goto retry