@ -1418,13 +1418,8 @@ void* ImFileLoadToMemory(const char* filename, const char* file_open_mode, int*
//-----------------------------------------------------------------------------
// ImGuiStorage
//-----------------------------------------------------------------------------
// Helper: Key->value storage
void ImGuiStorage : : Clear ( )
{
Data . clear ( ) ;
}
//-----------------------------------------------------------------------------
// std::lower_bound but without the bullshit
static ImVector < ImGuiStorage : : Pair > : : iterator LowerBound ( ImVector < ImGuiStorage : : Pair > & data , ImGuiID key )
@ -1694,7 +1689,7 @@ void ImGuiTextBuffer::append(const char* fmt, ...)
}
//-----------------------------------------------------------------------------
// ImGuiSimpleColumns
// ImGuiSimpleColumns (internal use only)
//-----------------------------------------------------------------------------
ImGuiSimpleColumns : : ImGuiSimpleColumns ( )
@ -4925,7 +4920,10 @@ static ImVec2 CalcSizeFullWithConstraint(ImGuiWindow* window, ImVec2 new_size)
}
}
if ( ! ( window - > Flags & ( ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_AlwaysAutoResize ) ) )
{
new_size = ImMax ( new_size , g . Style . WindowMinSize ) ;
new_size . y = ImMax ( new_size . y , window - > TitleBarHeight ( ) + window - > MenuBarHeight ( ) + ImMax ( 0.0f , g . Style . WindowRounding - 1.0f ) ) ; // Reduce artifacts with very small windows
}
return new_size ;
}
@ -5207,7 +5205,10 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
window - > SizeFull = CalcSizeFullWithConstraint ( window , window - > SizeFull ) ;
window - > Size = window - > Collapsed ? window - > TitleBarRect ( ) . GetSize ( ) : window - > SizeFull ;
if ( ( flags & ImGuiWindowFlags_ChildWindow ) & & ! ( flags & ImGuiWindowFlags_Popup ) )
{
IM_ASSERT ( window_size_set_by_api ) ; // Submitted by BeginChild()
window - > Size = window - > SizeFull ;
}
// SCROLLBAR STATUS
@ -5230,11 +5231,8 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
window - > OrderWithinParent = parent_window - > DC . ChildWindows . Size ;
parent_window - > DC . ChildWindows . push_back ( window ) ;
}
if ( ( flags & ImGuiWindowFlags_ChildWindow ) & & ! ( flags & ImGuiWindowFlags_Popup ) )
{
IM_ASSERT ( window_size_set_by_api ) ; // Submitted by BeginChild()
if ( ( flags & ImGuiWindowFlags_ChildWindow ) & & ! ( flags & ImGuiWindowFlags_Popup ) & & ! window_pos_set_by_api )
window - > Pos = window - > PosFloat = parent_window - > DC . CursorPos ;
}
const bool window_pos_with_pivot = ( window - > SetWindowPosVal . x ! = FLT_MAX & & window - > HiddenFrames = = 0 ) ;
if ( window_pos_with_pivot )
@ -5554,6 +5552,11 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
window - > InnerRect . Max . x = window - > Pos . x + window - > Size . x - window - > ScrollbarSizes . x ;
window - > InnerRect . Max . y = window - > Pos . y + window - > Size . y - window - > ScrollbarSizes . y ;
//window->DrawList->AddRect(window->InnerRect.Min, window->InnerRect.Max, IM_COL32_WHITE);
// After Begin() we fill the last item / hovered data using the title bar data. Make that a standard behavior (to allow usage of context menus on title bar only, etc.).
window - > DC . LastItemId = window - > MoveId ;
window - > DC . LastItemRect = title_bar_rect ;
window - > DC . LastItemRectHoveredRect = IsMouseHoveringRect ( title_bar_rect . Min , title_bar_rect . Max , false ) ;
}
// Inner clipping rectangle
@ -5747,10 +5750,12 @@ void ImGui::Scrollbar(ImGuiLayoutType direction)
// Render
const ImU32 grab_col = GetColorU32 ( held ? ImGuiCol_ScrollbarGrabActive : hovered ? ImGuiCol_ScrollbarGrabHovered : ImGuiCol_ScrollbarGrab ) ;
ImRect grab_rect ;
if ( horizontal )
window- > DrawList - > AddRectFilled ( ImVec2 ( ImLerp ( bb . Min . x , bb . Max . x , grab_v_norm ) , bb . Min . y ), ImVec2 ( ImLerp ( bb . Min . x , bb . Max . x , grab_v_norm ) + grab_h_pixels , bb. Max . y ) , grab_col , style . ScrollbarRounding ) ;
grab_rect = ImRect ( ImLerp ( bb . Min . x , bb . Max . x , grab_v_norm ) , bb . Min . y , ImMin ( ImLerp ( bb . Min . x , bb . Max . x , grab_v_norm ) + grab_h_pixels , window_rect. Max . x ) , bb . Max . y ) ;
else
window - > DrawList - > AddRectFilled ( ImVec2 ( bb . Min . x , ImLerp ( bb . Min . y , bb . Max . y , grab_v_norm ) ) , ImVec2 ( bb . Max . x , ImLerp ( bb . Min . y , bb . Max . y , grab_v_norm ) + grab_h_pixels ) , grab_col , style . ScrollbarRounding ) ;
grab_rect = ImRect ( bb . Min . x , ImLerp ( bb . Min . y , bb . Max . y , grab_v_norm ) , bb . Max . x , ImMin ( ImLerp ( bb . Min . y , bb . Max . y , grab_v_norm ) + grab_h_pixels , window_rect . Max . y ) ) ;
window - > DrawList - > AddRectFilled ( grab_rect . Min , grab_rect . Max , grab_col , style . ScrollbarRounding ) ;
}
// Moving window to front of display (which happens to be back of our sorted list)
@ -10322,10 +10327,12 @@ bool ImGui::BeginMenuBar()
if ( ! ( window - > Flags & ImGuiWindowFlags_MenuBar ) )
return false ;
ImGuiContext & g = * GImGui ;
IM_ASSERT ( ! window - > DC . MenuBarAppending ) ;
BeginGroup ( ) ; // Save position
PushID ( " ##menubar " ) ;
ImRect rect = window - > MenuBarRect ( ) ;
rect . Max . x = ImMax ( rect . Min . x , rect . Max . x - g . Style . WindowRounding ) ;
PushClipRect ( ImVec2 ( ImFloor ( rect . Min . x + 0.5f ) , ImFloor ( rect . Min . y + window - > BorderSize + 0.5f ) ) , ImVec2 ( ImFloor ( rect . Max . x + 0.5f ) , ImFloor ( rect . Max . y + 0.5f ) ) , false ) ;
window - > DC . CursorPos = ImVec2 ( rect . Min . x + window - > DC . MenuBarOffsetX , rect . Min . y ) ; // + g.Style.FramePadding.y);
window - > DC . LayoutType = ImGuiLayoutType_Horizontal ;
@ -10401,6 +10408,7 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
{
// Menu inside an horizontal menu bar
// Selectable extend their highlight by half ItemSpacing in each direction.
// For ChildMenu, the popup position will be overwritten by the call to FindBestPopupWindowPos() in Begin()
popup_pos = ImVec2 ( pos . x - window - > WindowPadding . x , pos . y - style . FramePadding . y + window - > MenuBarHeight ( ) ) ;
window - > DC . CursorPos . x + = ( float ) ( int ) ( style . ItemSpacing . x * 0.5f ) ;
PushStyleVar ( ImGuiStyleVar_ItemSpacing , style . ItemSpacing * 2.0f ) ;