diff --git a/crates/flare/src/gui/transform_editor.rs b/crates/flare/src/gui/transform_editor.rs index bed65f4..27918b3 100644 --- a/crates/flare/src/gui/transform_editor.rs +++ b/crates/flare/src/gui/transform_editor.rs @@ -140,13 +140,6 @@ pub struct TransformEditor { /// Total range (in IFS coordinates) of the editor window range_ifs: f32, - /// Hover position (in screen coordinates) of the cursor on the previous update. - /// - /// Because of input latency during large drag motions, `egui`'s drag motion - /// isn't precise enough to update transform coefficients. Instead, track the - /// cursor position directly - hover_pos: Option, - /// Transform index the cursor is hovering over hover_index: Option, @@ -162,7 +155,6 @@ impl Default for TransformEditor { Self { center_ifs: Pos2::ZERO, range_ifs: 4.0, - hover_pos: None, hover_index: None, hover_element: None, drag_index: None, @@ -204,6 +196,7 @@ impl TransformEditor { let ifs_to_screen = RectTransform::from_to(ifs_rect, interact_rect); self.interact_update( ui.input(|i| i.pointer.interact_pos()), + ui.input(|i| i.pointer.delta()), ui.input(|i| i.pointer.primary_pressed()), ui.input(|i| i.pointer.primary_released()), ifs_to_screen, @@ -220,6 +213,7 @@ impl TransformEditor { fn interact_update( &mut self, hover_pos: Option, + hover_delta: Vec2, primary_pressed: bool, primary_released: bool, ifs_to_screen: RectTransform, @@ -227,7 +221,6 @@ impl TransformEditor { ) { // If the cursor is not in this widget, reset state if hover_pos.is_none() { - self.hover_pos = None; self.hover_index = None; self.hover_element = None; self.drag_index = None; @@ -247,20 +240,16 @@ impl TransformEditor { // If a transform is being dragged, update its position if self.drag_index.is_some() { - let last_hover_pos = self.hover_pos.unwrap(); let hover_index = self.hover_index.unwrap(); let hover_element = self.hover_element.unwrap(); - let drag_delta_ifs = (hover_pos - last_hover_pos) / ifs_to_screen.scale(); + let hover_delta_ifs = hover_delta / ifs_to_screen.scale(); let transform_triangle: TransformTriangle = transforms[hover_index].into(); transforms[hover_index] = transform_triangle - .interact_drag(hover_element, drag_delta_ifs) + .interact_drag(hover_element, hover_delta_ifs) .into(); } - // Store the hover pos for use on the next update - self.hover_pos = Some(hover_pos); - // Check if the currently-hovered transform is still hovered let mut hover_found = false;