@ -5307,6 +5307,40 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
else
else
window - > ItemWidthDefault = ( float ) ( int ) ( g . FontSize * 16.0f ) ;
window - > ItemWidthDefault = ( float ) ( int ) ( g . FontSize * 16.0f ) ;
// Store a backup of SizeFull which we will use next frame to decide if we need scrollbars.
window - > SizeFullAtLastBegin = window - > SizeFull ;
// UPDATE RECTANGLES
// Update various regions. Variables they depends on are set above in this function.
// FIXME: window->ContentsRegionRect.Max is currently very misleading / partly faulty, but some BeginChild() patterns relies on it.
// NB: WindowBorderSize is included in WindowPadding _and_ ScrollbarSizes so we need to cancel one out.
window - > ContentsRegionRect . Min . x = window - > Pos . x - window - > Scroll . x + window - > WindowPadding . x ;
window - > ContentsRegionRect . Min . y = window - > Pos . y - window - > Scroll . y + window - > WindowPadding . y + window - > TitleBarHeight ( ) + window - > MenuBarHeight ( ) ;
window - > ContentsRegionRect . Max . x = window - > Pos . x - window - > Scroll . x - window - > WindowPadding . x + ( window - > SizeContentsExplicit . x ! = 0.0f ? window - > SizeContentsExplicit . x : ( window - > Size . x - window - > ScrollbarSizes . x + ImMin ( window - > ScrollbarSizes . x , window - > WindowBorderSize ) ) ) ;
window - > ContentsRegionRect . Max . y = window - > Pos . y - window - > Scroll . y - window - > WindowPadding . y + ( window - > SizeContentsExplicit . y ! = 0.0f ? window - > SizeContentsExplicit . y : ( window - > Size . y - window - > ScrollbarSizes . y + ImMin ( window - > ScrollbarSizes . y , window - > WindowBorderSize ) ) ) ;
// Save clipped aabb so we can access it in constant-time in FindHoveredWindow()
window - > OuterRectClipped = window - > Rect ( ) ;
window - > OuterRectClipped . ClipWith ( window - > ClipRect ) ;
// Inner rectangle
// We set this up after processing the resize grip so that our clip rectangle doesn't lag by a frame
// Note that if our window is collapsed we will end up with an inverted (~null) clipping rectangle which is the correct behavior.
const ImRect title_bar_rect = window - > TitleBarRect ( ) ;
window - > InnerMainRect . Min . x = title_bar_rect . Min . x + window - > WindowBorderSize ;
window - > InnerMainRect . Min . y = title_bar_rect . Max . y + window - > MenuBarHeight ( ) + ( ( ( flags & ImGuiWindowFlags_MenuBar ) | | ! ( flags & ImGuiWindowFlags_NoTitleBar ) ) ? style . FrameBorderSize : window - > WindowBorderSize ) ;
window - > InnerMainRect . Max . x = window - > Pos . x + window - > Size . x - ImMax ( window - > ScrollbarSizes . x , window - > WindowBorderSize ) ;
window - > InnerMainRect . Max . y = window - > Pos . y + window - > Size . y - ImMax ( window - > ScrollbarSizes . y , window - > WindowBorderSize ) ;
// Inner clipping rectangle will extend a little bit outside the work region.
// This is to allow e.g. Selectable or CollapsingHeader or some separators to cover that space.
// Force round operator last to ensure that e.g. (int)(max.x-min.x) in user's render code produce correct result.
window - > InnerClipRect . Min . x = ImFloor ( 0.5f + window - > InnerMainRect . Min . x + ImMax ( 0.0f , ImFloor ( window - > WindowPadding . x * 0.5f - window - > WindowBorderSize ) ) ) ;
window - > InnerClipRect . Min . y = ImFloor ( 0.5f + window - > InnerMainRect . Min . y ) ;
window - > InnerClipRect . Max . x = ImFloor ( 0.5f + window - > InnerMainRect . Max . x - ImMax ( 0.0f , ImFloor ( window - > WindowPadding . x * 0.5f - window - > WindowBorderSize ) ) ) ;
window - > InnerClipRect . Max . y = ImFloor ( 0.5f + window - > InnerMainRect . Max . y ) ;
// DRAWING
// DRAWING
// Setup draw list and outer clipping rectangle
// Setup draw list and outer clipping rectangle
@ -5342,7 +5376,6 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
const float window_border_size = window - > WindowBorderSize ;
const float window_border_size = window - > WindowBorderSize ;
const ImGuiWindow * window_to_highlight = g . NavWindowingTarget ? g . NavWindowingTarget : g . NavWindow ;
const ImGuiWindow * window_to_highlight = g . NavWindowingTarget ? g . NavWindowingTarget : g . NavWindow ;
const bool title_bar_is_highlight = want_focus | | ( window_to_highlight & & window - > RootWindowForTitleBarHighlight = = window_to_highlight - > RootWindowForTitleBarHighlight ) ;
const bool title_bar_is_highlight = want_focus | | ( window_to_highlight & & window - > RootWindowForTitleBarHighlight = = window_to_highlight - > RootWindowForTitleBarHighlight ) ;
const ImRect title_bar_rect = window - > TitleBarRect ( ) ;
if ( window - > Collapsed )
if ( window - > Collapsed )
{
{
// Title bar only
// Title bar only
@ -5422,37 +5455,6 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
window - > DrawList - > AddRect ( bb . Min , bb . Max , GetColorU32 ( ImGuiCol_NavWindowingHighlight , g . NavWindowingHighlightAlpha ) , rounding , ~ 0 , 3.0f ) ;
window - > DrawList - > AddRect ( bb . Min , bb . Max , GetColorU32 ( ImGuiCol_NavWindowingHighlight , g . NavWindowingHighlightAlpha ) , rounding , ~ 0 , 3.0f ) ;
}
}
// Store a backup of SizeFull which we will use next frame to decide if we need scrollbars.
window - > SizeFullAtLastBegin = window - > SizeFull ;
// Update various regions. Variables they depends on are set above in this function.
// FIXME: window->ContentsRegionRect.Max is currently very misleading / partly faulty, but some BeginChild() patterns relies on it.
// NB: WindowBorderSize is included in WindowPadding _and_ ScrollbarSizes so we need to cancel one out.
window - > ContentsRegionRect . Min . x = window - > Pos . x - window - > Scroll . x + window - > WindowPadding . x ;
window - > ContentsRegionRect . Min . y = window - > Pos . y - window - > Scroll . y + window - > WindowPadding . y + window - > TitleBarHeight ( ) + window - > MenuBarHeight ( ) ;
window - > ContentsRegionRect . Max . x = window - > Pos . x - window - > Scroll . x - window - > WindowPadding . x + ( window - > SizeContentsExplicit . x ! = 0.0f ? window - > SizeContentsExplicit . x : ( window - > Size . x - window - > ScrollbarSizes . x + ImMin ( window - > ScrollbarSizes . x , window - > WindowBorderSize ) ) ) ;
window - > ContentsRegionRect . Max . y = window - > Pos . y - window - > Scroll . y - window - > WindowPadding . y + ( window - > SizeContentsExplicit . y ! = 0.0f ? window - > SizeContentsExplicit . y : ( window - > Size . y - window - > ScrollbarSizes . y + ImMin ( window - > ScrollbarSizes . y , window - > WindowBorderSize ) ) ) ;
// Save clipped aabb so we can access it in constant-time in FindHoveredWindow()
window - > OuterRectClipped = window - > Rect ( ) ;
window - > OuterRectClipped . ClipWith ( window - > ClipRect ) ;
// Inner rectangle
// We set this up after processing the resize grip so that our clip rectangle doesn't lag by a frame
// Note that if our window is collapsed we will end up with an inverted (~null) clipping rectangle which is the correct behavior.
window - > InnerMainRect . Min . x = title_bar_rect . Min . x + window - > WindowBorderSize ;
window - > InnerMainRect . Min . y = title_bar_rect . Max . y + window - > MenuBarHeight ( ) + ( ( ( flags & ImGuiWindowFlags_MenuBar ) | | ! ( flags & ImGuiWindowFlags_NoTitleBar ) ) ? style . FrameBorderSize : window - > WindowBorderSize ) ;
window - > InnerMainRect . Max . x = window - > Pos . x + window - > Size . x - ImMax ( window - > ScrollbarSizes . x , window - > WindowBorderSize ) ;
window - > InnerMainRect . Max . y = window - > Pos . y + window - > Size . y - ImMax ( window - > ScrollbarSizes . y , window - > WindowBorderSize ) ;
// Inner clipping rectangle will extend a little bit outside the work region.
// This is to allow e.g. Selectable or CollapsingHeader or some separators to cover that space.
// Force round operator last to ensure that e.g. (int)(max.x-min.x) in user's render code produce correct result.
window - > InnerClipRect . Min . x = ImFloor ( 0.5f + window - > InnerMainRect . Min . x + ImMax ( 0.0f , ImFloor ( window - > WindowPadding . x * 0.5f - window - > WindowBorderSize ) ) ) ;
window - > InnerClipRect . Min . y = ImFloor ( 0.5f + window - > InnerMainRect . Min . y ) ;
window - > InnerClipRect . Max . x = ImFloor ( 0.5f + window - > InnerMainRect . Max . x - ImMax ( 0.0f , ImFloor ( window - > WindowPadding . x * 0.5f - window - > WindowBorderSize ) ) ) ;
window - > InnerClipRect . Max . y = ImFloor ( 0.5f + window - > InnerMainRect . Max . y ) ;
// Setup drawing context
// Setup drawing context
// (NB: That term "drawing context / DC" lost its meaning a long time ago. Initially was meant to hold transient data only. Nowadays difference between window-> and window->DC-> is dubious.)
// (NB: That term "drawing context / DC" lost its meaning a long time ago. Initially was meant to hold transient data only. Nowadays difference between window-> and window->DC-> is dubious.)
window - > DC . Indent . x = 0.0f + window - > WindowPadding . x - window - > Scroll . x ;
window - > DC . Indent . x = 0.0f + window - > WindowPadding . x - window - > Scroll . x ;