fix(console): balance colour-toggle push/pop so it stops drawing a red error rect
The accent + text-colour toggle buttons pushed/popped ImGuiCol_Text guarded by a flag the TactileButton flips in between, so a click left the colour stack unbalanced for that frame — and ImGui's error recovery drew a red rectangle around the console window (imgui.cpp:11727). Capture the flag into a local before the button and guard both the push and the pop with it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -572,12 +572,14 @@ void ConsoleTab::renderToolbar(ConsoleCommandExecutor& exec)
|
|||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
{
|
{
|
||||||
float btnSz = ImGui::GetFrameHeight();
|
float btnSz = ImGui::GetFrameHeight();
|
||||||
|
// Capture the flag BEFORE the button can flip it — the push/pop guards must use the SAME value,
|
||||||
|
// or a click leaves the colour stack unbalanced (ImGui then draws a red error rect on the window).
|
||||||
|
const bool dim = !s_line_accents_enabled;
|
||||||
const char* icon = s_line_accents_enabled ? ICON_MD_FORMAT_COLOR_FILL : ICON_MD_FORMAT_COLOR_RESET;
|
const char* icon = s_line_accents_enabled ? ICON_MD_FORMAT_COLOR_FILL : ICON_MD_FORMAT_COLOR_RESET;
|
||||||
if (!s_line_accents_enabled)
|
if (dim) ImGui::PushStyleColor(ImGuiCol_Text, ImGui::ColorConvertU32ToFloat4(OnSurfaceDisabled()));
|
||||||
ImGui::PushStyleColor(ImGuiCol_Text, ImGui::ColorConvertU32ToFloat4(OnSurfaceDisabled()));
|
|
||||||
if (TactileButton(icon, ImVec2(btnSz, btnSz), Type().iconMed()))
|
if (TactileButton(icon, ImVec2(btnSz, btnSz), Type().iconMed()))
|
||||||
s_line_accents_enabled = !s_line_accents_enabled;
|
s_line_accents_enabled = !s_line_accents_enabled;
|
||||||
if (!s_line_accents_enabled) ImGui::PopStyleColor();
|
if (dim) ImGui::PopStyleColor();
|
||||||
if (ImGui::IsItemHovered()) material::Tooltip("%s", TR("console_toggle_accents"));
|
if (ImGui::IsItemHovered()) material::Tooltip("%s", TR("console_toggle_accents"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -585,11 +587,11 @@ void ConsoleTab::renderToolbar(ConsoleCommandExecutor& exec)
|
|||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
{
|
{
|
||||||
float btnSz = ImGui::GetFrameHeight();
|
float btnSz = ImGui::GetFrameHeight();
|
||||||
if (!s_line_text_color_enabled)
|
const bool dim = !s_line_text_color_enabled; // capture before the click flips it (balanced push/pop)
|
||||||
ImGui::PushStyleColor(ImGuiCol_Text, ImGui::ColorConvertU32ToFloat4(OnSurfaceDisabled()));
|
if (dim) ImGui::PushStyleColor(ImGuiCol_Text, ImGui::ColorConvertU32ToFloat4(OnSurfaceDisabled()));
|
||||||
if (TactileButton(ICON_MD_FORMAT_COLOR_TEXT, ImVec2(btnSz, btnSz), Type().iconMed()))
|
if (TactileButton(ICON_MD_FORMAT_COLOR_TEXT, ImVec2(btnSz, btnSz), Type().iconMed()))
|
||||||
s_line_text_color_enabled = !s_line_text_color_enabled;
|
s_line_text_color_enabled = !s_line_text_color_enabled;
|
||||||
if (!s_line_text_color_enabled) ImGui::PopStyleColor();
|
if (dim) ImGui::PopStyleColor();
|
||||||
if (ImGui::IsItemHovered()) material::Tooltip("%s", TR("console_toggle_text_color"));
|
if (ImGui::IsItemHovered()) material::Tooltip("%s", TR("console_toggle_text_color"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user