mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20:51:06 +01:00 
			
		
		
		
	BeginChild(): Added ImGuiChildFlags_FrameStyle as a replacement for BeginChildFrame(). (#1666, #1496, #1395, #1710, #462, #503, #263)
Effectively allows us to avoid extending BeginChildFrame() api to mimic BeginChild() new parameters.
This commit is contained in:
		| @@ -59,6 +59,11 @@ Breaking changes: | ||||
|       Before:  BeginChild("Name", size, 0, ImGuiWindowFlags_AlwaysUseWindowPadding); | ||||
|       After:   BeginChild("Name", size, ImGuiChildFlags_AlwaysUseWindowPadding, 0); | ||||
|    Kept inline redirection enum (will obsolete later) so existing code will work. | ||||
|  - BeginChildFrame()/EndChildFrame(): removed functions in favor of using BeginChild() with | ||||
|    the ImGuiChildFlags_FrameStyle flag. Kept inline redirection function (will obsolete). | ||||
|    Those functions were merely PushStyle/PopStyle helpers and custom versions are easy to create. | ||||
|    (The removal isn't so much motivated by needing to add the feature in BeginChild(), but by the | ||||
|    necessity to avoid BeginChildFrame() signature mismatching BeginChild() signature and features.) | ||||
|  - Debug Tools: Renamed ShowStackToolWindow() ("Stack Tool") to ShowIDStackToolWindow() ("ID Stack Tool"), | ||||
|    as earlier name was misleading. Kept inline redirection function. (#4631) | ||||
|  - IO: Removed io.MetricsActiveAllocations introduced in 1.63, was displayed in Metrics and unlikely to | ||||
| @@ -89,6 +94,9 @@ Other changes: | ||||
|     child windows from the bottom/right border (toward layout direction). Resized child windows | ||||
|     settings are saved and persistent in .ini file. (#1710) | ||||
|   - BeginChild(): Added ImGuiChildFlags_Border as a replacement for 'bool border = true' parameter. | ||||
|   - BeginChild(): Added ImGuiChildFlags_FrameStyle as a replacement for BeginChildFrame(), | ||||
|     use it to make child window use FrameBg, FrameRounding, FrameBorderSize, FramePadding | ||||
|     instead of ChildBg, ChildRounding, ChildBorderSize, WindowPadding. | ||||
|   - BeginChild(): Internal name used by child windows now omits the hash/id if the child | ||||
|     window is submitted in root of id stack of parent window. | ||||
|     So "Parent/Child_XXXXXXX" becomes "Parent/Child" when in root of id stack. | ||||
|   | ||||
							
								
								
									
										43
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -424,6 +424,8 @@ CODE | ||||
|  When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files. | ||||
|  You can read releases logs https://github.com/ocornut/imgui/releases for more details. | ||||
|  | ||||
|  - 2023/11/07 (1.90.0) - removed BeginChildFrame()/EndChildFrame() in favor of using BeginChild() with the ImGuiChildFlags_FrameStyle flag. kept inline redirection function (will obsolete). | ||||
|                          those functions were merely PushStyle/PopStyle helpers, the removal isn't so much motivated by needing to add the feature in BeginChild(), but by the necessity to avoid BeginChildFrame() signature mismatching BeginChild() signature and features. | ||||
|  - 2023/11/02 (1.90.0) - BeginChild: upgraded 'bool border = true' parameter to 'ImGuiChildFlags flags' type, added ImGuiChildFlags_Border equivalent. As with our prior "bool-to-flags" API updates, the ImGuiChildFlags_Border value is guaranteed to be == true forever to ensure a smoother transition, meaning all existing calls will still work. | ||||
|                            - old: BeginChild("Name", size, true) | ||||
|                            - new: BeginChild("Name", size, ImGuiChildFlags_Border) | ||||
| @@ -5442,7 +5444,7 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, I | ||||
|     IM_ASSERT(id != 0); | ||||
|  | ||||
|     // Sanity check as it is likely that some user will accidentally pass ImGuiWindowFlags into the ImGuiChildFlags argument. | ||||
|     const ImGuiChildFlags ImGuiChildFlags_SupportedMask_ = ImGuiChildFlags_Border | ImGuiChildFlags_AlwaysUseWindowPadding | ImGuiChildFlags_ResizeX | ImGuiChildFlags_ResizeY; | ||||
|     const ImGuiChildFlags ImGuiChildFlags_SupportedMask_ = ImGuiChildFlags_Border | ImGuiChildFlags_AlwaysUseWindowPadding | ImGuiChildFlags_ResizeX | ImGuiChildFlags_ResizeY | ImGuiChildFlags_FrameStyle; | ||||
|     IM_UNUSED(ImGuiChildFlags_SupportedMask_); | ||||
|     IM_ASSERT((child_flags & ~ImGuiChildFlags_SupportedMask_) == 0 && "Illegal ImGuiChildFlags value. Did you pass ImGuiWindowFlags values instead of ImGuiChildFlags?"); | ||||
|     if (window_flags & ImGuiWindowFlags_AlwaysAutoResize) | ||||
| @@ -5458,6 +5460,17 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, I | ||||
|     if ((child_flags & (ImGuiChildFlags_ResizeX | ImGuiChildFlags_ResizeY)) == 0) | ||||
|         window_flags |= ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings; | ||||
|  | ||||
|     // Special framed style | ||||
|     if (child_flags & ImGuiChildFlags_FrameStyle) | ||||
|     { | ||||
|         PushStyleColor(ImGuiCol_ChildBg, g.Style.Colors[ImGuiCol_FrameBg]); | ||||
|         PushStyleVar(ImGuiStyleVar_ChildRounding, g.Style.FrameRounding); | ||||
|         PushStyleVar(ImGuiStyleVar_ChildBorderSize, g.Style.FrameBorderSize); | ||||
|         PushStyleVar(ImGuiStyleVar_WindowPadding, g.Style.FramePadding); | ||||
|         child_flags |= ImGuiChildFlags_Border | ImGuiChildFlags_AlwaysUseWindowPadding; | ||||
|         window_flags |= ImGuiWindowFlags_NoMove; | ||||
|     } | ||||
|  | ||||
|     // Forward child flags | ||||
|     g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasChildFlags; | ||||
|     g.NextWindowData.ChildFlags = child_flags; | ||||
| @@ -5482,13 +5495,21 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, I | ||||
|     else | ||||
|         ImFormatStringToTempBuffer(&temp_window_name, NULL, "%s/%08X", parent_window->Name, id); | ||||
|  | ||||
|     // Set style | ||||
|     const float backup_border_size = g.Style.ChildBorderSize; | ||||
|     if ((child_flags & ImGuiChildFlags_Border) == 0) | ||||
|         g.Style.ChildBorderSize = 0.0f; | ||||
|  | ||||
|     // Begin into window | ||||
|     const bool ret = Begin(temp_window_name, NULL, window_flags); | ||||
|  | ||||
|     // Restore style | ||||
|     g.Style.ChildBorderSize = backup_border_size; | ||||
|     if (child_flags & ImGuiChildFlags_FrameStyle) | ||||
|     { | ||||
|         PopStyleVar(3); | ||||
|         PopStyleColor(); | ||||
|     } | ||||
|  | ||||
|     ImGuiWindow* child_window = g.CurrentWindow; | ||||
|     child_window->ChildId = id; | ||||
| @@ -5554,26 +5575,6 @@ void ImGui::EndChild() | ||||
|     g.LogLinePosY = -FLT_MAX; // To enforce a carriage return | ||||
| } | ||||
|  | ||||
| // Helper to create a child window / scrolling region that looks like a normal widget frame. | ||||
| bool ImGui::BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     const ImGuiStyle& style = g.Style; | ||||
|     PushStyleColor(ImGuiCol_ChildBg, style.Colors[ImGuiCol_FrameBg]); | ||||
|     PushStyleVar(ImGuiStyleVar_ChildRounding, style.FrameRounding); | ||||
|     PushStyleVar(ImGuiStyleVar_ChildBorderSize, style.FrameBorderSize); | ||||
|     PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding); | ||||
|     bool ret = BeginChild(id, size, ImGuiChildFlags_Border | ImGuiChildFlags_AlwaysUseWindowPadding, ImGuiWindowFlags_NoMove | extra_flags); | ||||
|     PopStyleVar(3); | ||||
|     PopStyleColor(); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| void ImGui::EndChildFrame() | ||||
| { | ||||
|     EndChild(); | ||||
| } | ||||
|  | ||||
| static void SetWindowConditionAllowFlags(ImGuiWindow* window, ImGuiCond flags, bool enabled) | ||||
| { | ||||
|     window->SetWindowPosAllowFlags       = enabled ? (window->SetWindowPosAllowFlags       | flags) : (window->SetWindowPosAllowFlags       & ~flags); | ||||
|   | ||||
							
								
								
									
										7
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -24,7 +24,7 @@ | ||||
| // Library Version | ||||
| // (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345') | ||||
| #define IMGUI_VERSION       "1.90 WIP" | ||||
| #define IMGUI_VERSION_NUM   18997 | ||||
| #define IMGUI_VERSION_NUM   18998 | ||||
| #define IMGUI_HAS_TABLE | ||||
|  | ||||
| /* | ||||
| @@ -894,8 +894,6 @@ namespace ImGui | ||||
|     IMGUI_API const char*   GetStyleColorName(ImGuiCol idx);                                    // get a string corresponding to the enum value (for display, saving, etc.). | ||||
|     IMGUI_API void          SetStateStorage(ImGuiStorage* storage);                             // replace current window storage with our own (if you want to manipulate it yourself, typically clear subsection of it) | ||||
|     IMGUI_API ImGuiStorage* GetStateStorage(); | ||||
|     IMGUI_API bool          BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame | ||||
|     IMGUI_API void          EndChildFrame();                                                    // always call EndChildFrame() regardless of BeginChildFrame() return values (which indicates a collapsed/clipped window) | ||||
|  | ||||
|     // Text Utilities | ||||
|     IMGUI_API ImVec2        CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); | ||||
| @@ -1024,6 +1022,7 @@ enum ImGuiChildFlags_ | ||||
|     ImGuiChildFlags_AlwaysUseWindowPadding  = 1 << 1,   // Pad with style.WindowPadding even if no border are drawn (no padding by default for non-bordered child windows because it makes more sense) | ||||
|     ImGuiChildFlags_ResizeX                 = 1 << 2,   // Allow resize from right border (layout direction). Enable .ini saving (unless ImGuiWindowFlags_NoSavedSettings passed to window flags) | ||||
|     ImGuiChildFlags_ResizeY                 = 1 << 3,   // Allow resize from bottom border (layout direction). " | ||||
|     ImGuiChildFlags_FrameStyle              = 1 << 7,   // Style the child window like a framed item: use FrameBg, FrameRounding, FrameBorderSize, FramePadding instead of ChildBg, ChildRounding, ChildBorderSize, WindowPadding. | ||||
| }; | ||||
|  | ||||
| // Flags for ImGui::InputText() | ||||
| @@ -3130,6 +3129,8 @@ namespace ImGui | ||||
| namespace ImGui | ||||
| { | ||||
|     // OBSOLETED in 1.90.0 (from September 2023) | ||||
|     static inline bool  BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags window_flags = 0)                 { return BeginChild(id, size, ImGuiChildFlags_FrameStyle, window_flags); } | ||||
|     static inline void  EndChildFrame()                                                                                    { EndChild(); } | ||||
|     static inline bool  BeginChild(const char* str_id, const ImVec2& size_arg, bool border, ImGuiWindowFlags window_flags) { return BeginChild(str_id, size_arg, border ? ImGuiChildFlags_Border : ImGuiChildFlags_None, window_flags); } | ||||
|     static inline bool  BeginChild(ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags window_flags)         { return BeginChild(id, size_arg, border ? ImGuiChildFlags_Border : ImGuiChildFlags_None, window_flags);     } | ||||
|     static inline void  ShowStackToolWindow(bool* p_open = NULL)                            { ShowIDStackToolWindow(p_open); } | ||||
|   | ||||
| @@ -2796,6 +2796,10 @@ static void ShowDemoWindowLayout() | ||||
|             ImGui::CheckboxFlags("ImGuiChildFlags_AlwaysUseWindowPadding", &child_flags, ImGuiChildFlags_AlwaysUseWindowPadding); | ||||
|             ImGui::CheckboxFlags("ImGuiChildFlags_ResizeX", &child_flags, ImGuiChildFlags_ResizeX); | ||||
|             ImGui::CheckboxFlags("ImGuiChildFlags_ResizeY", &child_flags, ImGuiChildFlags_ResizeY); | ||||
|             ImGui::CheckboxFlags("ImGuiChildFlags_FrameStyle", &child_flags, ImGuiChildFlags_FrameStyle); | ||||
|             ImGui::SameLine(); HelpMarker("Style the child window like a framed item: use FrameBg, FrameRounding, FrameBorderSize, FramePadding instead of ChildBg, ChildRounding, ChildBorderSize, WindowPadding."); | ||||
|             if (child_flags & ImGuiChildFlags_FrameStyle) | ||||
|                 override_bg_color = false; | ||||
|  | ||||
|             ImGui::SetCursorPosX(ImGui::GetCursorPosX() + (float)offset_x); | ||||
|             if (override_bg_color) | ||||
| @@ -6273,7 +6277,7 @@ void ImGui::ShowAboutWindow(bool* p_open) | ||||
|  | ||||
|         bool copy_to_clipboard = ImGui::Button("Copy to clipboard"); | ||||
|         ImVec2 child_size = ImVec2(0, ImGui::GetTextLineHeightWithSpacing() * 18); | ||||
|         ImGui::BeginChildFrame(ImGui::GetID("cfg_infos"), child_size, ImGuiWindowFlags_NoMove); | ||||
|         ImGui::BeginChild(ImGui::GetID("cfg_infos"), child_size, ImGuiChildFlags_FrameStyle); | ||||
|         if (copy_to_clipboard) | ||||
|         { | ||||
|             ImGui::LogToClipboard(); | ||||
| @@ -6389,7 +6393,7 @@ void ImGui::ShowAboutWindow(bool* p_open) | ||||
|             ImGui::LogText("\n```\n"); | ||||
|             ImGui::LogFinish(); | ||||
|         } | ||||
|         ImGui::EndChildFrame(); | ||||
|         ImGui::EndChild(); | ||||
|     } | ||||
|     ImGui::End(); | ||||
| } | ||||
| @@ -8366,13 +8370,13 @@ void ShowExampleAppDocuments(bool* p_open) | ||||
|             { | ||||
|                 ImGui::Text("Save change to the following items?"); | ||||
|                 float item_height = ImGui::GetTextLineHeightWithSpacing(); | ||||
|                 if (ImGui::BeginChildFrame(ImGui::GetID("frame"), ImVec2(-FLT_MIN, 6.25f * item_height))) | ||||
|                 if (ImGui::BeginChild(ImGui::GetID("frame"), ImVec2(-FLT_MIN, 6.25f * item_height), ImGuiChildFlags_FrameStyle)) | ||||
|                 { | ||||
|                     for (int n = 0; n < close_queue.Size; n++) | ||||
|                         if (close_queue[n]->Dirty) | ||||
|                             ImGui::Text("%s", close_queue[n]->Name); | ||||
|                 } | ||||
|                 ImGui::EndChildFrame(); | ||||
|                 ImGui::EndChild(); | ||||
|  | ||||
|                 ImVec2 button_size(ImGui::GetFontSize() * 7.0f, 0.0f); | ||||
|                 if (ImGui::Button("Yes", button_size)) | ||||
|   | ||||
| @@ -6901,7 +6901,7 @@ bool ImGui::BeginListBox(const char* label, const ImVec2& size_arg) | ||||
|         window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, label_pos + label_size); | ||||
|     } | ||||
|  | ||||
|     BeginChildFrame(id, frame_bb.GetSize()); | ||||
|     BeginChild(id, frame_bb.GetSize(), ImGuiChildFlags_FrameStyle); | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| @@ -6912,7 +6912,7 @@ void ImGui::EndListBox() | ||||
|     IM_ASSERT((window->Flags & ImGuiWindowFlags_ChildWindow) && "Mismatched BeginListBox/EndListBox calls. Did you test the return value of BeginListBox?"); | ||||
|     IM_UNUSED(window); | ||||
|  | ||||
|     EndChildFrame(); | ||||
|     EndChild(); | ||||
|     EndGroup(); // This is only required to be able to do IsItemXXX query on the whole ListBox including label | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user