From 874404e3d3995a44144bdc5bd4c98b9226aaab95 Mon Sep 17 00:00:00 2001 From: ww-rm Date: Sat, 8 Nov 2025 19:44:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=80=E5=A4=A7=E5=B8=A7?= =?UTF-8?q?=E7=8E=87=E7=9A=84=E9=A6=96=E9=80=89=E9=A1=B9=EF=BC=8C=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E7=94=A8=E6=88=B7=E7=8A=B6=E6=80=81=E4=B8=AD=E6=9C=80?= =?UTF-8?q?=E5=A4=A7=E5=B8=A7=E7=8E=87=E7=9A=84=E8=AE=B0=E5=BF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpineViewer/Models/PreferenceModel.cs | 28 +++++--- SpineViewer/Models/UserStateModel.cs | 1 - SpineViewer/Resources/Strings/en.xaml | 2 + SpineViewer/Resources/Strings/ja.xaml | 2 + SpineViewer/Resources/Strings/zh.xaml | 2 + .../MainWindow/PreferenceViewModel.cs | 64 +++++++++++------ .../MainWindow/SFMLRendererViewModel.cs | 8 ++- SpineViewer/Views/MainWindow.xaml | 10 --- SpineViewer/Views/MainWindow.xaml.cs | 3 - SpineViewer/Views/PreferenceDialog.xaml | 68 ++++++++++++------- 10 files changed, 120 insertions(+), 68 deletions(-) diff --git a/SpineViewer/Models/PreferenceModel.cs b/SpineViewer/Models/PreferenceModel.cs index 1575935..7385520 100644 --- a/SpineViewer/Models/PreferenceModel.cs +++ b/SpineViewer/Models/PreferenceModel.cs @@ -73,6 +73,22 @@ namespace SpineViewer.Models #endregion + #region 预览画面首选项 + + [ObservableProperty] + private bool _renderSelectedOnly; + + [ObservableProperty] + private HitTestLevel _hitTestLevel; + + [ObservableProperty] + private bool _logHitSlots; + + [ObservableProperty] + private uint _maxFps = 30; + + #endregion + #region 程序选项 public RelayCommand Cmd_SelectAutoRunWorkspaceConfigPath => _cmd_SelectAutoRunWorkspaceConfigPath ??= new(() => @@ -89,18 +105,12 @@ namespace SpineViewer.Models [ObservableProperty] private AppSkin _appSkin; - [ObservableProperty] - private bool _renderSelectedOnly; - - [ObservableProperty] - private HitTestLevel _hitTestLevel; - - [ObservableProperty] - private bool _logHitSlots; - [ObservableProperty] private bool _wallpaperView; + [ObservableProperty] + private uint _wallpaperMaxFps = 30; + [ObservableProperty] private bool _closeToTray; diff --git a/SpineViewer/Models/UserStateModel.cs b/SpineViewer/Models/UserStateModel.cs index 8a0d73f..6ed5643 100644 --- a/SpineViewer/Models/UserStateModel.cs +++ b/SpineViewer/Models/UserStateModel.cs @@ -43,7 +43,6 @@ namespace SpineViewer.Models public uint ResolutionX { get; set; } = 1500; public uint ResolutionY { get; set; } = 1000; - public uint MaxFps { get; set; } = 30; public float Speed { get; set; } = 1f; public bool ShowAxis { get; set; } = true; public Color BackgroundColor { get; set; } = Color.FromRgb(105, 105, 105); diff --git a/SpineViewer/Resources/Strings/en.xaml b/SpineViewer/Resources/Strings/en.xaml index 5f979db..e22e54a 100644 --- a/SpineViewer/Resources/Strings/en.xaml +++ b/SpineViewer/Resources/Strings/en.xaml @@ -123,6 +123,8 @@ Maximum frame rate of the preview. Set to 0 for no limit. Playback Speed Wallpaper View + Max FPS of Wallpaper View + Maximum frame rate of the wallpaper view. Set to 0 for no limit. Render Selected Only Hit Test Accuracy Level Output Hit Test Slot Names diff --git a/SpineViewer/Resources/Strings/ja.xaml b/SpineViewer/Resources/Strings/ja.xaml index 9d607b7..0aa2bdb 100644 --- a/SpineViewer/Resources/Strings/ja.xaml +++ b/SpineViewer/Resources/Strings/ja.xaml @@ -123,6 +123,8 @@ プレビュー画面の最大フレームレート。0 に設定すると制限なし。 再生速度 壁紙表示 + 壁紙ビューの最大FPS + 壁紙ビューの最大フレームレート。0に設定すると制限がなし。 選択のみレンダリング ヒットテスト精度レベル ヒットテスト結果のスロット名を出力 diff --git a/SpineViewer/Resources/Strings/zh.xaml b/SpineViewer/Resources/Strings/zh.xaml index 12959e2..d17b08f 100644 --- a/SpineViewer/Resources/Strings/zh.xaml +++ b/SpineViewer/Resources/Strings/zh.xaml @@ -123,6 +123,8 @@ 预览画面的最大帧率,设置为 0 时则无帧率限制 播放速度 桌面投影 + 桌面投影最大帧率 + 桌面投影的最大帧率,设置为 0 时则无帧率限制 仅渲染选中 命中检测准确度等级 输出命中检测结果的插槽名称 diff --git a/SpineViewer/ViewModels/MainWindow/PreferenceViewModel.cs b/SpineViewer/ViewModels/MainWindow/PreferenceViewModel.cs index a7efe9c..989e186 100644 --- a/SpineViewer/ViewModels/MainWindow/PreferenceViewModel.cs +++ b/SpineViewer/ViewModels/MainWindow/PreferenceViewModel.cs @@ -107,12 +107,15 @@ namespace SpineViewer.ViewModels.MainWindow DebugPoints = DebugPoints, DebugClippings = DebugClippings, - AppLanguage = AppLanguage, - AppSkin = AppSkin, RenderSelectedOnly = RenderSelectedOnly, HitTestLevel = HitTestLevel, LogHitSlots = LogHitSlots, + MaxFps = MaxFps, + + AppLanguage = AppLanguage, + AppSkin = AppSkin, WallpaperView = WallpaperView, + WallpaperMaxFps = WallpaperMaxFps, CloseToTray = CloseToTray, AutoRun = AutoRun, AutoRunWorkspaceConfigPath = AutoRunWorkspaceConfigPath, @@ -139,12 +142,15 @@ namespace SpineViewer.ViewModels.MainWindow DebugPoints = value.DebugPoints; DebugClippings = value.DebugClippings; - AppLanguage = value.AppLanguage; - AppSkin = value.AppSkin; RenderSelectedOnly = value.RenderSelectedOnly; HitTestLevel = value.HitTestLevel; LogHitSlots = value.LogHitSlots; + MaxFps = value.MaxFps; + + AppLanguage = value.AppLanguage; + AppSkin = value.AppSkin; WallpaperView = value.WallpaperView; + WallpaperMaxFps = value.WallpaperMaxFps; CloseToTray = value.CloseToTray; AutoRun = value.AutoRun; AutoRunWorkspaceConfigPath = value.AutoRunWorkspaceConfigPath; @@ -250,26 +256,10 @@ namespace SpineViewer.ViewModels.MainWindow #endregion - #region 程序选项 - - public static ImmutableArray AppLanguageOptions { get; } = Enum.GetValues().ToImmutableArray(); - - public static ImmutableArray AppSkinOptions { get; } = Enum.GetValues().ToImmutableArray(); + #region 预览画面首选项 public static ImmutableArray HitTestLevelOptions { get; } = Enum.GetValues().ToImmutableArray(); - public AppLanguage AppLanguage - { - get => ((App)App.Current).Language; - set => SetProperty(((App)App.Current).Language, value, v => ((App)App.Current).Language = v); - } - - public AppSkin AppSkin - { - get => ((App)App.Current).Skin; - set => SetProperty(((App)App.Current).Skin, value, v => ((App)App.Current).Skin = v); - } - public bool RenderSelectedOnly { get => _vmMain.SFMLRendererViewModel.RenderSelectedOnly; @@ -288,12 +278,44 @@ namespace SpineViewer.ViewModels.MainWindow set => SetProperty(SpineExtension.LogHitSlots, value, v => SpineExtension.LogHitSlots = v); } + public uint MaxFps + { + get => _vmMain.SFMLRendererViewModel.MaxFps; + set => SetProperty(_vmMain.SFMLRendererViewModel.MaxFps, value, v => _vmMain.SFMLRendererViewModel.MaxFps = v); + } + + #endregion + + #region 程序选项 + + public static ImmutableArray AppLanguageOptions { get; } = Enum.GetValues().ToImmutableArray(); + + public static ImmutableArray AppSkinOptions { get; } = Enum.GetValues().ToImmutableArray(); + + public AppLanguage AppLanguage + { + get => ((App)App.Current).Language; + set => SetProperty(((App)App.Current).Language, value, v => ((App)App.Current).Language = v); + } + + public AppSkin AppSkin + { + get => ((App)App.Current).Skin; + set => SetProperty(((App)App.Current).Skin, value, v => ((App)App.Current).Skin = v); + } + public bool WallpaperView { get => _vmMain.SFMLRendererViewModel.WallpaperView; set => SetProperty(_vmMain.SFMLRendererViewModel.WallpaperView, value, v => _vmMain.SFMLRendererViewModel.WallpaperView = v); } + public uint WallpaperMaxFps + { + get => _vmMain.SFMLRendererViewModel.WallpaperMaxFps; + set => SetProperty(_vmMain.SFMLRendererViewModel.WallpaperMaxFps, value, v => _vmMain.SFMLRendererViewModel.WallpaperMaxFps = v); + } + public bool CloseToTray { get => _vmMain.CloseToTray; diff --git a/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs b/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs index cd0f664..ea396b1 100644 --- a/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs +++ b/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs @@ -160,7 +160,13 @@ namespace SpineViewer.ViewModels.MainWindow public uint MaxFps { get => _renderer.MaxFps; - set => SetProperty(_renderer.MaxFps, value, v => _renderer.MaxFps = _wallpaperRenderer.MaxFps = value); + set => SetProperty(_renderer.MaxFps, value, v => _renderer.MaxFps = value); + } + + public uint WallpaperMaxFps + { + get => _wallpaperRenderer.MaxFps; + set => SetProperty(_wallpaperRenderer.MaxFps, value, v => _wallpaperRenderer.MaxFps = value); } public float RealTimeFps => _realTimeFps; diff --git a/SpineViewer/Views/MainWindow.xaml b/SpineViewer/Views/MainWindow.xaml index 7e46fa2..8f277bf 100644 --- a/SpineViewer/Views/MainWindow.xaml +++ b/SpineViewer/Views/MainWindow.xaml @@ -793,16 +793,6 @@ - - - - - - - - diff --git a/SpineViewer/Views/MainWindow.xaml.cs b/SpineViewer/Views/MainWindow.xaml.cs index cf59900..aa60aff 100644 --- a/SpineViewer/Views/MainWindow.xaml.cs +++ b/SpineViewer/Views/MainWindow.xaml.cs @@ -274,7 +274,6 @@ public partial class MainWindow : Window _vm.ExplorerListViewModel.CurrentDirectory = m.ExploringDirectory; _vm.SFMLRendererViewModel.SetResolution(m.ResolutionX, m.ResolutionY); - _vm.SFMLRendererViewModel.MaxFps = m.MaxFps; _vm.SFMLRendererViewModel.Speed = m.Speed; _vm.SFMLRendererViewModel.ShowAxis = m.ShowAxis; _vm.SFMLRendererViewModel.BackgroundColor = m.BackgroundColor; @@ -310,7 +309,6 @@ public partial class MainWindow : Window ResolutionX = _vm.SFMLRendererViewModel.ResolutionX, ResolutionY = _vm.SFMLRendererViewModel.ResolutionY, - MaxFps = _vm.SFMLRendererViewModel.MaxFps, Speed = _vm.SFMLRendererViewModel.Speed, ShowAxis = _vm.SFMLRendererViewModel.ShowAxis, BackgroundColor = _vm.SFMLRendererViewModel.BackgroundColor, @@ -400,7 +398,6 @@ public partial class MainWindow : Window { case nameof(SFMLRendererViewModel.ResolutionX): case nameof(SFMLRendererViewModel.ResolutionY): - case nameof(SFMLRendererViewModel.MaxFps): case nameof(SFMLRendererViewModel.Speed): case nameof(SFMLRendererViewModel.ShowAxis): case nameof(SFMLRendererViewModel.BackgroundColor): diff --git a/SpineViewer/Views/PreferenceDialog.xaml b/SpineViewer/Views/PreferenceDialog.xaml index f962604..9bb520b 100644 --- a/SpineViewer/Views/PreferenceDialog.xaml +++ b/SpineViewer/Views/PreferenceDialog.xaml @@ -195,30 +195,8 @@ - + - - - - - - - - - - - - - - @@ -248,6 +226,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -257,6 +270,15 @@ + + + + + + +