diff --git a/SpineViewer/src/SpinePreviewer.cs b/SpineViewer/src/SpinePreviewer.cs
index a3a6c70..abca0cb 100644
--- a/SpineViewer/src/SpinePreviewer.cs
+++ b/SpineViewer/src/SpinePreviewer.cs
@@ -49,6 +49,9 @@ namespace SpineViewer
[Category("预览"), DisplayName("显示包围盒")]
public bool ShowBounds { get => previewer.ShowBounds; set => previewer.ShowBounds = value; }
+
+ [Category("预览"), DisplayName("最大帧率")]
+ public uint MaxFps { get => previewer.MaxFps; set => previewer.MaxFps = value; }
}
[Category("自定义"), Description("相关联的 SpineListView")]
@@ -71,13 +74,11 @@ namespace SpineViewer
public const float ZOOM_MIN = 0.001f;
public const int BACKGROUND_CELL_SIZE = 10;
- private static readonly SFML.Graphics.Color BackgroundColor = SFML.Graphics.Color.White;
- private static readonly SFML.Graphics.Color AxisColor = SFML.Graphics.Color.Red;
- private static readonly SFML.Graphics.Color BoundsColor = SFML.Graphics.Color.Blue;
+ private static readonly SFML.Graphics.Color BackgroundColor = new(105, 105, 105);
+ private static readonly SFML.Graphics.Color AxisColor = new(220, 220, 220);
+ private static readonly SFML.Graphics.Color BoundsColor = new(120, 200, 0);
- private readonly SFML.Graphics.RectangleShape BackgroundCell = new() { FillColor = new(220, 220, 220) };
- private readonly SFML.Graphics.VertexArray XAxisVertex = new(SFML.Graphics.PrimitiveType.Lines, 2);
- private readonly SFML.Graphics.VertexArray YAxisVertex = new(SFML.Graphics.PrimitiveType.Lines, 2);
+ private readonly SFML.Graphics.VertexArray AxisVertex = new(SFML.Graphics.PrimitiveType.Lines, 2);
private readonly SFML.Graphics.VertexArray BoundsRect = new(SFML.Graphics.PrimitiveType.LineStrip, 5);
private readonly SFML.Graphics.RenderWindow RenderWindow;
@@ -88,17 +89,6 @@ namespace SpineViewer
private Task? task = null;
private CancellationTokenSource? cancelToken = null;
- public SpinePreviewer()
- {
- InitializeComponent();
- RenderWindow = new(panel.Handle);
- RenderWindow.SetFramerateLimit(30);
- RenderWindow.SetActive(false);
- Resolution = new(2048, 2048);
- Center = new(0, 0);
- FlipY = true;
- }
-
///
/// 分辨率
///
@@ -253,6 +243,27 @@ namespace SpineViewer
[Browsable(false)]
public bool ShowBounds { get; set; } = true;
+ ///
+ /// 最大帧率
+ ///
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ [Browsable(false)]
+ public uint MaxFps { get => maxFps; set { RenderWindow.SetFramerateLimit(value); maxFps = value; } }
+ private uint maxFps = 60;
+
+ public SpinePreviewer()
+ {
+ InitializeComponent();
+ RenderWindow = new(panel.Handle);
+ RenderWindow.SetActive(false);
+
+ // 设置默认参数
+ Resolution = new(2048, 2048);
+ Center = new(0, 0);
+ FlipY = true;
+ MaxFps = 30;
+ }
+
///
/// 开始预览
///
@@ -365,6 +376,7 @@ namespace SpineViewer
if ((e.Button & MouseButtons.Right) != 0)
{
draggingSpine = null;
+ SpineListView?.PropertyGrid?.Refresh();
draggingSrc = null;
Cursor = Cursors.Default;
@@ -375,6 +387,7 @@ namespace SpineViewer
{
draggingSrc = null;
draggingSpine = null;
+ SpineListView?.PropertyGrid?.Refresh();
}
}
@@ -384,54 +397,6 @@ namespace SpineViewer
PropertyGrid?.Refresh();
}
- private void DrawBackground()
- {
- // 绘制网格背景
- var P = RenderWindow.MapPixelToCoords(new(0, 0));
- var Q = RenderWindow.MapPixelToCoords(new(BACKGROUND_CELL_SIZE, BACKGROUND_CELL_SIZE));
- var step = Q - P;
- BackgroundCell.Size = step;
-
- var view = RenderWindow.GetView();
- var size = view.Size;
- var leftTop = view.Center - size / 2;
-
- var xCount = (int)Math.Ceiling(size.X / step.X);
- var yCount = (int)Math.Ceiling(size.Y / step.Y);
-
- bool hasOffset = false;
- var x = leftTop.X;
- for (int i = 0; i < xCount; i++, x += step.X)
- {
- var y = leftTop.Y + (hasOffset ? step.Y : 0);
- for (int j = 0; j < yCount; j++, y += step.Y * 2)
- {
- BackgroundCell.Position = new(x, y);
- RenderWindow.Draw(BackgroundCell);
- }
- hasOffset = !hasOffset;
- }
-
- if (ShowAxis)
- {
- var origin = RenderWindow.MapCoordsToPixel(new(0, 0));
- var clientRect = panel.ClientRectangle;
- if (origin.X > clientRect.Left && origin.X < clientRect.Right ||
- origin.Y > clientRect.Top && origin.Y < clientRect.Bottom)
- {
- var rightBottom = view.Center + size / 2;
- XAxisVertex[0] = new(new(leftTop.X, 0), AxisColor);
- XAxisVertex[1] = new(new(rightBottom.X, 0), AxisColor);
- YAxisVertex[0] = new(new(0, leftTop.Y), AxisColor);
- YAxisVertex[1] = new(new(0, rightBottom.Y), AxisColor);
-
- // 绘制坐标轴
- RenderWindow.Draw(XAxisVertex);
- RenderWindow.Draw(YAxisVertex);
- }
- }
- }
-
private void RenderTask()
{
try
@@ -446,8 +411,16 @@ namespace SpineViewer
RenderWindow.Clear(BackgroundColor);
- // 渲染背景网格
- DrawBackground();
+ if (ShowAxis)
+ {
+ // 画一个很长的坐标轴, 用 1e9 比较合适
+ AxisVertex[0] = new(new(-1e9f, 0), AxisColor);
+ AxisVertex[1] = new(new(1e9f, 0), AxisColor);
+ RenderWindow.Draw(AxisVertex);
+ AxisVertex[0] = new(new(0, -1e9f), AxisColor);
+ AxisVertex[1] = new(new(0, 1e9f), AxisColor);
+ RenderWindow.Draw(AxisVertex);
+ }
// 渲染 Spine
if (SpineListView is not null)