forked from 1b-agent/opencadstudio-upstream
fix(hover): defer rollover pick until the cursor stops
The rollover hit-test now sweeps wires, hatches, block-internal hatches and shaded solid bodies, which is O(N) per cursor frame and was freezing the crosshair on large drawings. Each idle move now clears the live highlight and arms a dwell timer; HoverDwellTick runs the pick once the cursor has been still for HOVER_DWELL_MS (120 ms), using the active tile's bounds so the deferred pick matches the entity actually under the cursor in tiled viewports. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
f860fb39c2
commit
082018756e
3 files changed
+105
-35
No files matched your search
@@ -1623,6 +1623,14 @@ impl OpenCADStudio {
|
||||
} else {
|
||||
Subscription::none()
|
||||
};
|
||||
// While a rollover pick is queued, drive ticks so it fires the
|
||||
// moment the cursor has been still for the dwell window — without
|
||||
// this `ViewportMove` alone never re-fires once the user stops.
|
||||
let hover_dwell = if self.hover_dwell.is_some() {
|
||||
window::frames().map(|_| Message::HoverDwellTick)
|
||||
} else {
|
||||
Subscription::none()
|
||||
};
|
||||
// Blink the MText preview caret while the editor is open.
|
||||
let caret_blink = if self.mtext_editor.is_some() {
|
||||
iced::time::every(std::time::Duration::from_millis(530))
|
||||
@@ -1642,6 +1650,7 @@ impl OpenCADStudio {
|
||||
frames,
|
||||
history_tick,
|
||||
grip_dwell,
|
||||
hover_dwell,
|
||||
caret_blink,
|
||||
web_fonts,
|
||||
event::listen_with(|ev, status, win_id| {
|
||||
|
||||
Reference in new issue
Block a user