@ -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_i tems;
}
// 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 ( ) )