@ -2997,7 +2997,7 @@ float ImGui::CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x)
ImGuiWindow * window = GImGui - > CurrentWindow ;
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 )
wrap_pos_x + = window - > Pos . x - window - > Scroll . x ; // wrap_pos_x is provided is window local space
@ -5517,10 +5517,10 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
// 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 - > Inner Visible Rect. Min . x = title_bar_rect . Min . x + window - > WindowBorderSize ;
window - > Inner Visible Rect. Min . y = title_bar_rect . Max . y + window - > MenuBarHeight ( ) + ( ( ( flags & ImGuiWindowFlags_MenuBar ) | | ! ( flags & ImGuiWindowFlags_NoTitleBar ) ) ? style . FrameBorderSize : window - > WindowBorderSize ) ;
window - > Inner Visible Rect. Max . x = window - > Pos . x + window - > Size . x - ImMax ( window - > ScrollbarSizes . x , window - > WindowBorderSize ) ;
window - > Inner Visible Rect. Max . y = window - > Pos . y + window - > Size . y - ImMax ( window - > ScrollbarSizes . y , window - > WindowBorderSize ) ;
window - > Inner Rect. Min . x = title_bar_rect . Min . x + window - > WindowBorderSize ;
window - > Inner Rect. Min . y = title_bar_rect . Max . y + window - > MenuBarHeight ( ) + ( ( ( flags & ImGuiWindowFlags_MenuBar ) | | ! ( flags & ImGuiWindowFlags_NoTitleBar ) ) ? style . FrameBorderSize : window - > WindowBorderSize ) ;
window - > Inner Rect. Max . x = window - > Pos . x + window - > Size . x - ImMax ( window - > ScrollbarSizes . x , window - > WindowBorderSize ) ;
window - > Inner Rect. 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 ;
@ -5532,12 +5532,12 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
// Inner work/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 - > Inner WorkRect. Min . x = ImFloor ( 0.5f + window - > Inner Visible Rect. Min . x + ImMax ( 0.0f , ImFloor ( window - > WindowPadding . x * 0.5f - window - > WindowBorderSize ) ) ) ;
window - > Inner WorkRect. Min . y = ImFloor ( 0.5f + window - > Inner Visible Rect. Min . y ) ;
window - > Inner WorkRect. Max . x = ImFloor ( 0.5f + window - > Inner Visible Rect. Max . x - ImMax ( 0.0f , ImFloor ( window - > WindowPadding . x * 0.5f - window - > WindowBorderSize ) ) ) ;
window - > Inner WorkRect. Max . y = ImFloor ( 0.5f + window - > Inner Visible Rect. Max . y ) ;
window - > Inner WorkRectClipped = window - > Inner WorkRect;
window - > Inner WorkRectClipped . ClipWithFull ( host_rect ) ;
window - > WorkRect. Min . x = ImFloor ( 0.5f + window - > Inner Rect. Min . x + ImMax ( 0.0f , ImFloor ( window - > WindowPadding . x * 0.5f - window - > WindowBorderSize ) ) ) ;
window - > WorkRect. Min . y = ImFloor ( 0.5f + window - > Inner Rect. Min . y ) ;
window - > WorkRect. Max . x = ImFloor ( 0.5f + window - > Inner Rect. Max . x - ImMax ( 0.0f , ImFloor ( window - > WindowPadding . x * 0.5f - window - > WindowBorderSize ) ) ) ;
window - > WorkRect. Max . y = ImFloor ( 0.5f + window - > Inner Rect. Max . y ) ;
window - > Inner ClipRect = window - > WorkRect;
window - > Inner ClipRect . ClipWithFull ( host_rect ) ;
// DRAWING
@ -5662,7 +5662,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
SetCurrentWindow ( window ) ;
}
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)
if ( first_begin_of_the_frame )
@ -5905,7 +5905,7 @@ float ImGui::CalcItemWidth()
w = window - > DC . ItemWidth ;
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 = ( float ) ( int ) w ;
@ -5922,7 +5922,7 @@ ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_w, float default_h)
ImVec2 region_max ;
if ( size . x < 0.0f | | size . y < 0.0f )
region_max = Get WorkRectMax ( ) ;
region_max = Get ContentRegionMaxAbs ( ) ;
if ( size . x = = 0.0f )
size . x = default_w ;
@ -6513,7 +6513,7 @@ ImVec2 ImGui::GetContentRegionMax()
}
// [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 ;
ImVec2 mx = window - > ContentsRegionRect . Max ;
@ -6525,7 +6525,7 @@ ImVec2 ImGui::GetWorkRectMax()
ImVec2 ImGui : : GetContentRegionAvail ( )
{
ImGuiWindow * window = GImGui - > CurrentWindow ;
return Get WorkRectMax ( ) - window - > DC . CursorPos ;
return Get ContentRegionMaxAbs ( ) - window - > DC . CursorPos ;
}
// In window space (not screen space!)
@ -7843,7 +7843,7 @@ ImVec2 ImGui::GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInput
// 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 )
{
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]
if ( window_rect . Contains ( item_rect ) )
return ;
@ -8117,7 +8117,7 @@ static void ImGui::NavUpdate()
if ( g . NavMoveRequest & & g . NavMoveFromClampedRefRect & & g . NavLayer = = 0 )
{
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 ] ) )
{
float pad = window - > CalcFontSize ( ) * 0.5f ;
@ -8218,14 +8218,14 @@ static float ImGui::NavUpdatePageUpPageDown(int allowed_dir_flags)
{
// Fallback manual-scroll when window has no navigable item
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 ) )
SetWindowScrollY ( window , window - > Scroll . y + window - > Inner Visible Rect. GetHeight ( ) ) ;
SetWindowScrollY ( window , window - > Scroll . y + window - > Inner Rect. GetHeight ( ) ) ;
}
else
{
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 ;
if ( IsKeyPressed ( g . IO . KeyMap [ ImGuiKey_PageUp ] , true ) )
{
@ -8701,7 +8701,7 @@ void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiColumnsFlag
window - > DC . CurrentColumns = columns ;
// 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 - > OffMaxX = ImMax ( content_region_width - window - > Scroll . x , columns - > OffMinX + 1.0f ) ;
columns - > HostCursorPosY = window - > DC . CursorPos . y ;
@ -9749,10 +9749,10 @@ void ImGui::ShowMetricsWindow(bool* p_open)
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_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 ;
ImGuiIO & io = ImGui : : GetIO ( ) ;
@ -9769,9 +9769,10 @@ void ImGui::ShowMetricsWindow(bool* p_open)
{
if ( rect_type = = RT_OuterRect ) { return window - > Rect ( ) ; }
else if ( rect_type = = RT_OuterRectClipped ) { return window - > OuterRectClipped ; }
else if ( rect_type = = RT_InnerVisibleRect ) { return window - > InnerVisibleRect ; }
else if ( rect_type = = RT_InnerWorkRect ) { return window - > InnerWorkRect ; }
else if ( rect_type = = RT_InnerWorkRectClipped ) { return window - > InnerWorkRectClipped ; }
else if ( rect_type = = RT_InnerRect ) { return window - > InnerRect ; }
else if ( rect_type = = RT_InnerClipRect ) { return window - > InnerClipRect ; }
else if ( rect_type = = RT_WorkRect ) { return window - > WorkRect ; }
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 ) ;
return ImRect ( ) ;
@ -9979,7 +9980,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
ImGui : : Checkbox ( " Show windows rectangles " , & show_windows_rects ) ;
ImGui : : SameLine ( ) ;
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 )
{
ImRect r = Funcs : : GetRect ( g . NavWindow , show_windows_rect_type ) ;