@ -3060,7 +3060,7 @@ float ImGui::CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x)
ImGuiWindow * window = GImGui - > CurrentWindow ;
ImGuiWindow * window = GImGui - > CurrentWindow ;
if ( wrap_pos_x = = 0.0f )
if ( wrap_pos_x = = 0.0f )
wrap_pos_x = Get WorkRectMax ( ) . x ;
wrap_pos_x = Get ContentRegionMaxAbs ( ) . x ;
else if ( wrap_pos_x > 0.0f )
else if ( wrap_pos_x > 0.0f )
wrap_pos_x + = window - > Pos . x - window - > Scroll . x ; // wrap_pos_x is provided is window local space
wrap_pos_x + = window - > Pos . x - window - > Scroll . x ; // wrap_pos_x is provided is window local space
@ -3379,7 +3379,7 @@ static void TranslateWindow(ImGuiWindow* window, const ImVec2& delta)
window - > Pos + = delta ;
window - > Pos + = delta ;
window - > ClipRect . Translate ( delta ) ;
window - > ClipRect . Translate ( delta ) ;
window - > OuterRectClipped . Translate ( delta ) ;
window - > OuterRectClipped . Translate ( delta ) ;
window - > Inner Visible Rect. Translate ( delta ) ;
window - > Inner Rect. Translate ( delta ) ;
window - > DC . CursorPos + = delta ;
window - > DC . CursorPos + = delta ;
window - > DC . CursorStartPos + = delta ;
window - > DC . CursorStartPos + = delta ;
window - > DC . CursorMaxPos + = delta ;
window - > DC . CursorMaxPos + = delta ;
@ -5342,6 +5342,8 @@ static void ImGui::RenderWindowOuterBorders(ImGuiWindow* window)
}
}
}
}
// Draw background and borders
// Draw and handle scrollbars
void ImGui : : RenderWindowDecorations ( ImGuiWindow * window , const ImRect & title_bar_rect , bool title_bar_is_highlight , bool handle_borders_and_resize_grips , int resize_grip_count , const ImU32 resize_grip_col [ 4 ] , float resize_grip_draw_size )
void ImGui : : RenderWindowDecorations ( ImGuiWindow * window , const ImRect & title_bar_rect , bool title_bar_is_highlight , bool handle_borders_and_resize_grips , int resize_grip_count , const ImU32 resize_grip_col [ 4 ] , float resize_grip_draw_size )
{
{
ImGuiContext & g = * GImGui ;
ImGuiContext & g = * GImGui ;
@ -6023,43 +6025,50 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
// Store a backup of SizeFull which we will use next frame to decide if we need scrollbars.
// Store a backup of SizeFull which we will use next frame to decide if we need scrollbars.
window - > SizeFullAtLastBegin = window - > SizeFull ;
window - > SizeFullAtLastBegin = window - > SizeFull ;
// UPDATE RECTANGLES
// UPDATE RECTANGLES (1- THOSE NOT AFFECTED BY SCROLLING)
// Update various regions. Variables they depends on should be set above in this function.
// We set this up after processing the resize grip so that our rectangles doesn't lag by a frame.
// Update various regions. Variables they depends on are set above in this function.
// Outer rectangle
// FIXME: window->ContentsRegionRect.Max is currently very misleading / partly faulty, but some BeginChild() patterns relies on it.
// Not affected by window border size. Used by:
// NB: WindowBorderSize is included in WindowPadding _and_ ScrollbarSizes so we need to cancel one out.
// - FindHoveredWindow() (w/ extra padding when border resize is enabled)
window - > ContentsRegionRect . Min . x = window - > Pos . x - window - > Scroll . x + window - > WindowPadding . x ;
// - Begin() initial clipping rect for drawing window background and borders.
window - > ContentsRegionRect . Min . y = window - > Pos . y - window - > Scroll . y + window - > WindowPadding . y + window - > TitleBarHeight ( ) + window - > MenuBarHeight ( ) ;
// - Begin() clipping whole child
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 ) ) ) ;
// 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 - > InnerVisibleRect . Min . x = title_bar_rect . Min . x + window - > WindowBorderSize ;
window - > InnerVisibleRect . Min . y = title_bar_rect . Max . y + window - > MenuBarHeight ( ) + ( ( ( flags & ImGuiWindowFlags_MenuBar ) | | ! ( flags & ImGuiWindowFlags_NoTitleBar ) ) ? style . FrameBorderSize : window - > WindowBorderSize ) ;
window - > InnerVisibleRect . Max . x = window - > Pos . x + window - > Size . x - ImMax ( window - > ScrollbarSizes . x , window - > WindowBorderSize ) ;
window - > InnerVisibleRect . Max . y = window - > Pos . y + window - > Size . y - ImMax ( window - > ScrollbarSizes . y , window - > WindowBorderSize ) ;
// Outer host rectangle for drawing background and borders
ImRect host_rect = ( ( flags & ImGuiWindowFlags_ChildWindow ) & & ! ( flags & ImGuiWindowFlags_Popup ) & & ! window_is_child_tooltip ) ? parent_window - > ClipRect : viewport_rect ;
ImRect host_rect = ( ( flags & ImGuiWindowFlags_ChildWindow ) & & ! ( flags & ImGuiWindowFlags_Popup ) & & ! window_is_child_tooltip ) ? parent_window - > ClipRect : viewport_rect ;
// Save clipped aabb so we can access it in constant-time in FindHoveredWindow()
window - > OuterRectClipped = window - > Rect ( ) ;
window - > OuterRectClipped = window - > Rect ( ) ;
if ( window - > DockIsActive )
if ( window - > DockIsActive )
window - > OuterRectClipped . Min . y + = window - > TitleBarHeight ( ) ;
window - > OuterRectClipped . Min . y + = window - > TitleBarHeight ( ) ;
window - > OuterRectClipped . ClipWith ( host_rect ) ;
window - > OuterRectClipped . ClipWith ( host_rect ) ;
// Inner work/clipping rectangle will extend a little bit outside the work region.
// Inner rectangle
// Used by:
// - NavScrollToBringItemIntoView()
// - NavUpdatePageUpPageDown()
// - Scrollbar()
const ImRect title_bar_rect = window - > TitleBarRect ( ) ;
window - > InnerRect . Min . x = title_bar_rect . Min . x + window - > WindowBorderSize ;
window - > InnerRect . Min . y = title_bar_rect . Max . y + window - > MenuBarHeight ( ) + ( ( ( flags & ImGuiWindowFlags_MenuBar ) | | ! ( flags & ImGuiWindowFlags_NoTitleBar ) ) ? style . FrameBorderSize : window - > WindowBorderSize ) ;
window - > InnerRect . Max . x = window - > Pos . x + window - > Size . x - ImMax ( window - > ScrollbarSizes . x , window - > WindowBorderSize ) ;
window - > InnerRect . Max . y = window - > Pos . y + window - > Size . y - ImMax ( window - > ScrollbarSizes . y , window - > WindowBorderSize ) ;
// Work rectangle.
// Affected by window padding and border size. Used by:
// - Columns() for right-most edge
// - BeginTabBar() for right-most edge
window - > WorkRect . Min . x = ImFloor ( 0.5f + window - > InnerRect . Min . x + ImMax ( 0.0f , ImFloor ( window - > WindowPadding . x * 0.5f - window - > WindowBorderSize ) ) ) ;
window - > WorkRect . Min . y = ImFloor ( 0.5f + window - > InnerRect . Min . y ) ;
window - > WorkRect . Max . x = ImFloor ( 0.5f + window - > InnerRect . Max . x - ImMax ( 0.0f , ImFloor ( window - > WindowPadding . x * 0.5f - window - > WindowBorderSize ) ) ) ;
window - > WorkRect . Max . y = ImFloor ( 0.5f + window - > InnerRect . Max . y ) ;
// Inner clipping rectangle.
// Will extend a little bit outside the normal work region.
// This is to allow e.g. Selectable or CollapsingHeader or some separators to cover that space.
// 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.
// Force round operator last to ensure that e.g. (int)(max.x-min.x) in user's render code produce correct result.
window - > InnerWorkRect . Min . x = ImFloor ( 0.5f + window - > InnerVisibleRect . Min . x + ImMax ( 0.0f , ImFloor ( window - > WindowPadding . x * 0.5f - window - > WindowBorderSize ) ) ) ;
// Note that if our window is collapsed we will end up with an inverted (~null) clipping rectangle which is the correct behavior.
window - > InnerWorkRect . Min . y = ImFloor ( 0.5f + window - > InnerVisibleRect . Min . y ) ;
// Affected by window/frame border size. Used by:
window - > InnerWorkRect . Max . x = ImFloor ( 0.5f + window - > InnerVisibleRect . Max . x - ImMax ( 0.0f , ImFloor ( window - > WindowPadding . x * 0.5f - window - > WindowBorderSize ) ) ) ;
// - Begin() initial clip rect
window - > InnerWorkRect . Max . y = ImFloor ( 0.5f + window - > InnerVisibleRect . Max . y ) ;
window - > InnerClipRect = window - > WorkRect ;
window - > InnerWorkRectClipped = window - > InnerWorkRect ;
window - > InnerClipRect . ClipWithFull ( host_rect ) ;
window - > InnerWorkRectClipped . ClipWithFull ( host_rect ) ;
// DRAWING
// DRAWING
@ -6090,6 +6099,19 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
const bool title_bar_is_highlight = want_focus | | ( window_to_highlight & & ( window - > RootWindowForTitleBarHighlight = = window_to_highlight - > RootWindowForTitleBarHighlight | | ( window - > DockNode & & window - > DockNode = = window_to_highlight - > DockNode ) ) ) ;
const bool title_bar_is_highlight = want_focus | | ( window_to_highlight & & ( window - > RootWindowForTitleBarHighlight = = window_to_highlight - > RootWindowForTitleBarHighlight | | ( window - > DockNode & & window - > DockNode = = window_to_highlight - > DockNode ) ) ) ;
RenderWindowDecorations ( window , title_bar_rect , title_bar_is_highlight , handle_borders_and_resize_grips , resize_grip_count , resize_grip_col , resize_grip_draw_size ) ;
RenderWindowDecorations ( window , title_bar_rect , title_bar_is_highlight , handle_borders_and_resize_grips , resize_grip_count , resize_grip_col , resize_grip_draw_size ) ;
// UPDATE RECTANGLES (2- THOSE AFFECTED BY SCROLLING)
// [LEGACY] Contents Region
// 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 when we have both.
// Used by:
// - Mouse wheel scrolling
// - ... (many things)
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 ) ) ) ;
// 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 ;
@ -6213,7 +6235,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
}
}
if ( ! ( flags & ImGuiWindowFlags_DockNodeHost ) )
if ( ! ( flags & ImGuiWindowFlags_DockNodeHost ) )
PushClipRect ( window - > Inner WorkRectClipped. Min , window - > InnerWorkRectClipped . Max , true ) ;
PushClipRect ( window - > Inner ClipRect. Min , window - > InnerClipRect . Max , true ) ;
// Clear 'accessed' flag last thing (After PushClipRect which will set the flag. We want the flag to stay false when the default "Debug" window is unused)
// Clear 'accessed' flag last thing (After PushClipRect which will set the flag. We want the flag to stay false when the default "Debug" window is unused)
if ( first_begin_of_the_frame )
if ( first_begin_of_the_frame )
@ -6485,7 +6507,7 @@ float ImGui::CalcItemWidth()
w = window - > DC . ItemWidth ;
w = window - > DC . ItemWidth ;
if ( w < 0.0f )
if ( w < 0.0f )
{
{
float region_max_x = Get WorkRectMax ( ) . x ;
float region_max_x = Get ContentRegionMaxAbs ( ) . x ;
w = ImMax ( 1.0f , region_max_x - window - > DC . CursorPos . x + w ) ;
w = ImMax ( 1.0f , region_max_x - window - > DC . CursorPos . x + w ) ;
}
}
w = ( float ) ( int ) w ;
w = ( float ) ( int ) w ;
@ -6502,7 +6524,7 @@ ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_w, float default_h)
ImVec2 region_max ;
ImVec2 region_max ;
if ( size . x < 0.0f | | size . y < 0.0f )
if ( size . x < 0.0f | | size . y < 0.0f )
region_max = Get WorkRectMax ( ) ;
region_max = Get ContentRegionMaxAbs ( ) ;
if ( size . x = = 0.0f )
if ( size . x = = 0.0f )
size . x = default_w ;
size . x = default_w ;
@ -7146,7 +7168,7 @@ ImVec2 ImGui::GetContentRegionMax()
}
}
// [Internal] Absolute coordinate. Saner. This is not exposed until we finishing refactoring work rect features.
// [Internal] Absolute coordinate. Saner. This is not exposed until we finishing refactoring work rect features.
ImVec2 ImGui : : Get WorkRectMax ( )
ImVec2 ImGui : : Get ContentRegionMaxAbs ( )
{
{
ImGuiWindow * window = GImGui - > CurrentWindow ;
ImGuiWindow * window = GImGui - > CurrentWindow ;
ImVec2 mx = window - > ContentsRegionRect . Max ;
ImVec2 mx = window - > ContentsRegionRect . Max ;
@ -7158,7 +7180,7 @@ ImVec2 ImGui::GetWorkRectMax()
ImVec2 ImGui : : GetContentRegionAvail ( )
ImVec2 ImGui : : GetContentRegionAvail ( )
{
{
ImGuiWindow * window = GImGui - > CurrentWindow ;
ImGuiWindow * window = GImGui - > CurrentWindow ;
return Get WorkRectMax ( ) - window - > DC . CursorPos ;
return Get ContentRegionMaxAbs ( ) - window - > DC . CursorPos ;
}
}
// In window space (not screen space!)
// In window space (not screen space!)
@ -8510,7 +8532,7 @@ ImVec2 ImGui::GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInput
// NB: We modify rect_rel by the amount we scrolled for, so it is immediately updated.
// NB: We modify rect_rel by the amount we scrolled for, so it is immediately updated.
static void NavScrollToBringItemIntoView ( ImGuiWindow * window , const ImRect & item_rect )
static void NavScrollToBringItemIntoView ( ImGuiWindow * window , const ImRect & item_rect )
{
{
ImRect window_rect ( window - > Inner Visible Rect. Min - ImVec2 ( 1 , 1 ) , window - > Inner Visible Rect. Max + ImVec2 ( 1 , 1 ) ) ;
ImRect window_rect ( window - > Inner Rect. Min - ImVec2 ( 1 , 1 ) , window - > Inner Rect. Max + ImVec2 ( 1 , 1 ) ) ;
//GetForegroundDrawList(window)->AddRect(window_rect.Min, window_rect.Max, IM_COL32_WHITE); // [DEBUG]
//GetForegroundDrawList(window)->AddRect(window_rect.Min, window_rect.Max, IM_COL32_WHITE); // [DEBUG]
if ( window_rect . Contains ( item_rect ) )
if ( window_rect . Contains ( item_rect ) )
return ;
return ;
@ -8784,7 +8806,7 @@ static void ImGui::NavUpdate()
if ( g . NavMoveRequest & & g . NavMoveFromClampedRefRect & & g . NavLayer = = 0 )
if ( g . NavMoveRequest & & g . NavMoveFromClampedRefRect & & g . NavLayer = = 0 )
{
{
ImGuiWindow * window = g . NavWindow ;
ImGuiWindow * window = g . NavWindow ;
ImRect window_rect_rel ( window - > Inner Visible Rect. Min - window - > Pos - ImVec2 ( 1 , 1 ) , window - > Inner Visible Rect. Max - window - > Pos + ImVec2 ( 1 , 1 ) ) ;
ImRect window_rect_rel ( window - > Inner Rect. Min - window - > Pos - ImVec2 ( 1 , 1 ) , window - > Inner Rect. Max - window - > Pos + ImVec2 ( 1 , 1 ) ) ;
if ( ! window_rect_rel . Contains ( window - > NavRectRel [ g . NavLayer ] ) )
if ( ! window_rect_rel . Contains ( window - > NavRectRel [ g . NavLayer ] ) )
{
{
float pad = window - > CalcFontSize ( ) * 0.5f ;
float pad = window - > CalcFontSize ( ) * 0.5f ;
@ -8885,14 +8907,14 @@ static float ImGui::NavUpdatePageUpPageDown(int allowed_dir_flags)
{
{
// Fallback manual-scroll when window has no navigable item
// Fallback manual-scroll when window has no navigable item
if ( IsKeyPressed ( g . IO . KeyMap [ ImGuiKey_PageUp ] , true ) )
if ( IsKeyPressed ( g . IO . KeyMap [ ImGuiKey_PageUp ] , true ) )
SetWindowScrollY ( window , window - > Scroll . y - window - > Inner Visible Rect. GetHeight ( ) ) ;
SetWindowScrollY ( window , window - > Scroll . y - window - > Inner Rect. GetHeight ( ) ) ;
else if ( IsKeyPressed ( g . IO . KeyMap [ ImGuiKey_PageDown ] , true ) )
else if ( IsKeyPressed ( g . IO . KeyMap [ ImGuiKey_PageDown ] , true ) )
SetWindowScrollY ( window , window - > Scroll . y + window - > Inner Visible Rect. GetHeight ( ) ) ;
SetWindowScrollY ( window , window - > Scroll . y + window - > Inner Rect. GetHeight ( ) ) ;
}
}
else
else
{
{
const ImRect & nav_rect_rel = window - > NavRectRel [ g . NavLayer ] ;
const ImRect & nav_rect_rel = window - > NavRectRel [ g . NavLayer ] ;
const float page_offset_y = ImMax ( 0.0f , window - > Inner Visible Rect. GetHeight ( ) - window - > CalcFontSize ( ) * 1.0f + nav_rect_rel . GetHeight ( ) ) ;
const float page_offset_y = ImMax ( 0.0f , window - > Inner Rect. GetHeight ( ) - window - > CalcFontSize ( ) * 1.0f + nav_rect_rel . GetHeight ( ) ) ;
float nav_scoring_rect_offset_y = 0.0f ;
float nav_scoring_rect_offset_y = 0.0f ;
if ( IsKeyPressed ( g . IO . KeyMap [ ImGuiKey_PageUp ] , true ) )
if ( IsKeyPressed ( g . IO . KeyMap [ ImGuiKey_PageUp ] , true ) )
{
{
@ -9380,7 +9402,7 @@ void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiColumnsFlag
window - > DC . CurrentColumns = columns ;
window - > DC . CurrentColumns = columns ;
// Set state for first column
// Set state for first column
const float content_region_width = ( window - > SizeContentsExplicit . x ! = 0.0f ) ? ( window - > SizeContentsExplicit . x ) : ( window - > Inner WorkRect. Max . x - window - > Pos . x ) ;
const float content_region_width = ( window - > SizeContentsExplicit . x ! = 0.0f ) ? ( window - > SizeContentsExplicit . x ) : ( window - > WorkRect. Max . x - window - > Pos . x ) ;
columns - > OffMinX = window - > DC . Indent . x - g . Style . ItemSpacing . x ; // Lock our horizontal range
columns - > OffMinX = window - > DC . Indent . x - g . Style . ItemSpacing . x ; // Lock our horizontal range
columns - > OffMaxX = ImMax ( content_region_width - window - > Scroll . x , columns - > OffMinX + 1.0f ) ;
columns - > OffMaxX = ImMax ( content_region_width - window - > Scroll . x , columns - > OffMinX + 1.0f ) ;
columns - > HostCursorPosY = window - > DC . CursorPos . y ;
columns - > HostCursorPosY = window - > DC . CursorPos . y ;
@ -14419,10 +14441,10 @@ void ImGui::ShowMetricsWindow(bool* p_open)
return ;
return ;
}
}
enum { RT_OuterRect , RT_OuterRectClipped , RT_Inner VisibleRect, RT_InnerWorkRect , RT_InnerWorkRectClipped , RT_ContentsRegionRect , RT_ContentsFull Rect } ;
enum { RT_OuterRect , RT_OuterRectClipped , RT_Inner Rect, RT_InnerClipRect , RT_WorkRect , RT_Contents , RT_ContentsRegion Rect } ;
static bool show_windows_begin_order = false ;
static bool show_windows_begin_order = false ;
static bool show_windows_rects = false ;
static bool show_windows_rects = false ;
static int show_windows_rect_type = RT_ Inner WorkRect;
static int show_windows_rect_type = RT_ WorkRect;
static bool show_drawcmd_clip_rects = true ;
static bool show_drawcmd_clip_rects = true ;
ImGuiIO & io = ImGui : : GetIO ( ) ;
ImGuiIO & io = ImGui : : GetIO ( ) ;
@ -14437,12 +14459,13 @@ void ImGui::ShowMetricsWindow(bool* p_open)
{
{
static ImRect GetRect ( ImGuiWindow * window , int rect_type )
static ImRect GetRect ( ImGuiWindow * window , int rect_type )
{
{
if ( rect_type = = RT_OuterRect ) { return window - > Rect ( ) ; }
if ( rect_type = = RT_OuterRect ) { return window - > Rect ( ) ; }
else if ( rect_type = = RT_OuterRectClipped ) { return window - > OuterRectClipped ; }
else if ( rect_type = = RT_OuterRectClipped ) { return window - > OuterRectClipped ; }
else if ( rect_type = = RT_InnerVisibleRect ) { return window - > InnerVisibleRect ; }
else if ( rect_type = = RT_InnerRect ) { return window - > InnerRect ; }
else if ( rect_type = = RT_InnerWorkRect ) { return window - > InnerWorkRect ; }
else if ( rect_type = = RT_InnerClipRect ) { return window - > InnerClipRect ; }
else if ( rect_type = = RT_InnerWorkRectClipped ) { return window - > InnerWorkRectClipped ; }
else if ( rect_type = = RT_WorkRect ) { return window - > WorkRect ; }
else if ( rect_type = = RT_ContentsRegionRect ) { return window - > ContentsRegionRect ; }
else if ( rect_type = = RT_Contents ) { return ImRect ( window - > Pos , window - > Pos + window - > SizeContents ) ; }
else if ( rect_type = = RT_ContentsRegionRect ) { return window - > ContentsRegionRect ; }
IM_ASSERT ( 0 ) ;
IM_ASSERT ( 0 ) ;
return ImRect ( ) ;
return ImRect ( ) ;
}
}
@ -14667,7 +14690,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
ImGui : : Checkbox ( " Show windows rectangles " , & show_windows_rects ) ;
ImGui : : Checkbox ( " Show windows rectangles " , & show_windows_rects ) ;
ImGui : : SameLine ( ) ;
ImGui : : SameLine ( ) ;
ImGui : : SetNextItemWidth ( ImGui : : GetFontSize ( ) * 12 ) ;
ImGui : : SetNextItemWidth ( ImGui : : GetFontSize ( ) * 12 ) ;
show_windows_rects | = ImGui : : Combo ( " ##rects_type " , & show_windows_rect_type , " OuterRect \0 " " OuterRectClipped \0 " " Inner Visible Rect\0 " " Inner WorkRect\0 " " InnerWorkRectClipped \0 " " ContentsRegionRect \0 " ) ;
show_windows_rects | = ImGui : : Combo ( " ##rects_type " , & show_windows_rect_type , " OuterRect \0 " " OuterRectClipped \0 " " Inner Rect\0 " " Inner ClipRect\0 " " WorkRect \0 " " Contents \0 " " ContentsRegionRect \0 " ) ;
if ( show_windows_rects & & g . NavWindow )
if ( show_windows_rects & & g . NavWindow )
{
{
ImRect r = Funcs : : GetRect ( g . NavWindow , show_windows_rect_type ) ;
ImRect r = Funcs : : GetRect ( g . NavWindow , show_windows_rect_type ) ;