@ -3663,12 +3663,15 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size_on_first_
window - > SizeContents . y + = window - > ScrollY ;
// Hide popup/tooltip window when first appearing while we measure size (because we recycle them)
if ( ( flags & ( ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip ) ) ! = 0 & & ( flags & ImGuiWindowFlags_AlwaysAutoResize ) & & ! window_was_visible )
if ( ( flags & ( ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip ) ) ! = 0 & & ! window_was_visible )
{
window - > HiddenFrames = 1 ;
if ( ! window_size_set_by_api )
window - > Size = window - > SizeFull = ImVec2 ( 0.f , 0.f ) ;
window - > SizeContents = ImVec2 ( 0.f , 0.f ) ;
if ( flags & ImGuiWindowFlags_AlwaysAutoResize )
{
if ( ! window_size_set_by_api )
window - > Size = window - > SizeFull = ImVec2 ( 0.f , 0.f ) ;
window - > SizeContents = ImVec2 ( 0.f , 0.f ) ;
}
}
// Calculate auto-fit size
@ -3742,10 +3745,20 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size_on_first_
rect_to_avoid = ImRect ( parent_window - > Pos . x + style . ItemSpacing . x , - FLT_MAX , parent_window - > Pos . x + parent_window - > Size . x - style . ItemSpacing . x - parent_window - > ScrollbarWidth ( ) , FLT_MAX ) ; // We want some overlap to convey the relative depth of each popup (here hard-coded to 4)
window - > PosFloat = FindBestWindowPos ( window - > PosFloat , window - > Size , flags , & window - > AutoPosLastDirection , rect_to_avoid ) ;
}
else if ( ( flags & ImGuiWindowFlags_Popup ) ! = 0 & & window_appearing_after_being_hidden & & ! window_pos_set_by_api )
else if ( ( flags & ImGuiWindowFlags_Popup ) ! = 0 & & ! window_pos_set_by_api & & window_appearing_after_being_hidden )
{
ImRect rect_to_avoid ( window - > PosFloat . x - 1 , window - > PosFloat . y - 1 , window - > PosFloat . x + 1 , window - > PosFloat . y + 1 ) ;
window - > PosFloat = FindBestWindowPos ( window - > PosFloat , window - > Size , flags , & window - > AutoPosLastDirection , rect_to_avoid ) ;
if ( flags & ImGuiWindowFlags_Modal )
{
// Center
// FIXME: Should be widely available, e.g. via SetNextWindowPos() API etc.
ImRect fullscreen_rect ( GetVisibleRect ( ) ) ;
window - > PosFloat = ImMax ( style . DisplaySafeAreaPadding , fullscreen_rect . GetCenter ( ) - window - > SizeContents * 0.5f ) ;
}
else
{
ImRect rect_to_avoid ( window - > PosFloat . x - 1 , window - > PosFloat . y - 1 , window - > PosFloat . x + 1 , window - > PosFloat . y + 1 ) ;
window - > PosFloat = FindBestWindowPos ( window - > PosFloat , window - > Size , flags , & window - > AutoPosLastDirection , rect_to_avoid ) ;
}
}
// Position tooltip (always follows mouse)
@ -3814,8 +3827,8 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size_on_first_
// Modal window darkens what is behind them
if ( ( flags & ImGuiWindowFlags_Modal ) ! = 0 & & window = = GetFrontMostModalRootWindow ( ) )
{
Im Vec4 fullscreen_rect = GetVisibleRect ( ) ;
window - > DrawList - > AddRectFilled ( ImVec2( fullscreen_rect . x , fullscreen_rect . y ) , ImVec2 ( fullscreen_rect . z , fullscreen_rect . w ) , window - > Color ( ImGuiCol_ModalWindowDarkening , g . ModalWindowDarkeningRatio ) ) ;
Im Rect fullscreen_rect = GetVisibleRect ( ) ;
window - > DrawList - > AddRectFilled ( fullscreen_rect. Min , fullscreen_rect . Max , window - > Color ( ImGuiCol_ModalWindowDarkening , g . ModalWindowDarkeningRatio ) ) ;
}
// Draw window + handle manual resize