@ -3743,7 +3743,10 @@ static void SetCurrentWindow(ImGuiWindow* window)
g . CurrentWindow = window ;
g . CurrentTable = window & & window - > DC . CurrentTableIdx ! = - 1 ? g . Tables . GetByIndex ( window - > DC . CurrentTableIdx ) : NULL ;
if ( window )
{
g . FontSize = g . DrawListSharedData . FontSize = window - > CalcFontSize ( ) ;
ImGui : : NavUpdateCurrentWindowIsScrollPushableX ( ) ;
}
}
void ImGui : : GcCompactTransientMiscBuffers ( )
@ -6670,6 +6673,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
window - > DC . NavLayerCurrent = ImGuiNavLayer_Main ;
window - > DC . NavLayersActiveMask = window - > DC . NavLayersActiveMaskNext ;
window - > DC . NavLayersActiveMaskNext = 0x00 ;
window - > DC . NavIsScrollPushableX = true ;
window - > DC . NavHideHighlightOneFrame = false ;
window - > DC . NavWindowHasScrollY = ( window - > ScrollMax . y > 0.0f ) ;
@ -10825,6 +10829,15 @@ static void ImGui::NavApplyItemToResult(ImGuiNavItemData* result)
result - > RectRel = WindowRectAbsToRel ( window , g . LastItemData . NavRect ) ;
}
// True when current work location may be scrolled horizontally when moving left / right.
// This is generally always true UNLESS within a column. We don't have a vertical equivalent.
void ImGui : : NavUpdateCurrentWindowIsScrollPushableX ( )
{
ImGuiContext & g = * GImGui ;
ImGuiWindow * window = g . CurrentWindow ;
window - > DC . NavIsScrollPushableX = ( g . CurrentTable = = NULL & & window - > DC . CurrentColumns = = NULL ) ;
}
// We get there when either NavId == id, or when g.NavAnyRequest is set (which is updated by NavUpdateAnyRequestFlag above)
// This is called after LastItemData is set.
static void ImGui : : NavProcessItem ( )
@ -10832,9 +10845,16 @@ static void ImGui::NavProcessItem()
ImGuiContext & g = * GImGui ;
ImGuiWindow * window = g . CurrentWindow ;
const ImGuiID id = g . LastItemData . ID ;
const ImRect nav_bb = g . LastItemData . NavRect ;
const ImGuiItemFlags item_flags = g . LastItemData . InFlags ;
// When inside a container that isn't scrollable with Left<>Right, clip NavRect accordingly (#2221)
if ( window - > DC . NavIsScrollPushableX = = false )
{
g . LastItemData . NavRect . Min . x = ImClamp ( g . LastItemData . NavRect . Min . x , window - > ClipRect . Min . x , window - > ClipRect . Max . x ) ;
g . LastItemData . NavRect . Max . x = ImClamp ( g . LastItemData . NavRect . Max . x , window - > ClipRect . Min . x , window - > ClipRect . Max . x ) ;
}
const ImRect nav_bb = g . LastItemData . NavRect ;
// Process Init Request
if ( g . NavInitRequest & & g . NavLayer = = window - > DC . NavLayerCurrent & & ( item_flags & ImGuiItemFlags_Disabled ) = = 0 )
{
@ -10876,7 +10896,7 @@ static void ImGui::NavProcessItem()
}
}
// Update window-relative bounding box of navigated item
// Update information for currently focused/ navigated item
if ( g . NavId = = id )
{
if ( g . NavWindow ! = window )
@ -10884,7 +10904,7 @@ static void ImGui::NavProcessItem()
g . NavLayer = window - > DC . NavLayerCurrent ;
g . NavFocusScopeId = g . CurrentFocusScopeId ;
g . NavIdIsAlive = true ;
window - > NavRectRel [ window - > DC . NavLayerCurrent ] = WindowRectAbsToRel ( window , nav_bb ) ; // Store item bounding box (relative to window position)
window - > NavRectRel [ window - > DC . NavLayerCurrent ] = WindowRectAbsToRel ( window , nav_bb ) ; // Store item bounding box (relative to window position)
}
}