mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20:51:06 +01:00 
			
		
		
		
	Demo: expose more Combo flags + misc tidying up.
This commit is contained in:
		
							
								
								
									
										30
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -5452,7 +5452,9 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, b | ||||
|     const float backup_border_size = g.Style.ChildBorderSize; | ||||
|     if (!border) | ||||
|         g.Style.ChildBorderSize = 0.0f; | ||||
|     bool ret = Begin(temp_window_name, NULL, flags); | ||||
|  | ||||
|     // Begin into window | ||||
|     const bool ret = Begin(temp_window_name, NULL, flags); | ||||
|     g.Style.ChildBorderSize = backup_border_size; | ||||
|  | ||||
|     ImGuiWindow* child_window = g.CurrentWindow; | ||||
| @@ -5464,7 +5466,7 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, b | ||||
|         parent_window->DC.CursorPos = child_window->Pos; | ||||
|  | ||||
|     // Process navigation-in immediately so NavInit can run on first frame | ||||
|     // Can enter a child if (A) it has navigatable items or (B) it can be scrolled. | ||||
|     // Can enter a child if (A) it has navigable items or (B) it can be scrolled. | ||||
|     const ImGuiID temp_id_for_activation = ImHashStr("##Child", 0, id); | ||||
|     if (g.ActiveId == temp_id_for_activation) | ||||
|         ClearActiveID(); | ||||
| @@ -5481,26 +5483,26 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, b | ||||
| void ImGui::EndChild() | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     ImGuiWindow* window = g.CurrentWindow; | ||||
|     ImGuiWindow* child_window = g.CurrentWindow; | ||||
|  | ||||
|     IM_ASSERT(g.WithinEndChild == false); | ||||
|     IM_ASSERT(window->Flags & ImGuiWindowFlags_ChildWindow);   // Mismatched BeginChild()/EndChild() calls | ||||
|     IM_ASSERT(child_window->Flags & ImGuiWindowFlags_ChildWindow);   // Mismatched BeginChild()/EndChild() calls | ||||
|  | ||||
|     g.WithinEndChild = true; | ||||
|     ImVec2 child_size = window->Size; | ||||
|     ImVec2 child_size = child_window->Size; | ||||
|     End(); | ||||
|     if (window->BeginCount == 1) | ||||
|     if (child_window->BeginCount == 1) | ||||
|     { | ||||
|         ImGuiWindow* parent_window = g.CurrentWindow; | ||||
|         ImRect bb(parent_window->DC.CursorPos, parent_window->DC.CursorPos + child_size); | ||||
|         ItemSize(child_size); | ||||
|         if ((window->DC.NavLayersActiveMask != 0 || window->DC.NavWindowHasScrollY) && !(window->Flags & ImGuiWindowFlags_NavFlattened)) | ||||
|         if ((child_window->DC.NavLayersActiveMask != 0 || child_window->DC.NavWindowHasScrollY) && !(child_window->Flags & ImGuiWindowFlags_NavFlattened)) | ||||
|         { | ||||
|             ItemAdd(bb, window->ChildId); | ||||
|             RenderNavHighlight(bb, window->ChildId); | ||||
|             ItemAdd(bb, child_window->ChildId); | ||||
|             RenderNavHighlight(bb, child_window->ChildId); | ||||
|  | ||||
|             // When browsing a window that has no activable items (scroll only) we keep a highlight on the child (pass g.NavId to trick into always displaying) | ||||
|             if (window->DC.NavLayersActiveMask == 0 && window == g.NavWindow) | ||||
|             if (child_window->DC.NavLayersActiveMask == 0 && child_window == g.NavWindow) | ||||
|                 RenderNavHighlight(ImRect(bb.Min - ImVec2(2, 2), bb.Max + ImVec2(2, 2)), g.NavId, ImGuiNavHighlightFlags_TypeThin); | ||||
|         } | ||||
|         else | ||||
| @@ -5509,10 +5511,10 @@ void ImGui::EndChild() | ||||
|             ItemAdd(bb, 0); | ||||
|  | ||||
|             // But when flattened we directly reach items, adjust active layer mask accordingly | ||||
|             if (window->Flags & ImGuiWindowFlags_NavFlattened) | ||||
|                 parent_window->DC.NavLayersActiveMaskNext |= window->DC.NavLayersActiveMaskNext; | ||||
|             if (child_window->Flags & ImGuiWindowFlags_NavFlattened) | ||||
|                 parent_window->DC.NavLayersActiveMaskNext |= child_window->DC.NavLayersActiveMaskNext; | ||||
|         } | ||||
|         if (g.HoveredWindow == window) | ||||
|         if (g.HoveredWindow == child_window) | ||||
|             g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_HoveredWindow; | ||||
|     } | ||||
|     g.WithinEndChild = false; | ||||
| @@ -6314,7 +6316,6 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|         window->IDStack.push_back(window->ID); | ||||
|  | ||||
|     // Add to stack | ||||
|     // We intentionally set g.CurrentWindow to NULL to prevent usage until when the viewport is set, then will call SetCurrentWindow() | ||||
|     g.CurrentWindow = window; | ||||
|     ImGuiWindowStackData window_stack_data; | ||||
|     window_stack_data.Window = window; | ||||
| @@ -6332,6 +6333,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|     } | ||||
|  | ||||
|     // Add to focus scope stack | ||||
|     // We intentionally set g.CurrentWindow to NULL to prevent usage until when the viewport is set, then will call SetCurrentWindow() | ||||
|     PushFocusScope(window->ID); | ||||
|     window->NavRootFocusScopeId = g.CurrentFocusScopeId; | ||||
|     g.CurrentWindow = NULL; | ||||
|   | ||||
| @@ -1197,6 +1197,14 @@ static void ShowDemoWindowWidgets() | ||||
|         if (ImGui::CheckboxFlags("ImGuiComboFlags_WidthFitPreview", &flags, ImGuiComboFlags_WidthFitPreview)) | ||||
|             flags &= ~ImGuiComboFlags_NoPreview; | ||||
|  | ||||
|         // Override default popup height | ||||
|         if (ImGui::CheckboxFlags("ImGuiComboFlags_HeightSmall", &flags, ImGuiComboFlags_HeightSmall)) | ||||
|             flags &= ~(ImGuiComboFlags_HeightMask_ & ~ImGuiComboFlags_HeightSmall); | ||||
|         if (ImGui::CheckboxFlags("ImGuiComboFlags_HeightRegular", &flags, ImGuiComboFlags_HeightRegular)) | ||||
|             flags &= ~(ImGuiComboFlags_HeightMask_ & ~ImGuiComboFlags_HeightRegular); | ||||
|         if (ImGui::CheckboxFlags("ImGuiComboFlags_HeightLargest", &flags, ImGuiComboFlags_HeightLargest)) | ||||
|             flags &= ~(ImGuiComboFlags_HeightMask_ & ~ImGuiComboFlags_HeightLargest); | ||||
|  | ||||
|         // Using the generic BeginCombo() API, you have full control over how to display the combo contents. | ||||
|         // (your selection data could be an index, a pointer to the object, an id for the object, a flag intrusively | ||||
|         // stored in the object itself, etc.) | ||||
| @@ -1218,6 +1226,10 @@ static void ShowDemoWindowWidgets() | ||||
|             ImGui::EndCombo(); | ||||
|         } | ||||
|  | ||||
|         ImGui::Spacing(); | ||||
|         ImGui::SeparatorText("One-liner variants"); | ||||
|         HelpMarker("Flags above don't apply to this section."); | ||||
|  | ||||
|         // Simplified one-liner Combo() API, using values packed in a single constant string | ||||
|         // This is a convenience for when the selection set is small and known at compile-time. | ||||
|         static int item_current_2 = 0; | ||||
| @@ -6564,7 +6576,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref) | ||||
|                 "Right-click to open edit options menu."); | ||||
|  | ||||
|             ImGui::BeginChild("##colors", ImVec2(0, 0), true, ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar | ImGuiWindowFlags_NavFlattened); | ||||
|             ImGui::PushItemWidth(-160); | ||||
|             ImGui::PushItemWidth(ImGui::GetFontSize() * -12); | ||||
|             for (int i = 0; i < ImGuiCol_COUNT; i++) | ||||
|             { | ||||
|                 const char* name = ImGui::GetStyleColorName(i); | ||||
|   | ||||
| @@ -1254,9 +1254,9 @@ struct IMGUI_API ImGuiStackSizes | ||||
| // Data saved for each window pushed into the stack | ||||
| struct ImGuiWindowStackData | ||||
| { | ||||
|     ImGuiWindow*            Window; | ||||
|     ImGuiLastItemData       ParentLastItemDataBackup; | ||||
|     ImGuiStackSizes         StackSizesOnBegin;      // Store size of various stacks for asserting | ||||
|     ImGuiWindow*        Window; | ||||
|     ImGuiLastItemData   ParentLastItemDataBackup; | ||||
|     ImGuiStackSizes     StackSizesOnBegin;      // Store size of various stacks for asserting | ||||
| }; | ||||
|  | ||||
| struct ImGuiShrinkWidthItem | ||||
|   | ||||
		Reference in New Issue
	
	Block a user