11package imgui.imgui
22
33import imgui.*
4+ import imgui.ImGui.begin
45import imgui.ImGui.currentWindowRead
5- import imgui.Context.style
6+ import imgui.ImGui.end
7+ import imgui.ImGui.findWindowByName
8+ import imgui.ImGui.style
9+ import imgui.ImGui.textV
610import imgui.Context as g
711
812/* * Tooltips */
913interface imgui_tooltips {
1014
11- /* * set tooltip under mouse-cursor, typically use with ImGui::IsHovered(). last call wins
12- *
13- * Tooltip is stored and turned into a BeginTooltip()/EndTooltip() sequence at the end of the frame.
14- * Each call override previous value.*/
15- fun setTooltip (fmt : String , vararg values : Any ) {
16- g.tooltip = fmt.format(style.locale, * values)
15+ /* * Not exposed publicly as BeginTooltip() because bool parameters are evil. Let's see if other needs arise first. */
16+ fun beginTooltipEx (overridePreviousTooltip : Boolean ) {
17+
18+ var windowName = " ##Tooltip%02d" .format(style.locale, g.tooltipOverrideCount)
19+ if (overridePreviousTooltip)
20+ findWindowByName(windowName)?.let {
21+ if (it.active) {
22+ // Hide previous tooltips. We can't easily "reset" the content of a window so we create a new one.
23+ it.hiddenFrames = 1
24+ windowName = " ##Tooltip%02d" .format(++ g.tooltipOverrideCount)
25+ }
26+ }
27+ begin(windowName, null , WindowFlags .Tooltip or WindowFlags .NoTitleBar or WindowFlags .NoMove or
28+ WindowFlags .NoResize or WindowFlags .NoSavedSettings or WindowFlags .AlwaysAutoResize )
1729 }
1830
19- /* * use to create full-featured tooltip windows that aren't just text */
20- fun beginTooltip () {
21- val flags = WindowFlags .Tooltip or WindowFlags .NoTitleBar or WindowFlags .NoMove or WindowFlags .NoResize or
22- WindowFlags .NoSavedSettings or WindowFlags .AlwaysAutoResize
23- ImGui .begin(" ##Tooltip" , null , flags)
31+ fun setTooltipV (fmt : String , args : Array <out Any >) {
32+ beginTooltipEx(true )
33+ textV(fmt, args)
34+ endTooltip()
2435 }
2536
37+ fun setTooltip (fmt : String , vararg args : Any ) = setTooltipV(fmt, args)
38+
39+ /* * begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). */
40+ fun beginTooltip () = beginTooltipEx(false )
41+
2642 fun endTooltip () {
2743 assert (currentWindowRead!! .flags has WindowFlags .Tooltip ) // Mismatched BeginTooltip()/EndTooltip() calls
28- ImGui . end()
44+ end()
2945 }
3046}
0 commit comments