[client] overlay: guard ImGui table and tab bar scopes

This commit is contained in:
Geoffrey McRae
2026-07-30 09:17:09 +10:00
parent 510f6e8e14
commit 8fb355e6b7
2 changed files with 80 additions and 70 deletions

View File

@@ -84,29 +84,33 @@ static void config_renderLGTab(void)
{ {
igTextWrapped("%s", LG_DONATION_STR); igTextWrapped("%s", LG_DONATION_STR);
igBeginTable("donations_split", 2, 0, (ImVec2){}, 0.0f); if (igBeginTable("donations_split", 2, 0, (ImVec2){}, 0.0f))
igTableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, fontSize, 0); {
igTableNextColumn(); igTableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, fontSize, 0);
igBulletText(""); igTableNextColumn();
igTableNextColumn(); igBulletText("");
overlayTextURL(LG_DONATION_URL, NULL); igTableNextColumn();
overlayTextURL(LG_DONATION_URL, NULL);
igEndTable(); igEndTable();
}
} }
if (igCollapsingHeader_BoolPtr("Help & Support", NULL, if (igCollapsingHeader_BoolPtr("Help & Support", NULL,
ImGuiTreeNodeFlags_DefaultOpen)) ImGuiTreeNodeFlags_DefaultOpen))
{ {
igBeginTable("help_support_split", 2, 0, (ImVec2){}, 0.0f); if (igBeginTable("help_support_split", 2, 0, (ImVec2){}, 0.0f))
igTableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, fontSize * 9.0f, 0);
for(const StringPair * help = LG_HELP_LINKS; help->name; ++help)
{ {
igTableNextColumn(); igTableSetupColumn("", ImGuiTableColumnFlags_WidthFixed,
igBulletText("%s", help->name); fontSize * 9.0f, 0);
igTableNextColumn(); for(const StringPair * help = LG_HELP_LINKS; help->name; ++help)
overlayTextMaybeURL(help->value, true); {
igTableNextColumn();
igBulletText("%s", help->name);
igTableNextColumn();
overlayTextMaybeURL(help->value, true);
}
igEndTable();
} }
igEndTable();
} }
if (igCollapsingHeader_BoolPtr("The Looking Glass Team", NULL, if (igCollapsingHeader_BoolPtr("The Looking Glass Team", NULL,
@@ -126,17 +130,21 @@ static void config_renderLGTab(void)
"do so directly via the following platform%s:", "do so directly via the following platform%s:",
member->donate[1].name ? "s" : ""); member->donate[1].name ? "s" : "");
igBeginTable("member_donations_split", 2, 0, (ImVec2){}, 0.0f); if (igBeginTable("member_donations_split", 2, 0,
igTableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, (ImVec2){}, 0.0f))
fontSize * 10.0f, 0);
for(const StringPair * donate = member->donate; donate->name; ++donate)
{ {
igTableNextColumn(); igTableSetupColumn("", ImGuiTableColumnFlags_WidthFixed,
igBulletText("%s", donate->name); fontSize * 10.0f, 0);
igTableNextColumn(); for(const StringPair * donate = member->donate;
overlayTextMaybeURL(donate->value, false); donate->name; ++donate)
{
igTableNextColumn();
igBulletText("%s", donate->name);
igTableNextColumn();
overlayTextMaybeURL(donate->value, false);
}
igEndTable();
} }
igEndTable();
} }
igTreePop(); igTreePop();
igSeparator(); igSeparator();
@@ -181,58 +189,59 @@ static int config_render(void * udata, bool interactive, struct Rect * windowRec
return 1; return 1;
} }
igBeginTabBar("Configuration#tabs", 0); if (igBeginTabBar("Configuration#tabs", 0))
if (igBeginTabItem("About", NULL, 0))
{ {
config_renderLGTab(); if (igBeginTabItem("About", NULL, 0))
igEndTabItem(); {
} config_renderLGTab();
igEndTabItem();
}
ConfigCallback * cb; ConfigCallback * cb;
if (igBeginTabItem("Settings", NULL, 0)) if (igBeginTabItem("Settings", NULL, 0))
{ {
ll_lock(cfg.callbacks); ll_lock(cfg.callbacks);
ll_forEachNL(cfg.callbacks, item, cb) ll_forEachNL(cfg.callbacks, item, cb)
{
igPushID_Ptr(cb);
if (igCollapsingHeader_BoolPtr(cb->title, NULL, 0))
{
int id = 0;
cb->callback(cb->udata, &id);
}
igPopID();
}
ll_unlock(cfg.callbacks);
igEndTabItem();
}
ll_lock(cfg.tabCallbacks);
ll_forEachNL(cfg.tabCallbacks, item, cb)
{ {
igPushID_Ptr(cb); igPushID_Ptr(cb);
if (igCollapsingHeader_BoolPtr(cb->title, NULL, 0)) if (igBeginTabItem(cb->title, NULL, 0))
{ {
int id = 0; int id = 0;
cb->callback(cb->udata, &id); cb->callback(cb->udata, &id);
igEndTabItem();
} }
igPopID(); igPopID();
} }
ll_unlock(cfg.callbacks); ll_unlock(cfg.tabCallbacks);
igEndTabItem();
}
ll_lock(cfg.tabCallbacks); if (igBeginTabItem("License", NULL, 0))
ll_forEachNL(cfg.tabCallbacks, item, cb)
{
igPushID_Ptr(cb);
if (igBeginTabItem(cb->title, NULL, 0))
{ {
int id = 0; config_renderLicenseTab();
cb->callback(cb->udata, &id);
igEndTabItem(); igEndTabItem();
} }
igPopID(); igEndTabBar();
} }
ll_unlock(cfg.tabCallbacks);
if (igBeginTabItem("License", NULL, 0))
{
config_renderLicenseTab();
igEndTabItem();
}
igEndTabBar();
overlayGetImGuiRect(windowRects); overlayGetImGuiRect(windowRects);
igEnd(); igEnd();

View File

@@ -51,20 +51,21 @@ static void configCallback(void * udata, int * id)
igCheckbox("Show timing graphs", &gs.show); igCheckbox("Show timing graphs", &gs.show);
igSeparator(); igSeparator();
igBeginTable("graphs_split", 2, 0, (ImVec2){}, 0); if (igBeginTable("graphs_split", 2, 0, (ImVec2){}, 0))
GraphHandle graph;
ll_lock(gs.graphs);
ll_forEachNL(gs.graphs, item, graph)
{ {
igTableNextColumn(); GraphHandle graph;
igPushID_Ptr(graph); ll_lock(gs.graphs);
igCheckbox(graph->name, &graph->enabled); ll_forEachNL(gs.graphs, item, graph)
igPopID(); {
} igTableNextColumn();
ll_unlock(gs.graphs); igPushID_Ptr(graph);
igCheckbox(graph->name, &graph->enabled);
igPopID();
}
ll_unlock(gs.graphs);
igEndTable(); igEndTable();
}
} }
static void showTimingKeybind(int sc, void * opaque) static void showTimingKeybind(int sc, void * opaque)