fix(ui): finish HiDPI pass — cosmetic ×dpiScale, narrow-width reflow, recent-list reserves
The tail of the DPI/font-scale/responsiveness audit — ~26 remaining findings.
Container / recent-list (Theme-1 leftovers):
- Send: drop NoScrollbar|NoScrollWithMouse on ##SendFormScroll so Recent Sends is
reachable at font_scale 1.5 (parity with receive).
- Receive: cap the QR/form card via std::min(mainCardTargetH, availH - recentReserve)
so RECENT RECEIVED stays on-screen (identity at 1.0x).
- Wallets dialog: size the capped-mode list to whole rows so it no longer clips a
partial row / crowds "Create a new wallet".
Narrow-width (1024px) reflow:
- Console toolbar reserves space for ALL trailing controls (both icon toggles + zoom
buttons) so the +/- zoom no longer runs off-window.
- History sort combo sized to its measured widest localized label ("Newest first").
- Settings Theme/Layout/Language row: scale the wide→stacked breakpoint by dpiScale so
it drops to full-width stacked combos at 1.5x (Consolidated Card no longer clips).
- Recent-tx type label: derive the address column X from the measured label width so it
can't collide at narrow widths.
- Mining Recent Pool Payouts: floor the panel height to fit the empty-state caption.
Cosmetic ×dpiScale() on absolute geometry (no-ops at 1.0x): mining SOLO|POOL toggle &
idle combos, market pair-chips, password/PIN strength bars, receive/send currency
toggles, explorer search bar/rows/rounding, About-card logo, chat empty-state wrap,
recent-list address/time offsets, address-toolbar & two-row action buttons, console
line-gap/status-dot/pane rounding.
Verified at font_scale 1.5 and at 1024px across full-node + Lite + Windows (ctest
green) and an adversarial diff review (one over-reserve regression fixed).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -664,7 +664,7 @@ void RenderSettingsPage(App* app) {
|
||||
float contentW = availWidth - pad * 2;
|
||||
float comboGap = S.drawElement("components.settings-page", "combo-row-gap").size;
|
||||
float compactBP = S.drawElement("components.settings-page", "compact-breakpoint").size;
|
||||
bool wideLayout = availWidth >= compactBP;
|
||||
bool wideLayout = availWidth >= compactBP * dp; // scale the breakpoint so the 3-combo row drops to the stacked layout at high font scale (else the combos clip)
|
||||
float refreshBtnW = S.drawElement("components.settings-page", "refresh-btn-width").size;
|
||||
|
||||
// --- Skin data ---
|
||||
@@ -762,6 +762,8 @@ void RenderSettingsPage(App* app) {
|
||||
float lblThemeW = ImGui::CalcTextSize(TR("theme")).x + lblGap;
|
||||
float lblLayoutW = ImGui::CalcTextSize(TR("balance_layout")).x + lblGap;
|
||||
float lblLangW = ImGui::CalcTextSize(TR("language")).x + lblGap;
|
||||
// Budget matches the RAW draws below (SameLine(0, comboGap) and ImVec2(refreshBtnW, 0)) —
|
||||
// don't dpi-scale these terms or the budget over-reserves and the combos shrink needlessly.
|
||||
float totalFixed = lblThemeW + lblLayoutW + lblLangW
|
||||
+ comboGap * 2 + Layout::spacingSm() + refreshBtnW;
|
||||
float comboW = std::max(80.0f, (contentW - totalFixed) / 3.0f);
|
||||
@@ -2533,7 +2535,7 @@ void RenderSettingsPage(App* app) {
|
||||
ImVec2 logoPos = ImGui::GetCursorScreenPos();
|
||||
float logoAspect = (app->getLogoHeight() > 0)
|
||||
? (float)app->getLogoWidth() / (float)app->getLogoHeight() : 1.0f;
|
||||
float logoReserveH = schema::UI().drawElement("components.settings-page", "about-logo-size").sizeOr(150.0f);
|
||||
float logoReserveH = schema::UI().drawElement("components.settings-page", "about-logo-size").sizeOr(150.0f) * dp;
|
||||
if (logoTex != 0) {
|
||||
logoAreaW = logoReserveH * logoAspect + Layout::spacingLg();
|
||||
ImGui::Indent(logoAreaW);
|
||||
|
||||
Reference in New Issue
Block a user