mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-15 03:41:28 +00:00
Texture displacement: keep a tooltip on screen long enough to be seen
A tooltip appeared only on the next pixel of mouse movement after its wait had finished. ImGui hides a window on the first frame it is submitted, to measure it before showing it, and does so every time a tooltip reappears because those windows are recycled (the Popup|Tooltip branch of Begin()). So the frame a tooltip is decided on is never the frame it is seen on, and one carrying no animation asked for nothing further - leaving it in its hidden measuring frame until some other event happened to produce the next one. Before the hover delay this never showed, because the tooltip was submitted on every mouse-move frame and the movement supplied the second. It now asks for frames until it has been drawn twice in a row.
This commit is contained in:
@@ -57,7 +57,10 @@ afterwards rather than the short one: having just let go of a slider is not a re
|
||||
picture of it.
|
||||
|
||||
A pointer resting on a control produces no events, and the canvas only renders when something asks it
|
||||
to, so the wait has to ask for its own frames, and so does an animation once one is on screen. Both use
|
||||
to, so the wait has to ask for its own frames, and so does an animation once one is on screen. So does
|
||||
a tooltip that has just appeared, animated or not: ImGui hides a window on the first frame it is
|
||||
submitted while it measures it, and does so every time a tooltip reappears because those windows are
|
||||
recycled, so the frame a tooltip is decided on is never the frame it is seen on. Both use
|
||||
`GLCanvas3D::request_extra_frame()`, which ends `on_idle()` with `evt.RequestMore()` and so obliges wx
|
||||
to deliver the next idle. `schedule_extra_frame()` is not enough on its own: it only arranges a timer
|
||||
whose event an idle event is assumed to follow, and on_idle renders nothing unless the canvas was
|
||||
|
||||
Reference in New Issue
Block a user