From dc2f6a2dadade0650fc81ef46480fee63362ac0e Mon Sep 17 00:00:00 2001 From: ww-rm Date: Sun, 2 Nov 2025 14:22:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=96=84=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MainWindow/MainWindowViewModel.cs | 15 +++++ .../MainWindow/SFMLRendererViewModel.cs | 62 ++++++++----------- SpineViewer/Views/MainWindow.xaml | 1 + 3 files changed, 41 insertions(+), 37 deletions(-) diff --git a/SpineViewer/ViewModels/MainWindow/MainWindowViewModel.cs b/SpineViewer/ViewModels/MainWindow/MainWindowViewModel.cs index dde299c..6fbd605 100644 --- a/SpineViewer/ViewModels/MainWindow/MainWindowViewModel.cs +++ b/SpineViewer/ViewModels/MainWindow/MainWindowViewModel.cs @@ -31,6 +31,21 @@ namespace SpineViewer.ViewModels.MainWindow public string Title => $"SpineViewer - v{App.Version}"; + public Visibility Visibility + { + get => _visibility; + set + { + if (SetProperty(ref _visibility, value)) + { + OnPropertyChanged(nameof(IsVisible)); + } + } + } + private Visibility _visibility = Visibility.Visible; + + public bool IsVisible => _visibility == Visibility.Visible; + /// /// 指示是否通过托盘图标进行退出 /// diff --git a/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs b/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs index a3e1f98..ae8de44 100644 --- a/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs +++ b/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs @@ -484,21 +484,17 @@ namespace SpineViewer.ViewModels.MainWindow _forwardDelta = 0; } - using var v = _renderer.GetView(); - _renderer.Clear(_backgroundColor); + using var view = _renderer.GetView(); + _wallpaperRenderer.SetView(view); - if (_wallpaperView) - { - _wallpaperRenderer.SetView(v); - _wallpaperRenderer.Clear(_backgroundColor); - } + if (_vmMain.IsVisible) _renderer.Clear(_backgroundColor); + if (_wallpaperView) _wallpaperRenderer.Clear(_backgroundColor); // 渲染背景 lock (_bgLock) { if (_backgroundImageSprite is not null) { - using var view = _renderer.GetView(); var bg = _backgroundImageSprite; var viewSize = view.Size; var bgSize = bg.Texture.Size; @@ -521,16 +517,13 @@ namespace SpineViewer.ViewModels.MainWindow bg.Scale = new(signX * scaleX, signY * scaleY); bg.Position = view.Center; bg.Rotation = view.Rotation; - _renderer.Draw(bg); - if (_wallpaperView) - { - _wallpaperRenderer.Draw(bg); - } + if (_vmMain.IsVisible) _renderer.Draw(bg); + if (_wallpaperView) _wallpaperRenderer.Draw(bg); } } - if (_showAxis) + if (_showAxis && _vmMain.IsVisible) { // 画一个很长的坐标轴, 用 1e9 比较合适 _axisVertices[0] = new(new(-1e9f, 0), _axisColor); @@ -551,35 +544,30 @@ namespace SpineViewer.ViewModels.MainWindow sp.Update(0); // 避免物理效果出现问题 sp.Update(delta * _speed); - // 为选中对象绘制一个半透明背景 - if (sp.IsSelected) + if (_vmMain.IsVisible) { - var rc = sp.GetCurrentBounds().ToFloatRect(); - _selectedBackgroundVertices[0] = new(new(rc.Left, rc.Top), _selectedBackgroundColor); - _selectedBackgroundVertices[1] = new(new(rc.Left + rc.Width, rc.Top), _selectedBackgroundColor); - _selectedBackgroundVertices[2] = new(new(rc.Left + rc.Width, rc.Top + rc.Height), _selectedBackgroundColor); - _selectedBackgroundVertices[3] = new(new(rc.Left, rc.Top + rc.Height), _selectedBackgroundColor); - _renderer.Draw(_selectedBackgroundVertices); - } + // 为选中对象绘制一个半透明背景 + if (sp.IsSelected) + { + var rc = sp.GetCurrentBounds().ToFloatRect(); + _selectedBackgroundVertices[0] = new(new(rc.Left, rc.Top), _selectedBackgroundColor); + _selectedBackgroundVertices[1] = new(new(rc.Left + rc.Width, rc.Top), _selectedBackgroundColor); + _selectedBackgroundVertices[2] = new(new(rc.Left + rc.Width, rc.Top + rc.Height), _selectedBackgroundColor); + _selectedBackgroundVertices[3] = new(new(rc.Left, rc.Top + rc.Height), _selectedBackgroundColor); + _renderer.Draw(_selectedBackgroundVertices); + } - // 仅在预览画面临时启用调试模式 - sp.EnableDebug = true; - _renderer.Draw(sp); - sp.EnableDebug = false; - - if (_wallpaperView) - { - _wallpaperRenderer.Draw(sp); + // 仅在预览画面临时启用调试模式 + sp.EnableDebug = true; + _renderer.Draw(sp); + sp.EnableDebug = false; } + if (_wallpaperView) _wallpaperRenderer.Draw(sp); } } - _renderer.Display(); - - if (_wallpaperView) - { - _wallpaperRenderer.Display(); - } + if (_vmMain.IsVisible) _renderer.Display(); + if (_wallpaperView) _wallpaperRenderer.Display(); } } catch (Exception ex) diff --git a/SpineViewer/Views/MainWindow.xaml b/SpineViewer/Views/MainWindow.xaml index b38eea8..2a99add 100644 --- a/SpineViewer/Views/MainWindow.xaml +++ b/SpineViewer/Views/MainWindow.xaml @@ -15,6 +15,7 @@ Height="720" Background="{DynamicResource RegionBrush}" WindowStartupLocation="CenterScreen" + Visibility="{Binding Visibility, Mode=OneWayToSource}" PreviewKeyDown="MainWindow_PreviewKeyDown" LocationChanged="MainWindow_LocationChanged" SizeChanged="MainWindow_SizeChanged">