|
@@ -2157,7 +2157,7 @@ void ImGui::NewFrame()
|
|
|
|
|
|
g.Time += g.IO.DeltaTime;
|
|
|
g.FrameCount += 1;
|
|
|
- g.Tooltip[0] = '\0';
|
|
|
+ g.TooltipOverrideCount = 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()
|