Browse Source

Better steam overlay solution

Krzysztof Krysiński 2 years ago
parent
commit
0ee038ce14

+ 4 - 8
src/PixiEditor/App.xaml.cs

@@ -1,8 +1,10 @@
 using System.IO;
 using System.Text.RegularExpressions;
 using System.Windows;
+using System.Windows.Controls;
 using System.Windows.Interop;
 using System.Windows.Media;
+using System.Windows.Threading;
 using PixiEditor.Extensions.Common.Localization;
 using PixiEditor.Models.AppExtensions;
 using PixiEditor.Helpers.UI;
@@ -13,6 +15,7 @@ using PixiEditor.Models.Enums;
 using PixiEditor.Platform;
 using PixiEditor.Views;
 using PixiEditor.Views.Dialogs;
+using Timer = System.Timers.Timer;
 
 namespace PixiEditor;
 
@@ -60,15 +63,8 @@ internal partial class App : Application
         extensionLoader.LoadExtensions();
 
         MainWindow = new MainWindow(extensionLoader);
-        MainWindow.Show();
 
-#if STEAM
-        RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
-        MainWindow.Loaded += (sender, args) => // Ugly hack to fix Steam overlay doing weird stuff with WPF
-        {
-            RenderOptions.ProcessRenderMode = RenderMode.Default;
-        };
-#endif
+        MainWindow.Show();
     }
 
     private void InitPlatform()

+ 2 - 2
src/PixiEditor/Helpers/ClipboardHelper.cs

@@ -46,12 +46,12 @@ internal static class ClipboardHelper
     public static VecI GetVecI(this DataObject data, string format)
     {
         if (!data.GetDataPresent(format))
-            return default;
+            return VecI.NegativeOne;
 
         byte[] bytes = (byte[])data.GetData(format);
 
         if (bytes is { Length: < 8 })
-            return default;
+            return VecI.NegativeOne;
 
         return VecI.FromBytes(bytes);
     }

+ 17 - 0
src/PixiEditor/Views/MainWindow.xaml

@@ -101,6 +101,23 @@
         </b:EventTrigger>
     </b:Interaction.Triggers>
     <Grid>
+        <Border HorizontalAlignment="Right" VerticalAlignment="Bottom" Name="steamRefresher"
+                Visibility="Collapsed"
+                Background="Transparent"
+                BorderThickness="0"
+                Focusable="False"
+                Width="{Binding ElementName=mainWindow, Path=Width}"
+                Height="{Binding ElementName=mainWindow, Path=Height}" Panel.ZIndex="-1000">
+            <Border.Triggers>
+                <EventTrigger RoutedEvent="Loaded">
+                    <BeginStoryboard>
+                        <Storyboard>
+                            <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:10"/>
+                        </Storyboard>
+                    </BeginStoryboard>
+                </EventTrigger>
+            </Border.Triggers>
+        </Border>
         <Grid
             Name="mainGrid"
             Margin="5"

+ 21 - 0
src/PixiEditor/Views/MainWindow.xaml.cs

@@ -1,10 +1,12 @@
 using System.ComponentModel;
+using System.Diagnostics;
 using System.Reflection;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Input;
 using System.Windows.Interop;
 using System.Windows.Media.Imaging;
+using System.Windows.Threading;
 using AvalonDock.Layout;
 using Microsoft.Extensions.DependencyInjection;
 using PixiEditor.DrawingApi.Core.Bridge;
@@ -21,6 +23,7 @@ using PixiEditor.Platform;
 using PixiEditor.ViewModels.SubViewModels.Document;
 using PixiEditor.ViewModels.SubViewModels.Tools;
 using PixiEditor.ViewModels.SubViewModels.Tools.Tools;
+using Timer = System.Timers.Timer;
 
 namespace PixiEditor.Views;
 
@@ -63,6 +66,8 @@ internal partial class MainWindow : Window
 
         InitializeComponent();
 
+        StartSteamRefresher();
+
         OnDataContextInitialized?.Invoke();
         pixiEditorLogo = BitmapFactory.FromResource(@"/Images/PixiEditorLogo.png");
 
@@ -81,6 +86,22 @@ internal partial class MainWindow : Window
         DataContext.DocumentManagerSubViewModel.ActiveDocumentChanged += DocumentChanged;
     }
 
+    [Conditional("STEAM")]
+    private void StartSteamRefresher()
+    {
+        steamRefresher.Visibility = Visibility.Visible;
+        Timer timer = new(10000);
+        timer.Elapsed += (sender, args) =>
+        {
+            Application.Current.Dispatcher.Invoke(() =>
+            {
+                steamRefresher.Visibility = Visibility.Collapsed;
+                timer.Stop();
+            });
+        };
+        timer.Start();
+    }
+
     private void SetupTranslator()
     {
         Translator.ExternalProperties.Add(new ExternalProperty<LayoutContent>(TranslateLayoutContent));