浏览代码

Made overlay working

Krzysztof Krysiński 2 年之前
父节点
当前提交
3bd2840663

+ 32 - 0
src/PixiEditor.Platform.Steam/OverlayHandler.cs

@@ -0,0 +1,32 @@
+using Steamworks;
+
+namespace PixiEditor.Platform.Steam;
+
+public class SteamOverlayHandler
+{
+    public event Action<bool> ActivateRefreshingElement;
+    protected Callback<GameOverlayActivated_t> overlayActivated;
+
+    public SteamOverlayHandler()
+    {
+        overlayActivated = Callback<GameOverlayActivated_t>.Create(OnOverlayActivated);
+        InitStartingRefresh();
+    }
+
+    private void InitStartingRefresh()
+    {
+        System.Timers.Timer timer = new(10000);
+        timer.Elapsed += (sender, args) =>
+        {
+            if (SteamUtils.IsOverlayEnabled()) return;
+
+            ActivateRefreshingElement?.Invoke(false);
+        };
+        timer.Start();
+    }
+
+    private void OnOverlayActivated(GameOverlayActivated_t param)
+    {
+        ActivateRefreshingElement?.Invoke(param.m_bActive == 1);
+    }
+}

+ 1 - 1
src/PixiEditor/Views/MainWindow.xaml

@@ -112,7 +112,7 @@
                 <EventTrigger RoutedEvent="Loaded">
                     <BeginStoryboard>
                         <Storyboard>
-                            <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:10"/>
+                            <DoubleAnimation Storyboard.TargetProperty="Opacity" RepeatBehavior="Forever" From="0" To="1" Duration="0:0:10"/>
                         </Storyboard>
                     </BeginStoryboard>
                 </EventTrigger>

+ 8 - 13
src/PixiEditor/Views/MainWindow.xaml.cs

@@ -1,12 +1,10 @@
 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,9 +19,7 @@ using PixiEditor.Models.Enums;
 using PixiEditor.Models.IO;
 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;
 
@@ -84,22 +80,21 @@ internal partial class MainWindow : Window
         });
 
         DataContext.DocumentManagerSubViewModel.ActiveDocumentChanged += DocumentChanged;
+
+        StartSteamRefresher();
     }
 
-    [Conditional("STEAM")]
     private void StartSteamRefresher()
     {
+#if STEAM
         steamRefresher.Visibility = Visibility.Visible;
-        Timer timer = new(10000);
-        timer.Elapsed += (sender, args) =>
+
+        PixiEditor.Platform.Steam.SteamOverlayHandler handler = new PixiEditor.Platform.Steam.SteamOverlayHandler();
+        handler.ActivateRefreshingElement += (bool activate) =>
         {
-            Application.Current.Dispatcher.Invoke(() =>
-            {
-                steamRefresher.Visibility = Visibility.Collapsed;
-                timer.Stop();
-            });
+            steamRefresher.Visibility = activate ? Visibility.Visible : Visibility.Collapsed;
         };
-        timer.Start();
+#endif
     }
 
     private void SetupTranslator()