From 68d279a7c3dee04ddbf34304f5dedca273b3545f Mon Sep 17 00:00:00 2001 From: ww-rm Date: Wed, 16 Apr 2025 21:25:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=A9=E6=94=BE=E5=85=AC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpineViewer/Controls/SpinePreviewPanel.cs | 30 ++++++++--------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/SpineViewer/Controls/SpinePreviewPanel.cs b/SpineViewer/Controls/SpinePreviewPanel.cs index b079797..eea511e 100644 --- a/SpineViewer/Controls/SpinePreviewPanel.cs +++ b/SpineViewer/Controls/SpinePreviewPanel.cs @@ -23,7 +23,7 @@ namespace SpineViewer.Controls renderWindow.SetActive(false); // 设置默认参数 - Resolution = new(2048, 2048); + Resolution = Screen.PrimaryScreen.Bounds.Size; Center = new(0, 0); FlipY = true; MaxFps = 30; @@ -423,27 +423,17 @@ namespace SpineViewer.Controls if (renderWindow is null) return; - float parentX = panel_Render.Parent.Width; - float parentY = panel_Render.Parent.Height; - float sizeX = panel_Render.Width; - float sizeY = panel_Render.Height; - - if ((sizeY / sizeX) < (parentY / parentX)) - { - // 相同的 X, 子窗口 Y 更小 - sizeY = parentX * sizeY / sizeX; - sizeX = parentX; - } - else - { - // 相同的 Y, 子窗口 X 更小 - sizeX = parentY * sizeX / sizeY; - sizeY = parentY; - } + float parentW = panel_Render.Parent.Width; + float parentH = panel_Render.Parent.Height; + float renderW = panel_Render.Width; + float renderH = panel_Render.Height; + float scale = Math.Min(parentW / renderW, parentH / renderH); // 两方向取较小值, 保证 parent 覆盖 render + renderH *= scale; + renderW *= scale; // 必须通过 SFML 的方法调整窗口 - renderWindow.Position = new((int)(parentX - sizeX) / 2, (int)(parentY - sizeY) / 2); - renderWindow.Size = new((uint)sizeX, (uint)sizeY); + renderWindow.Position = new((int)(parentW - renderW) / 2, (int)(parentH - renderH) / 2); + renderWindow.Size = new((uint)renderW, (uint)renderH); } private void panel_Render_MouseDown(object sender, MouseEventArgs e)