mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Internals: Checkbox: Added undocumented mixed/indeterminate/tristate support via ImGuiItemFlags_MixedValue. (#2644)
This commit is contained in:
		| @@ -65,7 +65,7 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i | ||||
|  - widgets: start exposing PushItemFlag() and ImGuiItemFlags | ||||
|  - widgets: alignment options in style (e.g. center Selectable, Right-Align within Button, etc.) #1260 | ||||
|  - widgets: activate by identifier (trigger button, focus given id) | ||||
|  - widgets: a way to represent "mixed" values, so e.g. all values replaced with **, including check-boxes, colors, etc. with support for multi-components widgets (e.g. SliderFloat3, make only "Y" mixed) | ||||
|  - widgets: a way to represent "mixed" values, so e.g. all values replaced with *, including check-boxes, colors, etc. with support for multi-components widgets (e.g. SliderFloat3, make only "Y" mixed) (#2644) | ||||
|  - widgets: selectable: generic BeginSelectable()/EndSelectable() mechanism. | ||||
|  - widgets: selectable: a way to visualize partial/mixed selection (e.g. parent tree node has children with mixed selection) | ||||
|  - widgets: checkbox: checkbox with custom glyph inside frame. | ||||
|   | ||||
| @@ -384,6 +384,7 @@ enum ImGuiItemFlags_ | ||||
|     ImGuiItemFlags_NoNav                    = 1 << 3,  // false | ||||
|     ImGuiItemFlags_NoNavDefaultFocus        = 1 << 4,  // false | ||||
|     ImGuiItemFlags_SelectableDontClosePopup = 1 << 5,  // false    // MenuItem/Selectable() automatically closes current Popup window | ||||
|     ImGuiItemFlags_MixedValue               = 1 << 6,  // false    // [BETA] Represent a mixed/indeterminate value, generally multi-selection where values differ. Currently only supported by Checkbox() (later should support all sorts of widgets) | ||||
|     ImGuiItemFlags_Default_                 = 0 | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -1001,10 +1001,17 @@ bool ImGui::Checkbox(const char* label, bool* v) | ||||
|     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); | ||||
|     if (*v) | ||||
|     ImU32 check_col = GetColorU32(ImGuiCol_CheckMark); | ||||
|     if (window->DC.ItemFlags & ImGuiItemFlags_MixedValue) | ||||
|     { | ||||
|         // Undocumented tristate/mixed/indeterminate checkbox (#2644) | ||||
|         ImVec2 pad(ImMax(1.0f, (float)(int)(square_sz / 3.6f)), ImMax(1.0f, (float)(int)(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, (float)(int)(square_sz / 6.0f)); | ||||
|         RenderCheckMark(check_bb.Min + ImVec2(pad, pad), GetColorU32(ImGuiCol_CheckMark), square_sz - pad*2.0f); | ||||
|         RenderCheckMark(check_bb.Min + ImVec2(pad, pad), check_col, square_sz - pad*2.0f); | ||||
|     } | ||||
|  | ||||
|     if (g.LogEnabled) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user