mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Internals: Renamed the ImGuiWindow HiddenFrameXXX fields to decorrelate them from resizing behavior, as those values are set by other logic.
This commit is contained in:
		
							
								
								
									
										46
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -2533,7 +2533,7 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name) | ||||
|     AutoFitOnlyGrows = false; | ||||
|     AutoFitChildAxises = 0x00; | ||||
|     AutoPosLastDirection = ImGuiDir_None; | ||||
|     HiddenFramesRegular = HiddenFramesForResize = 0; | ||||
|     HiddenFramesCanSkipItems = HiddenFramesCannotSkipItems = 0; | ||||
|     SetWindowPosAllowFlags = SetWindowSizeAllowFlags = SetWindowCollapsedAllowFlags = ImGuiCond_Always | ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing; | ||||
|     SetWindowPosVal = SetWindowPosPivot = ImVec2(FLT_MAX, FLT_MAX); | ||||
|  | ||||
| @@ -4617,7 +4617,7 @@ static ImVec2 CalcSizeContents(ImGuiWindow* window) | ||||
|     if (window->Collapsed) | ||||
|         if (window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0) | ||||
|             return window->SizeContents; | ||||
|     if (window->Hidden && window->HiddenFramesForResize == 0 && window->HiddenFramesRegular > 0) | ||||
|     if (window->Hidden && window->HiddenFramesCannotSkipItems == 0 && window->HiddenFramesCanSkipItems > 0) | ||||
|         return window->SizeContents; | ||||
|  | ||||
|     ImVec2 sz; | ||||
| @@ -4962,7 +4962,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|  | ||||
|     // Update the Appearing flag | ||||
|     bool window_just_activated_by_user = (window->LastFrameActive < current_frame - 1);   // Not using !WasActive because the implicit "Debug" window would always toggle off->on | ||||
|     const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFramesForResize > 0); | ||||
|     const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFramesCannotSkipItems > 0); | ||||
|     if (flags & ImGuiWindowFlags_Popup) | ||||
|     { | ||||
|         ImGuiPopupRef& popup_ref = g.OpenPopupStack[g.BeginPopupStack.Size]; | ||||
| @@ -5062,20 +5062,20 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|  | ||||
|         // Update contents size from last frame for auto-fitting (or use explicit size) | ||||
|         window->SizeContents = CalcSizeContents(window); | ||||
|         if (window->HiddenFramesRegular > 0) | ||||
|             window->HiddenFramesRegular--; | ||||
|         if (window->HiddenFramesForResize > 0) | ||||
|             window->HiddenFramesForResize--; | ||||
|         if (window->HiddenFramesCanSkipItems > 0) | ||||
|             window->HiddenFramesCanSkipItems--; | ||||
|         if (window->HiddenFramesCannotSkipItems > 0) | ||||
|             window->HiddenFramesCannotSkipItems--; | ||||
|  | ||||
|         // Hide new windows for one frame until they calculate their size | ||||
|         if (window_just_created && (!window_size_x_set_by_api || !window_size_y_set_by_api)) | ||||
|             window->HiddenFramesForResize = 1; | ||||
|             window->HiddenFramesCannotSkipItems = 1; | ||||
|  | ||||
|         // Hide popup/tooltip window when re-opening while we measure size (because we recycle the windows) | ||||
|         // We reset Size/SizeContents for reappearing popups/tooltips early in this function, so further code won't be tempted to use the old size. | ||||
|         if (window_just_activated_by_user && (flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) != 0) | ||||
|         { | ||||
|             window->HiddenFramesForResize = 1; | ||||
|             window->HiddenFramesCannotSkipItems = 1; | ||||
|             if (flags & ImGuiWindowFlags_AlwaysAutoResize) | ||||
|             { | ||||
|                 if (!window_size_x_set_by_api) | ||||
| @@ -5181,7 +5181,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|                 window->Pos = parent_window->DC.CursorPos; | ||||
|         } | ||||
|  | ||||
|         const bool window_pos_with_pivot = (window->SetWindowPosVal.x != FLT_MAX && window->HiddenFramesForResize == 0); | ||||
|         const bool window_pos_with_pivot = (window->SetWindowPosVal.x != FLT_MAX && window->HiddenFramesCannotSkipItems == 0); | ||||
|         if (window_pos_with_pivot) | ||||
|             SetWindowPos(window, ImMax(style.DisplaySafeAreaPadding, window->SetWindowPosVal - window->SizeFull * window->SetWindowPosPivot), 0); // Position given a pivot (e.g. for centering) | ||||
|         else if ((flags & ImGuiWindowFlags_ChildMenu) != 0) | ||||
| @@ -5250,7 +5250,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|             PushClipRect(viewport_rect.Min, viewport_rect.Max, true); | ||||
|  | ||||
|         // Draw modal window background (darkens what is behind them, all viewports) | ||||
|         const bool dim_bg_for_modal = (flags & ImGuiWindowFlags_Modal) && window == GetFrontMostPopupModal() && window->HiddenFramesForResize <= 0; | ||||
|         const bool dim_bg_for_modal = (flags & ImGuiWindowFlags_Modal) && window == GetFrontMostPopupModal() && window->HiddenFramesCannotSkipItems <= 0; | ||||
|         const bool dim_bg_for_window_list = g.NavWindowingTargetAnim && (window == g.NavWindowingTargetAnim->RootWindow); | ||||
|         if (dim_bg_for_modal || dim_bg_for_window_list) | ||||
|         { | ||||
| @@ -5516,24 +5516,28 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|         IM_ASSERT((flags & ImGuiWindowFlags_NoTitleBar) != 0); | ||||
|         if (!(flags & ImGuiWindowFlags_AlwaysAutoResize) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0) | ||||
|             if (window->OuterRectClipped.Min.x >= window->OuterRectClipped.Max.x || window->OuterRectClipped.Min.y >= window->OuterRectClipped.Max.y) | ||||
|                 window->HiddenFramesRegular = 1; | ||||
|                 window->HiddenFramesCanSkipItems = 1; | ||||
|  | ||||
|         // Completely hide along with parent or if parent is collapsed | ||||
|         if (parent_window && (parent_window->Collapsed || parent_window->Hidden)) | ||||
|             window->HiddenFramesRegular = 1; | ||||
|             window->HiddenFramesCanSkipItems = 1; | ||||
|     } | ||||
|  | ||||
|     // Don't render if style alpha is 0.0 at the time of Begin(). This is arbitrary and inconsistent but has been there for a long while (may remove at some point) | ||||
|     if (style.Alpha <= 0.0f) | ||||
|         window->HiddenFramesRegular = 1; | ||||
|         window->HiddenFramesCanSkipItems = 1; | ||||
|  | ||||
|     // Update the Hidden flag | ||||
|     window->Hidden = (window->HiddenFramesRegular > 0) || (window->HiddenFramesForResize > 0); | ||||
|     window->Hidden = (window->HiddenFramesCanSkipItems > 0) || (window->HiddenFramesCannotSkipItems > 0); | ||||
|  | ||||
|     // Return false if we don't intend to display anything to allow user to perform an early out optimization | ||||
|     window->SkipItems = (window->Collapsed || !window->Active || window->Hidden) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0 && window->HiddenFramesForResize <= 0; | ||||
|     // Update the SkipItems flag, used to early out of all items functions (no layout required) | ||||
|     bool skip_items = false; | ||||
|     if (window->Collapsed || !window->Active || window->Hidden) | ||||
|         if (window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0 && window->HiddenFramesCannotSkipItems <= 0) | ||||
|             skip_items = true; | ||||
|     window->SkipItems = skip_items; | ||||
|  | ||||
|     return !window->SkipItems; | ||||
|     return !skip_items; | ||||
| } | ||||
|  | ||||
| // Old Begin() API with 5 parameters, avoid calling this version directly! Use SetNextWindowSize()/SetNextWindowBgAlpha() + Begin() instead. | ||||
| @@ -6740,7 +6744,7 @@ void ImGui::BeginTooltipEx(ImGuiWindowFlags extra_flags, bool override_previous_ | ||||
|             { | ||||
|                 // Hide previous tooltip from being displayed. We can't easily "reset" the content of a window so we create a new one. | ||||
|                 window->Hidden = true; | ||||
|                 window->HiddenFramesRegular = 1; | ||||
|                 window->HiddenFramesCanSkipItems = 1; | ||||
|                 ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", ++g.TooltipOverrideCount); | ||||
|             } | ||||
|     ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip|ImGuiWindowFlags_NoInputs|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize; | ||||
| @@ -8649,7 +8653,7 @@ bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags) | ||||
|             { | ||||
|                 ImGuiWindow* tooltip_window = g.CurrentWindow; | ||||
|                 tooltip_window->SkipItems = true; | ||||
|                 tooltip_window->HiddenFramesRegular = 1; | ||||
|                 tooltip_window->HiddenFramesCanSkipItems = 1; | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @@ -9506,7 +9510,7 @@ void ImGui::ShowMetricsWindow(bool* p_open) | ||||
|                 (flags & ImGuiWindowFlags_NoMouseInputs)? "NoMouseInputs":"", (flags & ImGuiWindowFlags_NoNavInputs) ? "NoNavInputs" : "", (flags & ImGuiWindowFlags_AlwaysAutoResize) ? "AlwaysAutoResize" : ""); | ||||
|             ImGui::BulletText("Scroll: (%.2f/%.2f,%.2f/%.2f)", window->Scroll.x, GetWindowScrollMaxX(window), window->Scroll.y, GetWindowScrollMaxY(window)); | ||||
|             ImGui::BulletText("Active: %d/%d, WriteAccessed: %d, BeginOrderWithinContext: %d", window->Active, window->WasActive, window->WriteAccessed, (window->Active || window->WasActive) ? window->BeginOrderWithinContext : -1); | ||||
|             ImGui::BulletText("Appearing: %d, Hidden: %d (Reg %d Resize %d), SkipItems: %d", window->Appearing, window->Hidden, window->HiddenFramesRegular, window->HiddenFramesForResize, window->SkipItems); | ||||
|             ImGui::BulletText("Appearing: %d, Hidden: %d (CanSkip %d Cannot %d), SkipItems: %d", window->Appearing, window->Hidden, window->HiddenFramesCanSkipItems, window->HiddenFramesCannotSkipItems, window->SkipItems); | ||||
|             ImGui::BulletText("NavLastIds: 0x%08X,0x%08X, NavLayerActiveMask: %X", window->NavLastIds[0], window->NavLastIds[1], window->DC.NavLayerActiveMask); | ||||
|             ImGui::BulletText("NavLastChildNavWindow: %s", window->NavLastChildNavWindow ? window->NavLastChildNavWindow->Name : "NULL"); | ||||
|             if (!window->NavRectRel[0].IsInverted()) | ||||
|   | ||||
| @@ -1228,8 +1228,8 @@ struct IMGUI_API ImGuiWindow | ||||
|     bool                    AutoFitOnlyGrows; | ||||
|     int                     AutoFitChildAxises; | ||||
|     ImGuiDir                AutoPosLastDirection; | ||||
|     int                     HiddenFramesRegular;                // Hide the window for N frames | ||||
|     int                     HiddenFramesForResize;              // Hide the window for N frames while allowing items to be submitted so we can measure their size | ||||
|     int                     HiddenFramesCanSkipItems;           // Hide the window for N frames | ||||
|     int                     HiddenFramesCannotSkipItems;        // Hide the window for N frames while allowing items to be submitted so we can measure their size | ||||
|     ImGuiCond               SetWindowPosAllowFlags;             // store acceptable condition flags for SetNextWindowPos() use. | ||||
|     ImGuiCond               SetWindowSizeAllowFlags;            // store acceptable condition flags for SetNextWindowSize() use. | ||||
|     ImGuiCond               SetWindowCollapsedAllowFlags;       // store acceptable condition flags for SetNextWindowCollapsed() use. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user