From b8509ccb69baa1eba85ee3da10dd254e95f174a7 Mon Sep 17 00:00:00 2001 From: ww-rm Date: Fri, 25 Apr 2025 22:08:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=BA=8B=E4=BB=B6=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpineViewer/Controls/SpinePreviewPanel.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/SpineViewer/Controls/SpinePreviewPanel.cs b/SpineViewer/Controls/SpinePreviewPanel.cs index 044c551..780e642 100644 --- a/SpineViewer/Controls/SpinePreviewPanel.cs +++ b/SpineViewer/Controls/SpinePreviewPanel.cs @@ -77,9 +77,8 @@ namespace SpineViewer.Controls renderW *= scale; renderH *= scale; - // 必须通过 SFML 的方法调整窗口 - renderWindow.Position = new((int)((parentW - renderW) / 2 + 0.5), (int)((parentH - renderH) / 2 + 0.5)); - renderWindow.Size = new((uint)(renderW + 0.5), (uint)(renderH + 0.5)); + panel_Render.Location = new((int)((parentW - renderW) / 2 + 0.5), (int)((parentH - renderH) / 2 + 0.5)); + panel_Render.Size = new((int)(renderW + 0.5), (int)(renderH + 0.5)); resolution = value; // 设置完 resolution 后还原缩放比例 @@ -423,6 +422,9 @@ namespace SpineViewer.Controls float delta; while (cancelToken is not null && !cancelToken.IsCancellationRequested) { + // 必须让 SFML 有机会处理窗口消息, 例如位置和大小变化 + renderWindow.DispatchEvents(); + delta = clock.ElapsedTime.AsSeconds(); clock.Restart(); @@ -514,9 +516,8 @@ namespace SpineViewer.Controls renderW *= scale; renderH *= scale; - // 必须通过 SFML 的方法调整窗口, 此处必须四舍五入, 否则在全屏和小窗多次切换之后会有明显的舍入误差 - renderWindow.Position = new((int)((parentW - renderW) / 2 + 0.5), (int)((parentH - renderH) / 2 + 0.5)); - renderWindow.Size = new((uint)(renderW + 0.5), (uint)(renderH + 0.5)); + panel_Render.Location = new((int)((parentW - renderW) / 2 + 0.5), (int)((parentH - renderH) / 2 + 0.5)); + panel_Render.Size = new((int)(renderW + 0.5), (int)(renderH + 0.5)); } private void panel_Render_MouseDown(object sender, MouseEventArgs e)