a button's own bounds and tooltip, whether or not the button is disabled
wires a PointerTracker (Input.attachPointer) to the host; returns the function that unwires it
a finger or button went down: the tooltip shows once it has rested for longPress
a pointer with no button down moved: the usual hover
the finger or button came up
true on the frame the tooltip appears, as Tooltip.update does
Drives one
Tooltipfrom rectangles instead of from each widget's own pointer events, which is what makes it work in the two places hover cannot reach: on a touch screen (a press that rests forlongPressseconds shows the text, and releasing hides it) and over a disabledButton, which has no pointer events to receive (the host tests the button's bounds itself, and a greyed-out button is exactly the one worth explaining).Feed it pointer positions with
pointerMove,pointerDownandpointerUp(orattachaPointerTracker), and callupdate(dt)each frame. The later a target was added, the higher it counts when targets overlap.Example