From e6e7fc539f4585325440e92b5cc63054691718d4 Mon Sep 17 00:00:00 2001 From: ww-rm Date: Thu, 17 Apr 2025 19:58:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DUnion=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpineViewer/Extensions/SFMLExtension.cs | 28 +++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/SpineViewer/Extensions/SFMLExtension.cs b/SpineViewer/Extensions/SFMLExtension.cs index a4b9fc7..1d7d576 100644 --- a/SpineViewer/Extensions/SFMLExtension.cs +++ b/SpineViewer/Extensions/SFMLExtension.cs @@ -8,6 +8,18 @@ namespace SpineViewer.Extensions { public static class SFMLExtension { + /// + /// 获取并集范围 + /// + public static RectangleF Union(this RectangleF bounds, RectangleF other) + { + var x = Math.Min(bounds.X, other.X); + var y = Math.Min(bounds.Y, other.Y); + var w = Math.Max(bounds.Right, other.Right) - x; + var h = Math.Max(bounds.Bottom, other.Bottom) - y; + return new(x, y, w, h); + } + /// /// 获取适合指定画布参数下能够覆盖包围盒的画布视区包围盒 /// @@ -62,10 +74,22 @@ namespace SpineViewer.Extensions } /// - /// 获取视图的包围盒 + /// 获取视区的包围盒 /// public static RectangleF GetBounds(this SFML.Graphics.View view) - => new(view.Center.X - view.Size.X / 2, view.Center.Y - view.Size.Y / 2, view.Size.X, view.Size.Y); + { + return new( + view.Center.X - view.Size.X / 2, + view.Center.Y - view.Size.Y / 2, + view.Size.X, + view.Size.Y + ); + } + + /// + /// 按画布设置视区, 边缘和填充区域将不会出现内容 + /// + public static void SetViewport(this SFML.Graphics.View view, Size resolution, Padding margin) => SetViewport(view, resolution, margin, new(0)); /// /// 按画布设置视区, 边缘和填充区域将不会出现内容