@ -2328,7 +2328,7 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name)
Name = ImStrdup ( name ) ;
ID = ImHash ( name , 0 ) ;
IDStack . push_back ( ID ) ;
Flags = 0 ;
Flags = ImGuiWindowFlags_None ;
Pos = ImVec2 ( 0.0f , 0.0f ) ;
Size = SizeFull = ImVec2 ( 0.0f , 0.0f ) ;
SizeContents = SizeContentsExplicit = ImVec2 ( 0.0f , 0.0f ) ;
@ -2620,7 +2620,7 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg)
window - > DC . LastItemId = id ;
window - > DC . LastItemRect = bb ;
window - > DC . LastItemStatusFlags = 0 ;
window - > DC . LastItemStatusFlags = ImGuiItemStatusFlags_None ;
# ifdef IMGUI_ENABLE_TEST_ENGINE
ImGuiTestEngineHook_ItemAdd ( id , bb ) ;
@ -4017,7 +4017,8 @@ bool ImGui::IsItemDeactivatedAfterEdit()
bool ImGui : : IsItemFocused ( )
{
ImGuiContext & g = * GImGui ;
return g . NavId & & ! g . NavDisableHighlight & & g . NavId = = g . CurrentWindow - > DC . LastItemId ;
ImGuiWindow * window = g . CurrentWindow ;
return g . NavId & & ! g . NavDisableHighlight & & g . NavId = = window - > DC . LastItemId ;
}
bool ImGui : : IsItemClicked ( int mouse_button )
@ -4607,6 +4608,8 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
const int current_frame = g . FrameCount ;
const bool first_begin_of_the_frame = ( window - > LastFrameActive ! = current_frame ) ;
// Update Flags, LastFrameActive, BeginOrderXXX fields
if ( first_begin_of_the_frame )
window - > Flags = ( ImGuiWindowFlags ) flags ;
else
@ -4940,9 +4943,11 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
g . NextWindowData . BgAlphaCond = 0 ;
// Title bar
ImU32 title_bar_col = GetColorU32 ( window - > Collapsed ? ImGuiCol_TitleBgCollapsed : title_bar_is_highlight ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg ) ;
if ( ! ( flags & ImGuiWindowFlags_NoTitleBar ) )
{
ImU32 title_bar_col = GetColorU32 ( window - > Collapsed ? ImGuiCol_TitleBgCollapsed : title_bar_is_highlight ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg ) ;
window - > DrawList - > AddRectFilled ( title_bar_rect . Min , title_bar_rect . Max , title_bar_col , window_rounding , ImDrawCornerFlags_Top ) ;
}
// Menu bar
if ( flags & ImGuiWindowFlags_MenuBar )
@ -5166,7 +5171,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
window - > HiddenFramesRegular = 1 ;
// Update the Hidden flag
window - > Hidden = ( window - > HiddenFramesRegular > 0 ) | | ( window - > HiddenFramesForResize ) ;
window - > Hidden = ( window - > HiddenFramesRegular > 0 ) | | ( window - > HiddenFramesForResize > 0 ) ;
// Return false if we don't intend to display anything to allow user to perform an early out optimization
window - > SkipItems = ( window - > Collapsed | | ! window - > Active | | window - > Hidden ) & & window - > AutoFitFramesX < = 0 & & window - > AutoFitFramesY < = 0 & & window - > HiddenFramesForResize < = 0 ;
@ -6574,7 +6579,8 @@ bool ImGui::BeginPopup(const char* str_id, ImGuiWindowFlags flags)
g . NextWindowData . Clear ( ) ; // We behave like Begin() and need to consume those values
return false ;
}
return BeginPopupEx ( g . CurrentWindow - > GetID ( str_id ) , flags | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings ) ;
flags | = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings ;
return BeginPopupEx ( g . CurrentWindow - > GetID ( str_id ) , flags ) ;
}
bool ImGui : : BeginPopupModal ( const char * name , bool * p_open , ImGuiWindowFlags flags )
@ -6593,7 +6599,8 @@ bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags fla
if ( g . NextWindowData . PosCond = = 0 )
SetNextWindowPos ( g . IO . DisplaySize * 0.5f , ImGuiCond_Appearing , ImVec2 ( 0.5f , 0.5f ) ) ;
bool is_open = Begin ( name , p_open , flags | ImGuiWindowFlags_Popup | ImGuiWindowFlags_Modal | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings ) ;
flags | = ImGuiWindowFlags_Popup | ImGuiWindowFlags_Modal | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings ;
const bool is_open = Begin ( name , p_open , flags ) ;
if ( ! is_open | | ( p_open & & ! * p_open ) ) // NB: is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
{
EndPopup ( ) ;
@ -6756,6 +6763,12 @@ ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window)
return window - > Pos ;
}
//-----------------------------------------------------------------------------
// [SECTION] VIEWPORTS, PLATFORM WINDOWS
//-----------------------------------------------------------------------------
// (this section is filled in the 'viewport' and 'docking' branches)
//-----------------------------------------------------------------------------
// [SECTION] KEYBOARD/GAMEPAD NAVIGATION
//-----------------------------------------------------------------------------
@ -6857,7 +6870,7 @@ static bool NavScoreItem(ImGuiNavMoveResult* result, ImRect cand)
if ( ImGui : : IsMouseHoveringRect ( cand . Min , cand . Max ) )
{
ImFormatString ( buf , IM_ARRAYSIZE ( buf ) , " dbox (%.2f,%.2f->%.4f) \n dcen (%.2f,%.2f->%.4f) \n d (%.2f,%.2f->%.4f) \n nav %c, quadrant %c " , dbx , dby , dist_box , dcx , dcy , dist_center , dax , day , dist_axial , " WENS " [ g . NavMoveDir ] , " WENS " [ quadrant ] ) ;
ImDrawList * draw_list = GetOverlayDrawList( window ) ;
ImDrawList * draw_list = ImGui: : GetOverlayDrawList( window ) ;
draw_list - > AddRect ( curr . Min , curr . Max , IM_COL32 ( 255 , 200 , 0 , 100 ) ) ;
draw_list - > AddRect ( cand . Min , cand . Max , IM_COL32 ( 255 , 255 , 0 , 200 ) ) ;
draw_list - > AddRectFilled ( cand . Max - ImVec2 ( 4 , 4 ) , cand . Max + ImGui : : CalcTextSize ( buf ) + ImVec2 ( 4 , 4 ) , IM_COL32 ( 40 , 0 , 0 , 150 ) ) ;
@ -6869,7 +6882,7 @@ static bool NavScoreItem(ImGuiNavMoveResult* result, ImRect cand)
if ( quadrant = = g . NavMoveDir )
{
ImFormatString ( buf , IM_ARRAYSIZE ( buf ) , " %.0f/%.0f " , dist_box , dist_center ) ;
ImDrawList * draw_list = GetOverlayDrawList( window ) ;
ImDrawList * draw_list = ImGui: : GetOverlayDrawList( window ) ;
draw_list - > AddRectFilled ( cand . Min , cand . Max , IM_COL32 ( 255 , 0 , 0 , 200 ) ) ;
draw_list - > AddText ( g . IO . FontDefault , 13.0f , cand . Min , IM_COL32 ( 255 , 255 , 255 , 255 ) , buf ) ;
}
@ -7173,7 +7186,7 @@ ImVec2 ImGui::GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInput
static void NavScrollToBringItemIntoView ( ImGuiWindow * window , const ImRect & item_rect )
{
ImRect window_rect ( window - > InnerMainRect . Min - ImVec2 ( 1 , 1 ) , window - > InnerMainRect . Max + ImVec2 ( 1 , 1 ) ) ;
// g.OverlayDrawList. AddRect(window_rect.Min, window_rect.Max, IM_COL32_WHITE); // [DEBUG]
// GetOverlayDrawList(window)-> AddRect(window_rect.Min, window_rect.Max, IM_COL32_WHITE); // [DEBUG]
if ( window_rect . Contains ( item_rect ) )
return ;
@ -7365,7 +7378,7 @@ static void ImGui::NavUpdate()
if ( g . NavMoveRequestForward = = ImGuiNavForward_None )
{
g . NavMoveDir = ImGuiDir_None ;
g . NavMoveRequestFlags = 0 ;
g . NavMoveRequestFlags = ImGuiNavMoveFlags_None ;
if ( g . NavWindow & & ! g . NavWindowingTarget & & allowed_dir_flags & & ! ( g . NavWindow - > Flags & ImGuiWindowFlags_NoNavInputs ) )
{
if ( ( allowed_dir_flags & ( 1 < < ImGuiDir_Left ) ) & & IsNavInputPressedAnyOfTwo ( ImGuiNavInput_DpadLeft , ImGuiNavInput_KeyLeft_ , ImGuiInputReadMode_Repeat ) ) g . NavMoveDir = ImGuiDir_Left ;
@ -7716,7 +7729,9 @@ static void ImGui::NavUpdateWindowing()
{
// Move to parent menu if necessary
ImGuiWindow * new_nav_window = g . NavWindow ;
while ( ( new_nav_window - > DC . NavLayerActiveMask & ( 1 < < 1 ) ) = = 0 & & ( new_nav_window - > Flags & ImGuiWindowFlags_ChildWindow ) ! = 0 & & ( new_nav_window - > Flags & ( ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu ) ) = = 0 )
while ( ( new_nav_window - > DC . NavLayerActiveMask & ( 1 < < 1 ) ) = = 0
& & ( new_nav_window - > Flags & ImGuiWindowFlags_ChildWindow ) ! = 0
& & ( new_nav_window - > Flags & ( ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu ) ) = = 0 )
new_nav_window = new_nav_window - > ParentWindow ;
if ( new_nav_window ! = g . NavWindow )
{
@ -8101,7 +8116,7 @@ void ImGui::ClearDragDrop()
ImGuiContext & g = * GImGui ;
g . DragDropActive = false ;
g . DragDropPayload . Clear ( ) ;
g . DragDropAcceptFlags = 0 ;
g . DragDropAcceptFlags = ImGuiDragDropFlags_None ;
g . DragDropAcceptIdCurr = g . DragDropAcceptIdPrev = 0 ;
g . DragDropAcceptIdCurrRectSurface = FLT_MAX ;
g . DragDropAcceptFrameCount = - 1 ;
@ -8385,6 +8400,12 @@ void ImGui::EndDragDropTarget()
g . DragDropWithinSourceOrTarget = false ;
}
//-----------------------------------------------------------------------------
// [SECTION] DOCKING
//-----------------------------------------------------------------------------
// (this section is filled in the 'docking' branch)
//-----------------------------------------------------------------------------
// [SECTION] LOGGING/CAPTURING
//-----------------------------------------------------------------------------
@ -8892,6 +8913,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
ImGui : : End ( ) ;
return ;
}
static bool show_draw_cmd_clip_rects = true ;
static bool show_window_begin_order = false ;
ImGuiIO & io = ImGui : : GetIO ( ) ;
@ -8902,7 +8924,6 @@ void ImGui::ShowMetricsWindow(bool* p_open)
ImGui : : Text ( " %d allocations " , io . MetricsActiveAllocations ) ;
ImGui : : Checkbox ( " Show clipping rectangles when hovering draw commands " , & show_draw_cmd_clip_rects ) ;
ImGui : : Checkbox ( " Ctrl shows window begin order " , & show_window_begin_order ) ;
ImGui : : Separator ( ) ;
struct Funcs