Skip to main content

jellyflow_runtime/io/config/state/views/
node_drag.rs

1use 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/// Node dragging, snapping, and node-space settings resolved for runtime use.
10#[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}