重构
This commit is contained in:
@@ -13,25 +13,91 @@ namespace SpineViewer
|
||||
{
|
||||
public partial class SpinePreviewer : UserControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 包装类, 用于 PropertyGrid 显示
|
||||
/// </summary>
|
||||
private class PreviewerProperty
|
||||
{
|
||||
public const float ZOOM_MAX = 1000f;
|
||||
public const float ZOOM_MIN = 0.001f;
|
||||
private readonly SpinePreviewer previewer;
|
||||
|
||||
private readonly SFML.Graphics.RenderWindow RenderWindow;
|
||||
private readonly Control ContainerControl;
|
||||
|
||||
public PreviewerProperty(SpinePreviewer previewer)
|
||||
{
|
||||
RenderWindow = previewer.RenderWindow;
|
||||
ContainerControl = previewer;
|
||||
}
|
||||
public PreviewerProperty(SpinePreviewer previewer) { this.previewer = previewer; }
|
||||
|
||||
/// <summary>
|
||||
/// 导出画面分辨率
|
||||
/// </summary>
|
||||
[TypeConverter(typeof(SizeTypeConverter))]
|
||||
[Category("属性"), DisplayName("分辨率")]
|
||||
public Size Resolution { get => previewer.Resolution; set => previewer.Resolution = value; }
|
||||
|
||||
[TypeConverter(typeof(PointFTypeConverter))]
|
||||
[Category("属性"), DisplayName("画面中心点")]
|
||||
public PointF Center { get => previewer.Center; set => previewer.Center = value; }
|
||||
|
||||
/// <summary>
|
||||
/// 画面缩放
|
||||
/// </summary>
|
||||
[Category("属性"), DisplayName("缩放")]
|
||||
public float Zoom { get => previewer.Zoom; set => previewer.Zoom = value; }
|
||||
|
||||
/// <summary>
|
||||
/// 画面旋转
|
||||
/// </summary>
|
||||
[Category("属性"), DisplayName("旋转")]
|
||||
public float Rotation { get => previewer.Rotation; set => previewer.Rotation = value; }
|
||||
|
||||
/// <summary>
|
||||
/// 画面旋转
|
||||
/// </summary>
|
||||
[Category("属性"), DisplayName("水平翻转")]
|
||||
public bool FlipX { get => previewer.FlipX; set => previewer.FlipX = value; }
|
||||
|
||||
/// <summary>
|
||||
/// 画面旋转
|
||||
/// </summary>
|
||||
[Category("属性"), DisplayName("垂直翻转")]
|
||||
public bool FlipY { get => previewer.FlipY; set => previewer.FlipY = value; }
|
||||
}
|
||||
|
||||
[Category("自定义"), Description("用于显示画面属性的属性页")]
|
||||
public PropertyGrid? PropertyGrid
|
||||
{
|
||||
get => propertyGrid;
|
||||
set
|
||||
{
|
||||
propertyGrid = value;
|
||||
if (propertyGrid is not null)
|
||||
propertyGrid.SelectedObject = new PreviewerProperty(this);
|
||||
}
|
||||
}
|
||||
private PropertyGrid? propertyGrid;
|
||||
|
||||
[Category("自定义"), Description("帧渲染事件")]
|
||||
public event EventHandler<RenderFrameEventArgs>? RenderFrame;
|
||||
private void OnRenderFrame(float delta) { RenderFrame?.Invoke(this, new(RenderWindow, delta)); }
|
||||
|
||||
private readonly SFML.Graphics.RenderWindow RenderWindow;
|
||||
private readonly SFML.System.Clock Clock = new();
|
||||
private readonly SFML.Graphics.Color BackgroundColor = SFML.Graphics.Color.Green;
|
||||
|
||||
public SpinePreviewer()
|
||||
{
|
||||
InitializeComponent();
|
||||
RenderWindow = new(panel.Handle);
|
||||
RenderWindow.SetFramerateLimit(30);
|
||||
RenderWindow.SetActive(false);
|
||||
Resolution = new(1280, 720);
|
||||
Center = new(0, 0);
|
||||
FlipY = true;
|
||||
}
|
||||
|
||||
public const float ZOOM_MAX = 1000f;
|
||||
public const float ZOOM_MIN = 0.001f;
|
||||
|
||||
/// <summary>
|
||||
/// 分辨率
|
||||
/// </summary>
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
[Browsable(false)]
|
||||
public Size Resolution
|
||||
{
|
||||
get => resolution;
|
||||
@@ -40,8 +106,8 @@ namespace SpineViewer
|
||||
if (value.Width <= 0) value.Width = 100;
|
||||
if (value.Height <= 0) value.Height = 100;
|
||||
|
||||
float parentX = ContainerControl.Width;
|
||||
float parentY = ContainerControl.Height;
|
||||
float parentX = Width;
|
||||
float parentY = Height;
|
||||
float sizeX = value.Width;
|
||||
float sizeY = value.Height;
|
||||
|
||||
@@ -74,8 +140,11 @@ namespace SpineViewer
|
||||
}
|
||||
private Size resolution = new(0, 0);
|
||||
|
||||
[TypeConverter(typeof(PointFTypeConverter))]
|
||||
[Category("属性"), DisplayName("画面中心点")]
|
||||
/// <summary>
|
||||
/// 画面中心点
|
||||
/// </summary>
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
[Browsable(false)]
|
||||
public PointF Center
|
||||
{
|
||||
get
|
||||
@@ -94,7 +163,8 @@ namespace SpineViewer
|
||||
/// <summary>
|
||||
/// 画面缩放
|
||||
/// </summary>
|
||||
[Category("属性"), DisplayName("缩放")]
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
[Browsable(false)]
|
||||
public float Zoom
|
||||
{
|
||||
get => resolution.Width / Math.Abs(RenderWindow.GetView().Size.X);
|
||||
@@ -112,7 +182,8 @@ namespace SpineViewer
|
||||
/// <summary>
|
||||
/// 画面旋转
|
||||
/// </summary>
|
||||
[Category("属性"), DisplayName("旋转")]
|
||||
[Browsable(false)]
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
public float Rotation
|
||||
{
|
||||
get => RenderWindow.GetView().Rotation;
|
||||
@@ -125,9 +196,10 @@ namespace SpineViewer
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 画面旋转
|
||||
/// 水平翻转
|
||||
/// </summary>
|
||||
[Category("属性"), DisplayName("水平翻转")]
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
[Browsable(false)]
|
||||
public bool FlipX
|
||||
{
|
||||
get => RenderWindow.GetView().Size.X < 0;
|
||||
@@ -143,9 +215,10 @@ namespace SpineViewer
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 画面旋转
|
||||
/// 垂直翻转
|
||||
/// </summary>
|
||||
[Category("属性"), DisplayName("垂直翻转")]
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
[Browsable(false)]
|
||||
public bool FlipY
|
||||
{
|
||||
get => RenderWindow.GetView().Size.Y < 0;
|
||||
@@ -159,43 +232,6 @@ namespace SpineViewer
|
||||
RenderWindow.SetView(view);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Category("自定义"), Description("用于显示画面属性的属性页")]
|
||||
public PropertyGrid? PropertyGrid
|
||||
{
|
||||
get => propertyGrid;
|
||||
set
|
||||
{
|
||||
propertyGrid = value;
|
||||
if (propertyGrid is not null)
|
||||
propertyGrid.SelectedObject = Property;
|
||||
}
|
||||
}
|
||||
private PropertyGrid? propertyGrid;
|
||||
|
||||
[Category("自定义"), Description("帧渲染事件")]
|
||||
public event EventHandler<RenderFrameEventArgs>? RenderFrame;
|
||||
private void OnRenderFrame(float delta) { RenderFrame?.Invoke(this, new(RenderWindow, delta)); }
|
||||
|
||||
private readonly SFML.Graphics.RenderWindow RenderWindow;
|
||||
private readonly SFML.System.Clock Clock = new();
|
||||
private readonly SFML.Graphics.Color BackgroundColor = SFML.Graphics.Color.Green;
|
||||
private readonly PreviewerProperty Property;
|
||||
|
||||
public SpinePreviewer()
|
||||
{
|
||||
InitializeComponent();
|
||||
RenderWindow = new(panel.Handle);
|
||||
RenderWindow.SetFramerateLimit(30);
|
||||
RenderWindow.SetActive(false);
|
||||
Property = new(this)
|
||||
{
|
||||
Resolution = new(1280, 720),
|
||||
Center = new(0, 0),
|
||||
FlipY = true
|
||||
};
|
||||
}
|
||||
|
||||
public void StartPreview()
|
||||
{
|
||||
@@ -254,7 +290,7 @@ namespace SpineViewer
|
||||
|
||||
private void panel_MouseWheel(object sender, MouseEventArgs e)
|
||||
{
|
||||
Property.Zoom *= (e.Delta > 0 ? 1.1f : 0.9f);
|
||||
Zoom *= (e.Delta > 0 ? 1.1f : 0.9f);
|
||||
PropertyGrid?.Refresh();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user