feat(settings): two-column NODE & SECURITY card (B) — fill the empty right side
The NODE & SECURITY card stacked Node / RPC / Security / Daemon-binary in one full-width column, packing everything on the left. Split it into two columns when the card is wide enough: Node + RPC + Security on the left, Daemon binary on the right — which fills the previously-empty right half and roughly halves the card's height. Falls back to a single column on narrow windows (and when there's no daemon section). Implemented by shadowing contentW + sectionOrigin per column (renderSecuritySection already takes an explicit width/origin), so every sub-section lays out within its column; the card auto-sizes to the taller column. Full-node only for now; the lite Node section stays single-column. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1986,6 +1986,17 @@ void RenderSettingsPage(App* app) {
|
|||||||
|
|
||||||
const float spMd = Layout::spacingMd();
|
const float spMd = Layout::spacingMd();
|
||||||
|
|
||||||
|
// Two-column layout when wide enough: Node / RPC / Security on the left, Daemon binary on
|
||||||
|
// the right (fills the empty right side + shortens the card). One column when narrow.
|
||||||
|
const bool nsHasDaemon = app->supportsFullNodeLifecycleActions();
|
||||||
|
const float nsColGap = Layout::spacingXl();
|
||||||
|
const bool nsTwoCol = nsHasDaemon && contentW > 760.0f * Layout::dpiScale();
|
||||||
|
const float nsColW = nsTwoCol ? (contentW - nsColGap) * 0.5f : contentW;
|
||||||
|
const ImVec2 nsColTop = ImGui::GetCursorScreenPos();
|
||||||
|
{ // ---- left column (Node / RPC / Security) ----
|
||||||
|
const float contentW = nsColW;
|
||||||
|
const ImVec2 sectionOrigin(nsColTop.x, nsColTop.y);
|
||||||
|
|
||||||
// -------------------- NODE / DATA --------------------
|
// -------------------- NODE / DATA --------------------
|
||||||
Type().textColored(TypeStyle::Overline, OnSurfaceMedium(), TR("node"));
|
Type().textColored(TypeStyle::Overline, OnSurfaceMedium(), TR("node"));
|
||||||
ImGui::Dummy(ImVec2(0, Layout::spacingXs()));
|
ImGui::Dummy(ImVec2(0, Layout::spacingXs()));
|
||||||
@@ -2146,6 +2157,13 @@ void RenderSettingsPage(App* app) {
|
|||||||
Type().textColored(TypeStyle::Overline, OnSurfaceMedium(), TR("security"));
|
Type().textColored(TypeStyle::Overline, OnSurfaceMedium(), TR("security"));
|
||||||
ImGui::Dummy(ImVec2(0, Layout::spacingXs()));
|
ImGui::Dummy(ImVec2(0, Layout::spacingXs()));
|
||||||
renderSecuritySection(sectionOrigin.x, contentW, /*includeRpcEncrypt=*/true);
|
renderSecuritySection(sectionOrigin.x, contentW, /*includeRpcEncrypt=*/true);
|
||||||
|
} // ---- end left column ----
|
||||||
|
const float nsLeftBottom = ImGui::GetCursorScreenPos().y;
|
||||||
|
if (nsTwoCol) ImGui::SetCursorScreenPos(ImVec2(nsColTop.x + nsColW + nsColGap, nsColTop.y));
|
||||||
|
{ // ---- right column (Daemon binary) ----
|
||||||
|
const float contentW = nsColW;
|
||||||
|
const ImVec2 sectionOrigin(nsTwoCol ? nsColTop.x + nsColW + nsColGap : nsColTop.x,
|
||||||
|
nsTwoCol ? nsColTop.y : ImGui::GetCursorScreenPos().y);
|
||||||
|
|
||||||
// -------------------- DAEMON BINARY --------------------
|
// -------------------- DAEMON BINARY --------------------
|
||||||
if (app->supportsFullNodeLifecycleActions()) {
|
if (app->supportsFullNodeLifecycleActions()) {
|
||||||
@@ -2295,11 +2313,11 @@ void RenderSettingsPage(App* app) {
|
|||||||
ImGui::EndDisabled();
|
ImGui::EndDisabled();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} // ---- end right column ----
|
||||||
|
const float nsRightBottom = ImGui::GetCursorScreenPos().y;
|
||||||
|
ImGui::SetCursorScreenPos(ImVec2(nsColTop.x, nsTwoCol ? std::max(nsLeftBottom, nsRightBottom) : nsRightBottom));
|
||||||
|
|
||||||
ImGui::PopFont();
|
ImGui::PopFont();
|
||||||
|
|
||||||
// Advance to the true bottom of the single column.
|
|
||||||
ImGui::SetCursorScreenPos(ImVec2(sectionOrigin.x, ImGui::GetCursorScreenPos().y));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user