@ -2035,6 +2035,7 @@ bool ImGuiListClipper::Step()
//-----------------------------------------------------------------------------
// ImGuiWindow
// (This type has very few helper methods but otherwise is mostly a dumb struct)
//-----------------------------------------------------------------------------
ImGuiWindow : : ImGuiWindow ( ImGuiContext * context , const char * name )
@ -2145,7 +2146,8 @@ ImGuiID ImGuiWindow::GetIDFromRectangle(const ImRect& r_abs)
}
//-----------------------------------------------------------------------------
// Internal API exposed in imgui_internal.h
// MAIN CODE
// (this category is still too large and badly ordered, needs some tidying up)
//-----------------------------------------------------------------------------
static void SetCurrentWindow ( ImGuiWindow * window )
@ -3969,71 +3971,6 @@ static ImRect GetViewportRect()
return ImRect ( 0.0f , 0.0f , g . IO . DisplaySize . x , g . IO . DisplaySize . y ) ;
}
// Not exposed publicly as BeginTooltip() because bool parameters are evil. Let's see if other needs arise first.
void ImGui : : BeginTooltipEx ( ImGuiWindowFlags extra_flags , bool override_previous_tooltip )
{
ImGuiContext & g = * GImGui ;
char window_name [ 16 ] ;
ImFormatString ( window_name , IM_ARRAYSIZE ( window_name ) , " ##Tooltip_%02d " , g . TooltipOverrideCount ) ;
if ( override_previous_tooltip )
if ( ImGuiWindow * window = FindWindowByName ( window_name ) )
if ( window - > Active )
{
// Hide previous tooltip from being displayed. We can't easily "reset" the content of a window so we create a new one.
window - > Hidden = true ;
window - > HiddenFramesRegular = 1 ;
ImFormatString ( window_name , IM_ARRAYSIZE ( window_name ) , " ##Tooltip_%02d " , + + g . TooltipOverrideCount ) ;
}
ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoNav ;
Begin ( window_name , NULL , flags | extra_flags ) ;
}
void ImGui : : SetTooltipV ( const char * fmt , va_list args )
{
ImGuiContext & g = * GImGui ;
if ( g . DragDropWithinSourceOrTarget )
BeginTooltip ( ) ;
else
BeginTooltipEx ( 0 , true ) ;
TextV ( fmt , args ) ;
EndTooltip ( ) ;
}
void ImGui : : SetTooltip ( const char * fmt , . . . )
{
va_list args ;
va_start ( args , fmt ) ;
SetTooltipV ( fmt , args ) ;
va_end ( args ) ;
}
void ImGui : : BeginTooltip ( )
{
ImGuiContext & g = * GImGui ;
if ( g . DragDropWithinSourceOrTarget )
{
// The default tooltip position is a little offset to give space to see the context menu (it's also clamped within the current viewport/monitor)
// In the context of a dragging tooltip we try to reduce that offset and we enforce following the cursor.
// Whatever we do we want to call SetNextWindowPos() to enforce a tooltip position and disable clipping the tooltip without our display area, like regular tooltip do.
//ImVec2 tooltip_pos = g.IO.MousePos - g.ActiveIdClickOffset - g.Style.WindowPadding;
ImVec2 tooltip_pos = g . IO . MousePos + ImVec2 ( 16 * g . Style . MouseCursorScale , 8 * g . Style . MouseCursorScale ) ;
SetNextWindowPos ( tooltip_pos ) ;
SetNextWindowBgAlpha ( g . Style . Colors [ ImGuiCol_PopupBg ] . w * 0.60f ) ;
//PushStyleVar(ImGuiStyleVar_Alpha, g.Style.Alpha * 0.60f); // This would be nice but e.g ColorButton with checkboard has issue with transparent colors :(
BeginTooltipEx ( 0 , true ) ;
}
else
{
BeginTooltipEx ( 0 , false ) ;
}
}
void ImGui : : EndTooltip ( )
{
IM_ASSERT ( GetCurrentWindowRead ( ) - > Flags & ImGuiWindowFlags_Tooltip ) ; // Mismatched BeginTooltip()/EndTooltip() calls
End ( ) ;
}
static bool ImGui : : BeginChildEx ( const char * name , ImGuiID id , const ImVec2 & size_arg , bool border , ImGuiWindowFlags flags )
{
ImGuiContext & g = * GImGui ;
@ -6399,6 +6336,75 @@ void ImGui::Unindent(float indent_w)
window - > DC . CursorPos . x = window - > Pos . x + window - > DC . Indent . x + window - > DC . ColumnsOffset . x ;
}
//-----------------------------------------------------------------------------
// TOOLTIP
//-----------------------------------------------------------------------------
void ImGui : : BeginTooltip ( )
{
ImGuiContext & g = * GImGui ;
if ( g . DragDropWithinSourceOrTarget )
{
// The default tooltip position is a little offset to give space to see the context menu (it's also clamped within the current viewport/monitor)
// In the context of a dragging tooltip we try to reduce that offset and we enforce following the cursor.
// Whatever we do we want to call SetNextWindowPos() to enforce a tooltip position and disable clipping the tooltip without our display area, like regular tooltip do.
//ImVec2 tooltip_pos = g.IO.MousePos - g.ActiveIdClickOffset - g.Style.WindowPadding;
ImVec2 tooltip_pos = g . IO . MousePos + ImVec2 ( 16 * g . Style . MouseCursorScale , 8 * g . Style . MouseCursorScale ) ;
SetNextWindowPos ( tooltip_pos ) ;
SetNextWindowBgAlpha ( g . Style . Colors [ ImGuiCol_PopupBg ] . w * 0.60f ) ;
//PushStyleVar(ImGuiStyleVar_Alpha, g.Style.Alpha * 0.60f); // This would be nice but e.g ColorButton with checkboard has issue with transparent colors :(
BeginTooltipEx ( 0 , true ) ;
}
else
{
BeginTooltipEx ( 0 , false ) ;
}
}
// Not exposed publicly as BeginTooltip() because bool parameters are evil. Let's see if other needs arise first.
void ImGui : : BeginTooltipEx ( ImGuiWindowFlags extra_flags , bool override_previous_tooltip )
{
ImGuiContext & g = * GImGui ;
char window_name [ 16 ] ;
ImFormatString ( window_name , IM_ARRAYSIZE ( window_name ) , " ##Tooltip_%02d " , g . TooltipOverrideCount ) ;
if ( override_previous_tooltip )
if ( ImGuiWindow * window = FindWindowByName ( window_name ) )
if ( window - > Active )
{
// Hide previous tooltip from being displayed. We can't easily "reset" the content of a window so we create a new one.
window - > Hidden = true ;
window - > HiddenFramesRegular = 1 ;
ImFormatString ( window_name , IM_ARRAYSIZE ( window_name ) , " ##Tooltip_%02d " , + + g . TooltipOverrideCount ) ;
}
ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoNav ;
Begin ( window_name , NULL , flags | extra_flags ) ;
}
void ImGui : : EndTooltip ( )
{
IM_ASSERT ( GetCurrentWindowRead ( ) - > Flags & ImGuiWindowFlags_Tooltip ) ; // Mismatched BeginTooltip()/EndTooltip() calls
End ( ) ;
}
void ImGui : : SetTooltipV ( const char * fmt , va_list args )
{
ImGuiContext & g = * GImGui ;
if ( g . DragDropWithinSourceOrTarget )
BeginTooltip ( ) ;
else
BeginTooltipEx ( 0 , true ) ;
TextV ( fmt , args ) ;
EndTooltip ( ) ;
}
void ImGui : : SetTooltip ( const char * fmt , . . . )
{
va_list args ;
va_start ( args , fmt ) ;
SetTooltipV ( fmt , args ) ;
va_end ( args ) ;
}
//-----------------------------------------------------------------------------
// POPUPS
//-----------------------------------------------------------------------------