mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 21:21:06 +01:00 
			
		
		
		
	Internals: Popups: Renamed CurrentPopupStack to BeginPopupStack which is much less ambiguous.
This commit is contained in:
		
							
								
								
									
										38
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -3299,7 +3299,7 @@ void ImGui::NewFrame() | ||||
|     // No window should be open at the beginning of the frame. | ||||
|     // But in order to allow the user to call NewFrame() multiple times without calling Render(), we are doing an explicit clear. | ||||
|     g.CurrentWindowStack.resize(0); | ||||
|     g.CurrentPopupStack.resize(0); | ||||
|     g.BeginPopupStack.resize(0); | ||||
|     ClosePopupsOverWindow(g.NavWindow); | ||||
|  | ||||
|     // Create implicit/fallback window - which we will only render it if the user has added something to it. | ||||
| @@ -3373,7 +3373,7 @@ void ImGui::Shutdown(ImGuiContext* context) | ||||
|     g.StyleModifiers.clear(); | ||||
|     g.FontStack.clear(); | ||||
|     g.OpenPopupStack.clear(); | ||||
|     g.CurrentPopupStack.clear(); | ||||
|     g.BeginPopupStack.clear(); | ||||
|     g.DrawDataBuilder.ClearFreeMemory(); | ||||
|     g.OverlayDrawList.ClearFreeMemory(); | ||||
|     g.PrivateClipboard.clear(); | ||||
| @@ -3942,8 +3942,8 @@ ImVec2 ImGui::GetMousePos() | ||||
| ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup() | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     if (g.CurrentPopupStack.Size > 0) | ||||
|         return g.OpenPopupStack[g.CurrentPopupStack.Size-1].OpenMousePos; | ||||
|     if (g.BeginPopupStack.Size > 0) | ||||
|         return g.OpenPopupStack[g.BeginPopupStack.Size-1].OpenMousePos; | ||||
|     return g.IO.MousePos; | ||||
| } | ||||
|  | ||||
| @@ -4224,7 +4224,7 @@ static void CheckStacksSize(ImGuiWindow* window, bool write) | ||||
|     short* p_backup = &window->DC.StackSizesBackup[0]; | ||||
|     { int current = window->IDStack.Size;       if (write) *p_backup = (short)current; else IM_ASSERT(*p_backup == current && "PushID/PopID or TreeNode/TreePop Mismatch!");   p_backup++; }    // Too few or too many PopID()/TreePop() | ||||
|     { int current = window->DC.GroupStack.Size; if (write) *p_backup = (short)current; else IM_ASSERT(*p_backup == current && "BeginGroup/EndGroup Mismatch!");                p_backup++; }    // Too few or too many EndGroup() | ||||
|     { int current = g.CurrentPopupStack.Size;   if (write) *p_backup = (short)current; else IM_ASSERT(*p_backup == current && "BeginMenu/EndMenu or BeginPopup/EndPopup Mismatch"); p_backup++;}// Too few or too many EndMenu()/EndPopup() | ||||
|     { int current = g.BeginPopupStack.Size;     if (write) *p_backup = (short)current; else IM_ASSERT(*p_backup == current && "BeginMenu/EndMenu or BeginPopup/EndPopup Mismatch"); p_backup++;}// Too few or too many EndMenu()/EndPopup() | ||||
|     // For color, style and font stacks there is an incentive to use Push/Begin/Pop/.../End patterns, so we relax our checks a little to allow them. | ||||
|     { int current = g.ColorModifiers.Size;      if (write) *p_backup = (short)current; else IM_ASSERT(*p_backup >= current && "PushStyleColor/PopStyleColor Mismatch!");       p_backup++; }    // Too few or too many PopStyleColor() | ||||
|     { int current = g.StyleModifiers.Size;      if (write) *p_backup = (short)current; else IM_ASSERT(*p_backup >= current && "PushStyleVar/PopStyleVar Mismatch!");           p_backup++; }    // Too few or too many PopStyleVar() | ||||
| @@ -4638,7 +4638,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|     const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFramesForResize > 0); | ||||
|     if (flags & ImGuiWindowFlags_Popup) | ||||
|     { | ||||
|         ImGuiPopupRef& popup_ref = g.OpenPopupStack[g.CurrentPopupStack.Size]; | ||||
|         ImGuiPopupRef& popup_ref = g.OpenPopupStack[g.BeginPopupStack.Size]; | ||||
|         window_just_activated_by_user |= (window->PopupId != popup_ref.PopupId); // We recycle popups so treat window as activated if popup id changed | ||||
|         window_just_activated_by_user |= (window != popup_ref.Window); | ||||
|     } | ||||
| @@ -4652,9 +4652,9 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|     CheckStacksSize(window, true); | ||||
|     if (flags & ImGuiWindowFlags_Popup) | ||||
|     { | ||||
|         ImGuiPopupRef& popup_ref = g.OpenPopupStack[g.CurrentPopupStack.Size]; | ||||
|         ImGuiPopupRef& popup_ref = g.OpenPopupStack[g.BeginPopupStack.Size]; | ||||
|         popup_ref.Window = window; | ||||
|         g.CurrentPopupStack.push_back(popup_ref); | ||||
|         g.BeginPopupStack.push_back(popup_ref); | ||||
|         window->PopupId = popup_ref.PopupId; | ||||
|     } | ||||
|  | ||||
| @@ -4829,7 +4829,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|         { | ||||
|             window->AutoPosLastDirection = ImGuiDir_None; | ||||
|             if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api) | ||||
|                 window->Pos = g.CurrentPopupStack.back().OpenPopupPos; | ||||
|                 window->Pos = g.BeginPopupStack.back().OpenPopupPos; | ||||
|         } | ||||
|  | ||||
|         // Position child window | ||||
| @@ -5232,7 +5232,7 @@ void ImGui::End() | ||||
|     // Pop from window stack | ||||
|     g.CurrentWindowStack.pop_back(); | ||||
|     if (window->Flags & ImGuiWindowFlags_Popup) | ||||
|         g.CurrentPopupStack.pop_back(); | ||||
|         g.BeginPopupStack.pop_back(); | ||||
|     CheckStacksSize(window, false); | ||||
|     SetCurrentWindow(g.CurrentWindowStack.empty() ? NULL : g.CurrentWindowStack.back()); | ||||
| } | ||||
| @@ -6428,13 +6428,13 @@ void ImGui::SetTooltip(const char* fmt, ...) | ||||
| bool ImGui::IsPopupOpen(ImGuiID id) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     return g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].PopupId == id; | ||||
|     return g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].PopupId == id; | ||||
| } | ||||
|  | ||||
| bool ImGui::IsPopupOpen(const char* str_id) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     return g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].PopupId == g.CurrentWindow->GetID(str_id); | ||||
|     return g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].PopupId == g.CurrentWindow->GetID(str_id); | ||||
| } | ||||
|  | ||||
| ImGuiWindow* ImGui::GetFrontMostPopupModal() | ||||
| @@ -6461,7 +6461,7 @@ void ImGui::OpenPopupEx(ImGuiID id) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     ImGuiWindow* parent_window = g.CurrentWindow; | ||||
|     int current_stack_size = g.CurrentPopupStack.Size; | ||||
|     int current_stack_size = g.BeginPopupStack.Size; | ||||
|     ImGuiPopupRef popup_ref; // Tagged as new ref as Window will be set back to NULL if we write this into OpenPopupStack. | ||||
|     popup_ref.PopupId = id; | ||||
|     popup_ref.Window = NULL; | ||||
| @@ -6565,8 +6565,8 @@ void ImGui::ClosePopupToLevel(int remaining) | ||||
| void ImGui::CloseCurrentPopup() | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     int popup_idx = g.CurrentPopupStack.Size - 1; | ||||
|     if (popup_idx < 0 || popup_idx >= g.OpenPopupStack.Size || g.CurrentPopupStack[popup_idx].PopupId != g.OpenPopupStack[popup_idx].PopupId) | ||||
|     int popup_idx = g.BeginPopupStack.Size - 1; | ||||
|     if (popup_idx < 0 || popup_idx >= g.OpenPopupStack.Size || g.BeginPopupStack[popup_idx].PopupId != g.OpenPopupStack[popup_idx].PopupId) | ||||
|         return; | ||||
|     while (popup_idx > 0 && g.OpenPopupStack[popup_idx].Window && (g.OpenPopupStack[popup_idx].Window->Flags & ImGuiWindowFlags_ChildMenu)) | ||||
|         popup_idx--; | ||||
| @@ -6584,7 +6584,7 @@ bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags) | ||||
|  | ||||
|     char name[20]; | ||||
|     if (extra_flags & ImGuiWindowFlags_ChildMenu) | ||||
|         ImFormatString(name, IM_ARRAYSIZE(name), "##Menu_%02d", g.CurrentPopupStack.Size);    // Recycle windows based on depth | ||||
|         ImFormatString(name, IM_ARRAYSIZE(name), "##Menu_%02d", g.BeginPopupStack.Size); // Recycle windows based on depth | ||||
|     else | ||||
|         ImFormatString(name, IM_ARRAYSIZE(name), "##Popup_%08x", id); // Not recycling, so we can close/open during the same frame | ||||
|  | ||||
| @@ -6598,7 +6598,7 @@ bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags) | ||||
| bool ImGui::BeginPopup(const char* str_id, ImGuiWindowFlags flags) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     if (g.OpenPopupStack.Size <= g.CurrentPopupStack.Size) // Early out for performance | ||||
|     if (g.OpenPopupStack.Size <= g.BeginPopupStack.Size) // Early out for performance | ||||
|     { | ||||
|         g.NextWindowData.Clear(); // We behave like Begin() and need to consume those values | ||||
|         return false; | ||||
| @@ -6631,7 +6631,7 @@ bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags fla | ||||
|     { | ||||
|         EndPopup(); | ||||
|         if (is_open) | ||||
|             ClosePopupToLevel(g.CurrentPopupStack.Size); | ||||
|             ClosePopupToLevel(g.BeginPopupStack.Size); | ||||
|         return false; | ||||
|     } | ||||
|     return is_open; | ||||
| @@ -6641,7 +6641,7 @@ void ImGui::EndPopup() | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; (void)g; | ||||
|     IM_ASSERT(g.CurrentWindow->Flags & ImGuiWindowFlags_Popup);  // Mismatched BeginPopup()/EndPopup() calls | ||||
|     IM_ASSERT(g.CurrentPopupStack.Size > 0); | ||||
|     IM_ASSERT(g.BeginPopupStack.Size > 0); | ||||
|  | ||||
|     // Make all menus and popups wrap around for now, may need to expose that policy. | ||||
|     NavMoveRequestTryWrapping(g.CurrentWindow, ImGuiNavMoveFlags_LoopY); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user