@ -2157,7 +2157,7 @@ void ImGui::NewFrame()
g . Time + = g . IO . DeltaTime ;
g . FrameCount + = 1 ;
g . Tooltip [ 0 ] = ' \0 ' ;
g . Tooltip OverrideCount = 0 ;
g . OverlayDrawList . Clear ( ) ;
g . OverlayDrawList . PushTextureID ( g . IO . Fonts - > TexID ) ;
g . OverlayDrawList . PushClipRectFullScreen ( ) ;
@ -2657,14 +2657,6 @@ void ImGui::EndFrame()
IM_ASSERT ( g . Initialized ) ; // Forgot to call ImGui::NewFrame()
IM_ASSERT ( g . FrameCountEnded ! = g . FrameCount ) ; // ImGui::EndFrame() called multiple times, or forgot to call ImGui::NewFrame() again
// Render tooltip
if ( g . Tooltip [ 0 ] )
{
ImGui : : BeginTooltip ( ) ;
ImGui : : TextUnformatted ( g . Tooltip ) ;
ImGui : : EndTooltip ( ) ;
}
// Notify OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME)
if ( g . IO . ImeSetInputScreenPosFn & & ImLengthSqr ( g . OsImePosRequest - g . OsImePosSet ) > 0.0001f )
{
@ -3388,11 +3380,28 @@ static ImRect GetVisibleRect()
return ImRect ( 0.0f , 0.0f , g . IO . DisplaySize . x , g . IO . DisplaySize . y ) ;
}
// Tooltip is stored and turned into a BeginTooltip()/EndTooltip() sequence at the end of the frame. Each call override previous value .
void ImGui : : SetTooltipV ( const char * fmt , va_list args )
// Not exposed publicly as BeginTooltip() because bool parameters are evil. Let's see if other needs arise first .
static void BeginTooltipEx ( bool override_previous_tooltip )
{
ImGuiContext & g = * GImGui ;
ImFormatStringV ( g . Tooltip , IM_ARRAYSIZE ( g . Tooltip ) , fmt , args ) ;
char window_name [ 16 ] ;
ImFormatString ( window_name , IM_ARRAYSIZE ( window_name ) , " ##Tooltip%02d " , g . TooltipOverrideCount ) ;
if ( override_previous_tooltip )
if ( ImGuiWindow * window = ImGui : : FindWindowByName ( window_name ) )
if ( window - > Active )
{
// Hide previous tooltips. We can't easily "reset" the content of a window so we create a new one.
window - > HiddenFrames = 1 ;
ImFormatString ( window_name , IM_ARRAYSIZE ( window_name ) , " ##Tooltip%02d " , + + g . TooltipOverrideCount ) ;
}
ImGui : : Begin ( window_name , NULL , ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_AlwaysAutoResize ) ;
}
void ImGui : : SetTooltipV ( const char * fmt , va_list args )
{
BeginTooltipEx ( true ) ;
TextV ( fmt , args ) ;
EndTooltip ( ) ;
}
void ImGui : : SetTooltip ( const char * fmt , . . . )
@ -3405,8 +3414,7 @@ void ImGui::SetTooltip(const char* fmt, ...)
void ImGui : : BeginTooltip ( )
{
ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_AlwaysAutoResize ;
ImGui : : Begin ( " ##Tooltip " , NULL , flags ) ;
BeginTooltipEx ( false ) ;
}
void ImGui : : EndTooltip ( )