diff --git a/SpineViewer/Spine/Spine.cs b/SpineViewer/Spine/Spine.cs
index 408872f..d6f72de 100644
--- a/SpineViewer/Spine/Spine.cs
+++ b/SpineViewer/Spine/Spine.cs
@@ -312,7 +312,7 @@ namespace SpineViewer.Spine
public string DefaultAnimationName { get => animationNames.Last(); }
///
- /// 当前动画名称
+ /// 当前动画名称, 如果设置的动画不存在则忽略
///
[TypeConverter(typeof(AnimationConverter))]
[Category("动画"), DisplayName("当前动画")]
@@ -330,35 +330,6 @@ namespace SpineViewer.Spine
[Browsable(false)]
public abstract RectangleF Bounds { get; }
- ///
- /// 获取初始状态下合适的 View, 参数单位为像素
- ///
- public SFML.Graphics.View GetInitView(uint width, uint height, uint paddingL = 1, uint paddingR = 1, uint paddingT = 1, uint paddingB = 1)
- {
- var tmp = CurrentAnimation;
- CurrentAnimation = EMPTY_ANIMATION;
- var bounds = Bounds;
- CurrentAnimation = tmp;
-
- float sizeX = bounds.Width;
- float sizeY = bounds.Height;
- float innerW = width - paddingL - paddingR;
- float innerH = height - paddingT - paddingB;
-
- float scale = 1;
- if ((sizeY / sizeX) < (innerH / innerW))
- scale = sizeX / innerW; // 相同的 X, 视窗 Y 更大
- else
- scale = sizeY / innerH; // 相同的 Y, 视窗 X 更大
-
- var x = bounds.X + bounds.Width / 2 + ((float)paddingL - (float)paddingR) * scale;
- var y = bounds.Y + bounds.Height / 2 + ((float)paddingT - (float)paddingB) * scale;
- var viewX = width * scale;
- var viewY = height * scale;
-
- return new(new(x, y), new(viewX, -viewY));
- }
-
///
/// 骨骼预览图
///
@@ -405,19 +376,51 @@ namespace SpineViewer.Spine
public abstract void Update(float delta);
///
- /// 顶点坐标缓冲区
+ /// 获取初始状态下合适的 View, 参数单位为像素
///
- protected float[] worldVerticesBuffer = new float[1024];
+ public SFML.Graphics.View GetInitView(Size resolution, Padding padding) =>
+ GetInitView((uint)resolution.Width, (uint)resolution.Height, (uint)padding.Left, (uint)padding.Right, (uint)padding.Top, (uint)padding.Bottom);
///
- /// 顶点缓冲区
+ /// 获取初始状态下合适的 View, 参数单位为像素
///
- protected SFML.Graphics.VertexArray vertexArray = new(SFML.Graphics.PrimitiveType.Triangles);
+ public SFML.Graphics.View GetInitView(uint width, uint height, Padding padding) =>
+ GetInitView(width, height, (uint)padding.Left, (uint)padding.Right, (uint)padding.Top, (uint)padding.Bottom);
///
- /// SFML.Graphics.Drawable 接口实现 TODO: 增加调试内容绘制
+ /// 获取初始状态下合适的 View, 参数单位为像素
///
- public abstract void Draw(SFML.Graphics.RenderTarget target, SFML.Graphics.RenderStates states);
+ public SFML.Graphics.View GetInitView(Size resolution, uint paddingL = 1, uint paddingR = 1, uint paddingT = 1, uint paddingB = 1) =>
+ GetInitView((uint)resolution.Width, (uint)resolution.Height, paddingL, paddingR, paddingT, paddingB);
+
+ ///
+ /// 获取初始状态下合适的 View, 参数单位为像素
+ ///
+ public SFML.Graphics.View GetInitView(uint width, uint height, uint paddingL = 1, uint paddingR = 1, uint paddingT = 1, uint paddingB = 1)
+ {
+ var tmp = CurrentAnimation;
+ CurrentAnimation = EMPTY_ANIMATION;
+ var bounds = Bounds;
+ CurrentAnimation = tmp;
+
+ float sizeX = bounds.Width;
+ float sizeY = bounds.Height;
+ float innerW = width - paddingL - paddingR;
+ float innerH = height - paddingT - paddingB;
+
+ float scale = 1;
+ if ((sizeY / sizeX) < (innerH / innerW))
+ scale = sizeX / innerW; // 相同的 X, 视窗 Y 更大
+ else
+ scale = sizeY / innerH; // 相同的 Y, 视窗 X 更大
+
+ var x = bounds.X + bounds.Width / 2 + ((float)paddingL - (float)paddingR) * scale;
+ var y = bounds.Y + bounds.Height / 2 + ((float)paddingT - (float)paddingB) * scale;
+ var viewX = width * scale;
+ var viewY = height * scale;
+
+ return new(new(x, y), new(viewX, -viewY));
+ }
///
/// 是否被选中
@@ -442,5 +445,24 @@ namespace SpineViewer.Spine
///
[Browsable(false)]
public bool DebugBones { get; set; } = false;
+
+ #region SFML.Graphics.Drawable 接口实现
+
+ ///
+ /// 顶点坐标缓冲区
+ ///
+ protected float[] worldVerticesBuffer = new float[1024];
+
+ ///
+ /// 顶点缓冲区
+ ///
+ protected SFML.Graphics.VertexArray vertexArray = new(SFML.Graphics.PrimitiveType.Triangles);
+
+ ///
+ /// SFML.Graphics.Drawable 接口实现 TODO: 增加调试内容绘制
+ ///
+ public abstract void Draw(SFML.Graphics.RenderTarget target, SFML.Graphics.RenderStates states);
+
+ #endregion
}
}