增加最大帧率的首选项,移除用户状态中最大帧率的记忆

This commit is contained in:
ww-rm
2025-11-08 19:44:15 +08:00
parent 8e771fbaa4
commit 874404e3d3
10 changed files with 120 additions and 68 deletions

View File

@@ -73,6 +73,22 @@ namespace SpineViewer.Models
#endregion #endregion
#region
[ObservableProperty]
private bool _renderSelectedOnly;
[ObservableProperty]
private HitTestLevel _hitTestLevel;
[ObservableProperty]
private bool _logHitSlots;
[ObservableProperty]
private uint _maxFps = 30;
#endregion
#region #region
public RelayCommand Cmd_SelectAutoRunWorkspaceConfigPath => _cmd_SelectAutoRunWorkspaceConfigPath ??= new(() => public RelayCommand Cmd_SelectAutoRunWorkspaceConfigPath => _cmd_SelectAutoRunWorkspaceConfigPath ??= new(() =>
@@ -89,18 +105,12 @@ namespace SpineViewer.Models
[ObservableProperty] [ObservableProperty]
private AppSkin _appSkin; private AppSkin _appSkin;
[ObservableProperty]
private bool _renderSelectedOnly;
[ObservableProperty]
private HitTestLevel _hitTestLevel;
[ObservableProperty]
private bool _logHitSlots;
[ObservableProperty] [ObservableProperty]
private bool _wallpaperView; private bool _wallpaperView;
[ObservableProperty]
private uint _wallpaperMaxFps = 30;
[ObservableProperty] [ObservableProperty]
private bool _closeToTray; private bool _closeToTray;

View File

@@ -43,7 +43,6 @@ namespace SpineViewer.Models
public uint ResolutionX { get; set; } = 1500; public uint ResolutionX { get; set; } = 1500;
public uint ResolutionY { get; set; } = 1000; public uint ResolutionY { get; set; } = 1000;
public uint MaxFps { get; set; } = 30;
public float Speed { get; set; } = 1f; public float Speed { get; set; } = 1f;
public bool ShowAxis { get; set; } = true; public bool ShowAxis { get; set; } = true;
public Color BackgroundColor { get; set; } = Color.FromRgb(105, 105, 105); public Color BackgroundColor { get; set; } = Color.FromRgb(105, 105, 105);

View File

@@ -123,6 +123,8 @@
<s:String x:Key="Str_MaxFpsTooltip">Maximum frame rate of the preview. Set to 0 for no limit.</s:String> <s:String x:Key="Str_MaxFpsTooltip">Maximum frame rate of the preview. Set to 0 for no limit.</s:String>
<s:String x:Key="Str_PlaySpeed">Playback Speed</s:String> <s:String x:Key="Str_PlaySpeed">Playback Speed</s:String>
<s:String x:Key="Str_WallpaperView">Wallpaper View</s:String> <s:String x:Key="Str_WallpaperView">Wallpaper View</s:String>
<s:String x:Key="Str_WallpaperMaxFps">Max FPS of Wallpaper View</s:String>
<s:String x:Key="Str_WallpaperMaxFpsTooltip">Maximum frame rate of the wallpaper view. Set to 0 for no limit.</s:String>
<s:String x:Key="Str_RenderSelectedOnly">Render Selected Only</s:String> <s:String x:Key="Str_RenderSelectedOnly">Render Selected Only</s:String>
<s:String x:Key="Str_HitTestLevel">Hit Test Accuracy Level</s:String> <s:String x:Key="Str_HitTestLevel">Hit Test Accuracy Level</s:String>
<s:String x:Key="Str_LogHitSlots">Output Hit Test Slot Names</s:String> <s:String x:Key="Str_LogHitSlots">Output Hit Test Slot Names</s:String>

View File

@@ -123,6 +123,8 @@
<s:String x:Key="Str_MaxFpsTooltip">プレビュー画面の最大フレームレート。0 に設定すると制限なし。</s:String> <s:String x:Key="Str_MaxFpsTooltip">プレビュー画面の最大フレームレート。0 に設定すると制限なし。</s:String>
<s:String x:Key="Str_PlaySpeed">再生速度</s:String> <s:String x:Key="Str_PlaySpeed">再生速度</s:String>
<s:String x:Key="Str_WallpaperView">壁紙表示</s:String> <s:String x:Key="Str_WallpaperView">壁紙表示</s:String>
<s:String x:Key="Str_WallpaperMaxFps">壁紙ビューの最大FPS</s:String>
<s:String x:Key="Str_WallpaperMaxFpsTooltip">壁紙ビューの最大フレームレート。0に設定すると制限がなし。</s:String>
<s:String x:Key="Str_RenderSelectedOnly">選択のみレンダリング</s:String> <s:String x:Key="Str_RenderSelectedOnly">選択のみレンダリング</s:String>
<s:String x:Key="Str_HitTestLevel">ヒットテスト精度レベル</s:String> <s:String x:Key="Str_HitTestLevel">ヒットテスト精度レベル</s:String>
<s:String x:Key="Str_LogHitSlots">ヒットテスト結果のスロット名を出力</s:String> <s:String x:Key="Str_LogHitSlots">ヒットテスト結果のスロット名を出力</s:String>

View File

@@ -123,6 +123,8 @@
<s:String x:Key="Str_MaxFpsTooltip">预览画面的最大帧率,设置为 0 时则无帧率限制</s:String> <s:String x:Key="Str_MaxFpsTooltip">预览画面的最大帧率,设置为 0 时则无帧率限制</s:String>
<s:String x:Key="Str_PlaySpeed">播放速度</s:String> <s:String x:Key="Str_PlaySpeed">播放速度</s:String>
<s:String x:Key="Str_WallpaperView">桌面投影</s:String> <s:String x:Key="Str_WallpaperView">桌面投影</s:String>
<s:String x:Key="Str_WallpaperMaxFps">桌面投影最大帧率</s:String>
<s:String x:Key="Str_WallpaperMaxFpsTooltip">桌面投影的最大帧率,设置为 0 时则无帧率限制</s:String>
<s:String x:Key="Str_RenderSelectedOnly">仅渲染选中</s:String> <s:String x:Key="Str_RenderSelectedOnly">仅渲染选中</s:String>
<s:String x:Key="Str_HitTestLevel">命中检测准确度等级</s:String> <s:String x:Key="Str_HitTestLevel">命中检测准确度等级</s:String>
<s:String x:Key="Str_LogHitSlots">输出命中检测结果的插槽名称</s:String> <s:String x:Key="Str_LogHitSlots">输出命中检测结果的插槽名称</s:String>

View File

@@ -107,12 +107,15 @@ namespace SpineViewer.ViewModels.MainWindow
DebugPoints = DebugPoints, DebugPoints = DebugPoints,
DebugClippings = DebugClippings, DebugClippings = DebugClippings,
AppLanguage = AppLanguage,
AppSkin = AppSkin,
RenderSelectedOnly = RenderSelectedOnly, RenderSelectedOnly = RenderSelectedOnly,
HitTestLevel = HitTestLevel, HitTestLevel = HitTestLevel,
LogHitSlots = LogHitSlots, LogHitSlots = LogHitSlots,
MaxFps = MaxFps,
AppLanguage = AppLanguage,
AppSkin = AppSkin,
WallpaperView = WallpaperView, WallpaperView = WallpaperView,
WallpaperMaxFps = WallpaperMaxFps,
CloseToTray = CloseToTray, CloseToTray = CloseToTray,
AutoRun = AutoRun, AutoRun = AutoRun,
AutoRunWorkspaceConfigPath = AutoRunWorkspaceConfigPath, AutoRunWorkspaceConfigPath = AutoRunWorkspaceConfigPath,
@@ -139,12 +142,15 @@ namespace SpineViewer.ViewModels.MainWindow
DebugPoints = value.DebugPoints; DebugPoints = value.DebugPoints;
DebugClippings = value.DebugClippings; DebugClippings = value.DebugClippings;
AppLanguage = value.AppLanguage;
AppSkin = value.AppSkin;
RenderSelectedOnly = value.RenderSelectedOnly; RenderSelectedOnly = value.RenderSelectedOnly;
HitTestLevel = value.HitTestLevel; HitTestLevel = value.HitTestLevel;
LogHitSlots = value.LogHitSlots; LogHitSlots = value.LogHitSlots;
MaxFps = value.MaxFps;
AppLanguage = value.AppLanguage;
AppSkin = value.AppSkin;
WallpaperView = value.WallpaperView; WallpaperView = value.WallpaperView;
WallpaperMaxFps = value.WallpaperMaxFps;
CloseToTray = value.CloseToTray; CloseToTray = value.CloseToTray;
AutoRun = value.AutoRun; AutoRun = value.AutoRun;
AutoRunWorkspaceConfigPath = value.AutoRunWorkspaceConfigPath; AutoRunWorkspaceConfigPath = value.AutoRunWorkspaceConfigPath;
@@ -250,26 +256,10 @@ namespace SpineViewer.ViewModels.MainWindow
#endregion #endregion
#region #region
public static ImmutableArray<AppLanguage> AppLanguageOptions { get; } = Enum.GetValues<AppLanguage>().ToImmutableArray();
public static ImmutableArray<AppSkin> AppSkinOptions { get; } = Enum.GetValues<AppSkin>().ToImmutableArray();
public static ImmutableArray<HitTestLevel> HitTestLevelOptions { get; } = Enum.GetValues<HitTestLevel>().ToImmutableArray(); public static ImmutableArray<HitTestLevel> HitTestLevelOptions { get; } = Enum.GetValues<HitTestLevel>().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 public bool RenderSelectedOnly
{ {
get => _vmMain.SFMLRendererViewModel.RenderSelectedOnly; get => _vmMain.SFMLRendererViewModel.RenderSelectedOnly;
@@ -288,12 +278,44 @@ namespace SpineViewer.ViewModels.MainWindow
set => SetProperty(SpineExtension.LogHitSlots, value, v => SpineExtension.LogHitSlots = v); 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<AppLanguage> AppLanguageOptions { get; } = Enum.GetValues<AppLanguage>().ToImmutableArray();
public static ImmutableArray<AppSkin> AppSkinOptions { get; } = Enum.GetValues<AppSkin>().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 public bool WallpaperView
{ {
get => _vmMain.SFMLRendererViewModel.WallpaperView; get => _vmMain.SFMLRendererViewModel.WallpaperView;
set => SetProperty(_vmMain.SFMLRendererViewModel.WallpaperView, value, v => _vmMain.SFMLRendererViewModel.WallpaperView = v); 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 public bool CloseToTray
{ {
get => _vmMain.CloseToTray; get => _vmMain.CloseToTray;

View File

@@ -160,7 +160,13 @@ namespace SpineViewer.ViewModels.MainWindow
public uint MaxFps public uint MaxFps
{ {
get => _renderer.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; public float RealTimeFps => _realTimeFps;

View File

@@ -793,16 +793,6 @@
<Separator Margin="0 5"/> <Separator Margin="0 5"/>
<!-- 最大帧率 -->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="LabelCol"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Content="{DynamicResource Str_MaxFps}" ToolTip="{DynamicResource Str_MaxFpsTooltip}"/>
<TextBox Grid.Column="1" Text="{Binding MaxFps}" ToolTip="{DynamicResource Str_MaxFpsTooltip}"/>
</Grid>
<!-- 播放速度 --> <!-- 播放速度 -->
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>

View File

@@ -274,7 +274,6 @@ public partial class MainWindow : Window
_vm.ExplorerListViewModel.CurrentDirectory = m.ExploringDirectory; _vm.ExplorerListViewModel.CurrentDirectory = m.ExploringDirectory;
_vm.SFMLRendererViewModel.SetResolution(m.ResolutionX, m.ResolutionY); _vm.SFMLRendererViewModel.SetResolution(m.ResolutionX, m.ResolutionY);
_vm.SFMLRendererViewModel.MaxFps = m.MaxFps;
_vm.SFMLRendererViewModel.Speed = m.Speed; _vm.SFMLRendererViewModel.Speed = m.Speed;
_vm.SFMLRendererViewModel.ShowAxis = m.ShowAxis; _vm.SFMLRendererViewModel.ShowAxis = m.ShowAxis;
_vm.SFMLRendererViewModel.BackgroundColor = m.BackgroundColor; _vm.SFMLRendererViewModel.BackgroundColor = m.BackgroundColor;
@@ -310,7 +309,6 @@ public partial class MainWindow : Window
ResolutionX = _vm.SFMLRendererViewModel.ResolutionX, ResolutionX = _vm.SFMLRendererViewModel.ResolutionX,
ResolutionY = _vm.SFMLRendererViewModel.ResolutionY, ResolutionY = _vm.SFMLRendererViewModel.ResolutionY,
MaxFps = _vm.SFMLRendererViewModel.MaxFps,
Speed = _vm.SFMLRendererViewModel.Speed, Speed = _vm.SFMLRendererViewModel.Speed,
ShowAxis = _vm.SFMLRendererViewModel.ShowAxis, ShowAxis = _vm.SFMLRendererViewModel.ShowAxis,
BackgroundColor = _vm.SFMLRendererViewModel.BackgroundColor, BackgroundColor = _vm.SFMLRendererViewModel.BackgroundColor,
@@ -400,7 +398,6 @@ public partial class MainWindow : Window
{ {
case nameof(SFMLRendererViewModel.ResolutionX): case nameof(SFMLRendererViewModel.ResolutionX):
case nameof(SFMLRendererViewModel.ResolutionY): case nameof(SFMLRendererViewModel.ResolutionY):
case nameof(SFMLRendererViewModel.MaxFps):
case nameof(SFMLRendererViewModel.Speed): case nameof(SFMLRendererViewModel.Speed):
case nameof(SFMLRendererViewModel.ShowAxis): case nameof(SFMLRendererViewModel.ShowAxis):
case nameof(SFMLRendererViewModel.BackgroundColor): case nameof(SFMLRendererViewModel.BackgroundColor):

View File

@@ -195,30 +195,8 @@
</StackPanel> </StackPanel>
</GroupBox> </GroupBox>
<GroupBox Header="{DynamicResource Str_AppPreference}"> <GroupBox Header="{DynamicResource Str_RendererPreference}">
<StackPanel> <StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="LabelCol"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Content="{DynamicResource Str_Language}"/>
<ComboBox Grid.Column="1"
SelectedItem="{Binding AppLanguage}"
ItemsSource="{x:Static vm:PreferenceViewModel.AppLanguageOptions}"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="LabelCol"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Content="{DynamicResource Str_Skin}"/>
<ComboBox Grid.Column="1"
SelectedItem="{Binding AppSkin}"
ItemsSource="{x:Static vm:PreferenceViewModel.AppSkinOptions}"/>
</Grid>
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="LabelCol"/> <ColumnDefinition Width="Auto" SharedSizeGroup="LabelCol"/>
@@ -248,6 +226,41 @@
<ToggleButton Grid.Column="1" IsChecked="{Binding LogHitSlots}" ToolTip="{DynamicResource Str_LogHitSlotsTooltip}"/> <ToggleButton Grid.Column="1" IsChecked="{Binding LogHitSlots}" ToolTip="{DynamicResource Str_LogHitSlotsTooltip}"/>
</Grid> </Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="LabelCol"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Content="{DynamicResource Str_MaxFps}" ToolTip="{DynamicResource Str_MaxFpsTooltip}"/>
<TextBox Grid.Column="1" Text="{Binding MaxFps}" ToolTip="{DynamicResource Str_MaxFpsTooltip}"/>
</Grid>
</StackPanel>
</GroupBox>
<GroupBox Header="{DynamicResource Str_AppPreference}">
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="LabelCol"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Content="{DynamicResource Str_Language}"/>
<ComboBox Grid.Column="1"
SelectedItem="{Binding AppLanguage}"
ItemsSource="{x:Static vm:PreferenceViewModel.AppLanguageOptions}"/>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="LabelCol"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Content="{DynamicResource Str_Skin}"/>
<ComboBox Grid.Column="1"
SelectedItem="{Binding AppSkin}"
ItemsSource="{x:Static vm:PreferenceViewModel.AppSkinOptions}"/>
</Grid>
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="LabelCol"/> <ColumnDefinition Width="Auto" SharedSizeGroup="LabelCol"/>
@@ -257,6 +270,15 @@
<ToggleButton Grid.Column="1" IsChecked="{Binding WallpaperView}"/> <ToggleButton Grid.Column="1" IsChecked="{Binding WallpaperView}"/>
</Grid> </Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="LabelCol"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Content="{DynamicResource Str_WallpaperMaxFps}" ToolTip="{DynamicResource Str_WallpaperMaxFpsTooltip}"/>
<TextBox Grid.Column="1" Text="{Binding WallpaperMaxFps}" ToolTip="{DynamicResource Str_WallpaperMaxFpsTooltip}"/>
</Grid>
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="LabelCol"/> <ColumnDefinition Width="Auto" SharedSizeGroup="LabelCol"/>