jellyflow_runtime/io/config/state/views/
node_drag.rs1use jellyflow_core::core::{CanvasRect, CanvasSize};
2use jellyflow_core::interaction::NodeGraphDragHandleMode;
3
4use crate::io::config::types::NodeGraphNodeOrigin;
5use crate::io::tuning::NodeGraphAutoPanTuning;
6
7use super::super::NodeGraphInteractionState;
8
9#[derive(Debug, Clone, Copy, PartialEq)]
11pub struct NodeGraphNodeDragInteraction<'a> {
12 pub nodes_draggable: bool,
13 pub snap_to_grid: bool,
14 pub snap_grid: CanvasSize,
15 pub snaplines: bool,
16 pub snaplines_threshold: f32,
17 pub node_drag_threshold: f32,
18 pub node_drag_handle_mode: NodeGraphDragHandleMode,
19 pub node_click_distance: f32,
20 pub node_extent: Option<CanvasRect>,
21 pub node_origin: NodeGraphNodeOrigin,
22 pub auto_pan: &'a NodeGraphAutoPanTuning,
23}
24
25impl NodeGraphInteractionState {
26 pub fn node_drag_interaction(&self) -> NodeGraphNodeDragInteraction<'_> {
27 NodeGraphNodeDragInteraction {
28 nodes_draggable: self.nodes_draggable,
29 snap_to_grid: self.snap_to_grid,
30 snap_grid: self.snap_grid,
31 snaplines: self.snaplines,
32 snaplines_threshold: self.snaplines_threshold,
33 node_drag_threshold: self.node_drag_threshold,
34 node_drag_handle_mode: self.node_drag_handle_mode,
35 node_click_distance: self.node_click_distance,
36 node_extent: self.node_extent,
37 node_origin: self.node_origin,
38 auto_pan: &self.auto_pan,
39 }
40 }
41}