修改缩放公式

This commit is contained in:
ww-rm
2025-04-16 21:25:26 +08:00
parent d2d8b7955c
commit 68d279a7c3

View File

@@ -23,7 +23,7 @@ namespace SpineViewer.Controls
renderWindow.SetActive(false); renderWindow.SetActive(false);
// 设置默认参数 // 设置默认参数
Resolution = new(2048, 2048); Resolution = Screen.PrimaryScreen.Bounds.Size;
Center = new(0, 0); Center = new(0, 0);
FlipY = true; FlipY = true;
MaxFps = 30; MaxFps = 30;
@@ -423,27 +423,17 @@ namespace SpineViewer.Controls
if (renderWindow is null) if (renderWindow is null)
return; return;
float parentX = panel_Render.Parent.Width; float parentW = panel_Render.Parent.Width;
float parentY = panel_Render.Parent.Height; float parentH = panel_Render.Parent.Height;
float sizeX = panel_Render.Width; float renderW = panel_Render.Width;
float sizeY = panel_Render.Height; float renderH = panel_Render.Height;
float scale = Math.Min(parentW / renderW, parentH / renderH); // 两方向取较小值, 保证 parent 覆盖 render
if ((sizeY / sizeX) < (parentY / parentX)) renderH *= scale;
{ renderW *= scale;
// 相同的 X, 子窗口 Y 更小
sizeY = parentX * sizeY / sizeX;
sizeX = parentX;
}
else
{
// 相同的 Y, 子窗口 X 更小
sizeX = parentY * sizeX / sizeY;
sizeY = parentY;
}
// 必须通过 SFML 的方法调整窗口 // 必须通过 SFML 的方法调整窗口
renderWindow.Position = new((int)(parentX - sizeX) / 2, (int)(parentY - sizeY) / 2); renderWindow.Position = new((int)(parentW - renderW) / 2, (int)(parentH - renderH) / 2);
renderWindow.Size = new((uint)sizeX, (uint)sizeY); renderWindow.Size = new((uint)renderW, (uint)renderH);
} }
private void panel_Render_MouseDown(object sender, MouseEventArgs e) private void panel_Render_MouseDown(object sender, MouseEventArgs e)