From 2d09935063d412d136025aa2c157de31c93358ef Mon Sep 17 00:00:00 2001 From: "DeepSeek V4.1 Flash" <> Date: Tue, 29 Sep 2026 17:28:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=A0=B7=E5=BC=8F=E5=8C=BA=E7=BA=BF?= =?UTF-8?q?=E5=AE=BD=E8=A1=8C=E6=94=B9=E4=B8=BA=E6=8C=89=E5=8F=AF=E7=94=A8?= =?UTF-8?q?=E5=AE=BD=E5=BA=A6=E7=AD=89=E6=AF=94=E8=87=AA=E9=80=82=E5=BA=94?= =?UTF-8?q?=EF=BC=8C=E9=9D=A2=E6=9D=BF=E6=94=B6=E7=AA=84=E6=97=B6=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E6=BA=A2=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 线宽行先按设计尺寸排布,仅在可用宽度不足时整体等比缩小, 面板默认宽度下保持原有比例(数值框不会被拉宽变形),最窄宽度下也不会溢出面板。 - 面板极窄时数值框自动省略 "px" 单位、仅显示数值,避免出现被截断的省略号。 --- Components/SignalPanel/Src/SignalPanel.cpp | 66 +++++++++++++--------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/Components/SignalPanel/Src/SignalPanel.cpp b/Components/SignalPanel/Src/SignalPanel.cpp index d5b3773..e481184 100644 --- a/Components/SignalPanel/Src/SignalPanel.cpp +++ b/Components/SignalPanel/Src/SignalPanel.cpp @@ -482,33 +482,35 @@ namespace jdi swatchSize, swatchSize); // ---- 第二行:线宽(最细 / 数值旋钮 / 最粗)---- - const float presetWidth = kWidthPresetWidth * m_scale; - const float spinButton = kWidthSpinButton * m_scale; - const float valueWidth = kWidthValueWidth * m_scale; - float groupGap = 8.0f * m_scale; - - float spinnerWidth = spinButton * 2.0f + valueWidth; - float groupWidth = presetWidth * 2.0f + spinnerWidth + groupGap * 2.0f; - if (groupWidth > contentWidth) - { - const float fit = contentWidth / groupWidth; - groupGap = std::max(3.0f * m_scale, groupGap * fit); - spinnerWidth = std::max(spinButton * 2.0f + 36.0f * m_scale, spinnerWidth * fit); - groupWidth = std::min(contentWidth, presetWidth * 2.0f + spinnerWidth + groupGap * 2.0f); - } - + // 先按设计尺寸排布,仅在可用宽度不足时整体等比缩小,保证不溢出也不被拉伸变形。 const float row1Top = row0Top + (kStyleRowHeight + kStyleRowGap) * m_scale; + const float naturalGap = 8.0f * m_scale; + const float naturalPreset = kWidthPresetWidth * m_scale; + const float naturalSpinner = (kWidthSpinButton * 2.0f + kWidthValueWidth) * m_scale; + + const float naturalTotal = naturalPreset * 2.0f + naturalSpinner + naturalGap * 2.0f; + const float widthFactor = + (naturalTotal > contentWidth && naturalTotal > 0.0f) ? (contentWidth / naturalTotal) : 1.0f; + + const float presetWidth = naturalPreset * widthFactor; + const float spinnerWidth = naturalSpinner * widthFactor; + const float rowGap = std::max(2.0f * m_scale, naturalGap * widthFactor); + + const float spinButtonWidth = std::min(kWidthSpinButton * m_scale, spinnerWidth * 0.26f); + const float innerValueWidth = std::max(12.0f * m_scale, spinnerWidth - spinButtonWidth * 2.0f); + + const float groupWidth = presetWidth * 2.0f + spinnerWidth + rowGap * 2.0f; const float groupLeft = contentLeft + std::max(0.0f, (contentWidth - groupWidth) * 0.5f); - const float innerSpinButton = std::min(spinButton, spinnerWidth * 0.25f); - const float innerValueWidth = std::max(24.0f * m_scale, spinnerWidth - innerSpinButton * 2.0f); m_widthThinRect = gd::RectF(groupLeft, row1Top, presetWidth, rowHeight); - m_widthSpinnerRect = gd::RectF(groupLeft + presetWidth + groupGap, row1Top, spinnerWidth, rowHeight); - m_widthMinusRect = gd::RectF(m_widthSpinnerRect.X, row1Top, innerSpinButton, rowHeight); - m_widthValueRect = gd::RectF(m_widthMinusRect.X + innerSpinButton, row1Top, innerValueWidth, rowHeight); - m_widthPlusRect = gd::RectF(m_widthValueRect.X + innerValueWidth, row1Top, innerSpinButton, rowHeight); + m_widthSpinnerRect = gd::RectF(groupLeft + presetWidth + rowGap, row1Top, spinnerWidth, rowHeight); + m_widthMinusRect = gd::RectF(m_widthSpinnerRect.X, row1Top, spinButtonWidth, rowHeight); + m_widthValueRect = + gd::RectF(m_widthMinusRect.X + spinButtonWidth, row1Top, innerValueWidth, rowHeight); + m_widthPlusRect = + gd::RectF(m_widthValueRect.X + innerValueWidth, row1Top, spinButtonWidth, rowHeight); m_widthThickRect = - gd::RectF(m_widthSpinnerRect.X + spinnerWidth + groupGap, row1Top, presetWidth, rowHeight); + gd::RectF(m_widthSpinnerRect.X + spinnerWidth + rowGap, row1Top, presetWidth, rowHeight); // ---- 第三行:样式(线段 / 散点 / 点线)---- const float row2Top = row1Top + (kStyleRowHeight + kStyleRowGap) * m_scale; @@ -930,10 +932,16 @@ namespace jdi { const std::wstring editText = m_widthEditText.empty() ? std::wstring(L" ") : m_widthEditText; - const float textWidth = UiTextWidth(g, editText, m_fonts->monoSmall); + // 面板极窄时省略单位,保证数值本身完整可读。 + const std::wstring fullText = editText + L" px"; + const std::wstring shown = + (UiTextWidth(g, fullText, m_fonts->monoSmall) > m_widthValueRect.Width - 6.0f * m_scale) + ? editText + : fullText; + const float textWidth = UiTextWidth(g, shown, m_fonts->monoSmall); const float caretX = m_widthValueRect.X + m_widthValueRect.Width - 6.0f * m_scale - textWidth; - UiText(g, editText + L" px", m_fonts->monoSmall, m_widthValueRect, m_theme->textStrong, + UiText(g, shown, m_fonts->monoSmall, m_widthValueRect, m_theme->textStrong, TextAlign::RIGHT); if (caretX > m_widthValueRect.X) { @@ -944,8 +952,14 @@ namespace jdi } else { - UiText(g, FormatNumber(style->lineWidth, 1) + L" px", m_fonts->monoSmall, m_widthValueRect, - m_theme->textStrong, TextAlign::CENTER); + const std::wstring numberText = FormatNumber(style->lineWidth, 1); + const std::wstring fullText = numberText + L" px"; + const std::wstring shown = + (UiTextWidth(g, fullText, m_fonts->monoSmall) > m_widthValueRect.Width - 6.0f * m_scale) + ? numberText + : fullText; + UiText(g, shown, m_fonts->monoSmall, m_widthValueRect, m_theme->textStrong, + TextAlign::CENTER); } const bool minusHot = (m_hoverStyle == StyleHit::WIDTH_MINUS);