Get the interaction delta from egui
This commit is contained in:
parent
58aad8dbab
commit
74139cc54b
@ -140,13 +140,6 @@ pub struct TransformEditor {
|
|||||||
/// Total range (in IFS coordinates) of the editor window
|
/// Total range (in IFS coordinates) of the editor window
|
||||||
range_ifs: f32,
|
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<Pos2>,
|
|
||||||
|
|
||||||
/// Transform index the cursor is hovering over
|
/// Transform index the cursor is hovering over
|
||||||
hover_index: Option<usize>,
|
hover_index: Option<usize>,
|
||||||
|
|
||||||
@ -162,7 +155,6 @@ impl Default for TransformEditor {
|
|||||||
Self {
|
Self {
|
||||||
center_ifs: Pos2::ZERO,
|
center_ifs: Pos2::ZERO,
|
||||||
range_ifs: 4.0,
|
range_ifs: 4.0,
|
||||||
hover_pos: None,
|
|
||||||
hover_index: None,
|
hover_index: None,
|
||||||
hover_element: None,
|
hover_element: None,
|
||||||
drag_index: None,
|
drag_index: None,
|
||||||
@ -204,6 +196,7 @@ impl TransformEditor {
|
|||||||
let ifs_to_screen = RectTransform::from_to(ifs_rect, interact_rect);
|
let ifs_to_screen = RectTransform::from_to(ifs_rect, interact_rect);
|
||||||
self.interact_update(
|
self.interact_update(
|
||||||
ui.input(|i| i.pointer.interact_pos()),
|
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_pressed()),
|
||||||
ui.input(|i| i.pointer.primary_released()),
|
ui.input(|i| i.pointer.primary_released()),
|
||||||
ifs_to_screen,
|
ifs_to_screen,
|
||||||
@ -220,6 +213,7 @@ impl TransformEditor {
|
|||||||
fn interact_update(
|
fn interact_update(
|
||||||
&mut self,
|
&mut self,
|
||||||
hover_pos: Option<Pos2>,
|
hover_pos: Option<Pos2>,
|
||||||
|
hover_delta: Vec2,
|
||||||
primary_pressed: bool,
|
primary_pressed: bool,
|
||||||
primary_released: bool,
|
primary_released: bool,
|
||||||
ifs_to_screen: RectTransform,
|
ifs_to_screen: RectTransform,
|
||||||
@ -227,7 +221,6 @@ impl TransformEditor {
|
|||||||
) {
|
) {
|
||||||
// If the cursor is not in this widget, reset state
|
// If the cursor is not in this widget, reset state
|
||||||
if hover_pos.is_none() {
|
if hover_pos.is_none() {
|
||||||
self.hover_pos = None;
|
|
||||||
self.hover_index = None;
|
self.hover_index = None;
|
||||||
self.hover_element = None;
|
self.hover_element = None;
|
||||||
self.drag_index = None;
|
self.drag_index = None;
|
||||||
@ -247,20 +240,16 @@ impl TransformEditor {
|
|||||||
|
|
||||||
// If a transform is being dragged, update its position
|
// If a transform is being dragged, update its position
|
||||||
if self.drag_index.is_some() {
|
if self.drag_index.is_some() {
|
||||||
let last_hover_pos = self.hover_pos.unwrap();
|
|
||||||
let hover_index = self.hover_index.unwrap();
|
let hover_index = self.hover_index.unwrap();
|
||||||
let hover_element = self.hover_element.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();
|
let transform_triangle: TransformTriangle = transforms[hover_index].into();
|
||||||
transforms[hover_index] = transform_triangle
|
transforms[hover_index] = transform_triangle
|
||||||
.interact_drag(hover_element, drag_delta_ifs)
|
.interact_drag(hover_element, hover_delta_ifs)
|
||||||
.into();
|
.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
|
// Check if the currently-hovered transform is still hovered
|
||||||
let mut hover_found = false;
|
let mut hover_found = false;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user