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 @@
+
+
+
+
+
+
+
+
+