|
@@ -1132,7 +1132,8 @@ bool ImGui::Checkbox(const char* label, bool* v)
|
|
const ImVec2 pos = window->DC.CursorPos;
|
|
const ImVec2 pos = window->DC.CursorPos;
|
|
const ImRect total_bb(pos, pos + ImVec2(square_sz + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), label_size.y + style.FramePadding.y * 2.0f));
|
|
const ImRect total_bb(pos, pos + ImVec2(square_sz + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), label_size.y + style.FramePadding.y * 2.0f));
|
|
ItemSize(total_bb, style.FramePadding.y);
|
|
ItemSize(total_bb, style.FramePadding.y);
|
|
- if (!ItemAdd(total_bb, id))
|
|
|
|
|
|
+ const bool is_visible = ItemAdd(total_bb, id);
|
|
|
|
+ if (!is_visible)
|
|
{
|
|
{
|
|
IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
|
|
IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
|
|
return false;
|
|
return false;
|
|
@@ -1147,27 +1148,29 @@ bool ImGui::Checkbox(const char* label, bool* v)
|
|
}
|
|
}
|
|
|
|
|
|
const ImRect check_bb(pos, pos + ImVec2(square_sz, square_sz));
|
|
const ImRect check_bb(pos, pos + ImVec2(square_sz, square_sz));
|
|
- RenderNavHighlight(total_bb, id);
|
|
|
|
- RenderFrame(check_bb.Min, check_bb.Max, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), true, style.FrameRounding);
|
|
|
|
- ImU32 check_col = GetColorU32(ImGuiCol_CheckMark);
|
|
|
|
- bool mixed_value = (g.LastItemData.InFlags & ImGuiItemFlags_MixedValue) != 0;
|
|
|
|
- if (mixed_value)
|
|
|
|
- {
|
|
|
|
- // Undocumented tristate/mixed/indeterminate checkbox (#2644)
|
|
|
|
- // This may seem awkwardly designed because the aim is to make ImGuiItemFlags_MixedValue supported by all widgets (not just checkbox)
|
|
|
|
- ImVec2 pad(ImMax(1.0f, IM_TRUNC(square_sz / 3.6f)), ImMax(1.0f, IM_TRUNC(square_sz / 3.6f)));
|
|
|
|
- window->DrawList->AddRectFilled(check_bb.Min + pad, check_bb.Max - pad, check_col, style.FrameRounding);
|
|
|
|
- }
|
|
|
|
- else if (*v)
|
|
|
|
|
|
+ const bool mixed_value = (g.LastItemData.InFlags & ImGuiItemFlags_MixedValue) != 0;
|
|
|
|
+ if (is_visible)
|
|
{
|
|
{
|
|
- const float pad = ImMax(1.0f, IM_TRUNC(square_sz / 6.0f));
|
|
|
|
- RenderCheckMark(window->DrawList, check_bb.Min + ImVec2(pad, pad), check_col, square_sz - pad * 2.0f);
|
|
|
|
|
|
+ RenderNavHighlight(total_bb, id);
|
|
|
|
+ RenderFrame(check_bb.Min, check_bb.Max, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), true, style.FrameRounding);
|
|
|
|
+ ImU32 check_col = GetColorU32(ImGuiCol_CheckMark);
|
|
|
|
+ if (mixed_value)
|
|
|
|
+ {
|
|
|
|
+ // Undocumented tristate/mixed/indeterminate checkbox (#2644)
|
|
|
|
+ // This may seem awkwardly designed because the aim is to make ImGuiItemFlags_MixedValue supported by all widgets (not just checkbox)
|
|
|
|
+ ImVec2 pad(ImMax(1.0f, IM_TRUNC(square_sz / 3.6f)), ImMax(1.0f, IM_TRUNC(square_sz / 3.6f)));
|
|
|
|
+ window->DrawList->AddRectFilled(check_bb.Min + pad, check_bb.Max - pad, check_col, style.FrameRounding);
|
|
|
|
+ }
|
|
|
|
+ else if (*v)
|
|
|
|
+ {
|
|
|
|
+ const float pad = ImMax(1.0f, IM_TRUNC(square_sz / 6.0f));
|
|
|
|
+ RenderCheckMark(window->DrawList, check_bb.Min + ImVec2(pad, pad), check_col, square_sz - pad * 2.0f);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
-
|
|
|
|
- ImVec2 label_pos = ImVec2(check_bb.Max.x + style.ItemInnerSpacing.x, check_bb.Min.y + style.FramePadding.y);
|
|
|
|
|
|
+ const ImVec2 label_pos = ImVec2(check_bb.Max.x + style.ItemInnerSpacing.x, check_bb.Min.y + style.FramePadding.y);
|
|
if (g.LogEnabled)
|
|
if (g.LogEnabled)
|
|
LogRenderedText(&label_pos, mixed_value ? "[~]" : *v ? "[x]" : "[ ]");
|
|
LogRenderedText(&label_pos, mixed_value ? "[~]" : *v ? "[x]" : "[ ]");
|
|
- if (label_size.x > 0.0f)
|
|
|
|
|
|
+ if (is_visible && label_size.x > 0.0f)
|
|
RenderText(label_pos, label);
|
|
RenderText(label_pos, label);
|
|
|
|
|
|
IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
|
|
IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
|