Skip to main content

jellyflow_runtime/io/config/state/
split.rs

1use crate::io::config::interaction::NodeGraphInteractionConfig;
2use crate::io::tuning::NodeGraphRuntimeTuning;
3
4use super::NodeGraphInteractionState;
5
6impl NodeGraphInteractionState {
7    pub fn from_parts(
8        config: &NodeGraphInteractionConfig,
9        runtime_tuning: &NodeGraphRuntimeTuning,
10    ) -> Self {
11        Self {
12            elements_selectable: config.elements_selectable,
13            nodes_draggable: config.nodes_draggable,
14            nodes_connectable: config.nodes_connectable,
15            nodes_deletable: config.nodes_deletable,
16            nodes_focusable: config.nodes_focusable,
17            edges_selectable: config.edges_selectable,
18            edges_deletable: config.edges_deletable,
19            edges_focusable: config.edges_focusable,
20            edges_reconnectable: config.edges_reconnectable,
21            connection_mode: config.connection_mode,
22            connection_radius: config.connection_radius,
23            reconnect_radius: config.reconnect_radius,
24            reconnect_on_drop_empty: config.reconnect_on_drop_empty,
25            edge_interaction_width: config.edge_interaction_width,
26            bezier_hit_test_steps: config.bezier_hit_test_steps,
27            spatial_index: runtime_tuning.spatial_index,
28            only_render_visible_elements: runtime_tuning.only_render_visible_elements,
29            elevate_nodes_on_select: config.elevate_nodes_on_select,
30            elevate_edges_on_select: config.elevate_edges_on_select,
31            paint_cache_prune: runtime_tuning.paint_cache_prune,
32            snap_to_grid: config.snap_to_grid,
33            snap_grid: config.snap_grid,
34            snaplines: config.snaplines,
35            snaplines_threshold: config.snaplines_threshold,
36            pan_on_scroll: config.pan_on_scroll,
37            pan_on_drag: config.pan_on_drag,
38            selection_on_drag: config.selection_on_drag,
39            select_nodes_on_drag: config.select_nodes_on_drag,
40            selection_mode: config.selection_mode,
41            box_select_edges: config.box_select_edges,
42            selection_key: config.selection_key,
43            multi_selection_key: config.multi_selection_key,
44            delete_key: config.delete_key,
45            nudge_step_mode: config.nudge_step_mode,
46            nudge_step_px: config.nudge_step_px,
47            nudge_fast_step_px: config.nudge_fast_step_px,
48            disable_keyboard_a11y: config.disable_keyboard_a11y,
49            pane_click_distance: config.pane_click_distance,
50            pan_activation_key_code: config.pan_activation_key_code,
51            space_to_pan: config.space_to_pan,
52            pan_on_scroll_speed: config.pan_on_scroll_speed,
53            pan_on_scroll_mode: config.pan_on_scroll_mode,
54            pan_inertia: config.pan_inertia.clone(),
55            zoom_on_scroll: config.zoom_on_scroll,
56            zoom_on_scroll_speed: config.zoom_on_scroll_speed,
57            zoom_on_pinch: config.zoom_on_pinch,
58            zoom_on_pinch_speed: config.zoom_on_pinch_speed,
59            zoom_on_double_click: config.zoom_on_double_click,
60            frame_view_duration_ms: config.frame_view_duration_ms,
61            frame_view_ease: config.frame_view_ease,
62            frame_view_padding: config.frame_view_padding,
63            reroute_on_edge_double_click: config.reroute_on_edge_double_click,
64            edge_insert_on_alt_drag: config.edge_insert_on_alt_drag,
65            zoom_activation_key: config.zoom_activation_key,
66            node_drag_threshold: config.node_drag_threshold,
67            node_drag_handle_mode: config.node_drag_handle_mode,
68            node_click_distance: config.node_click_distance,
69            connection_drag_threshold: config.connection_drag_threshold,
70            connect_on_click: config.connect_on_click,
71            auto_pan: config.auto_pan.clone(),
72            translate_extent: config.translate_extent,
73            node_extent: config.node_extent,
74            node_origin: config.node_origin,
75        }
76    }
77
78    pub fn config(&self) -> NodeGraphInteractionConfig {
79        NodeGraphInteractionConfig {
80            elements_selectable: self.elements_selectable,
81            nodes_draggable: self.nodes_draggable,
82            nodes_connectable: self.nodes_connectable,
83            nodes_deletable: self.nodes_deletable,
84            nodes_focusable: self.nodes_focusable,
85            edges_selectable: self.edges_selectable,
86            edges_deletable: self.edges_deletable,
87            edges_focusable: self.edges_focusable,
88            edges_reconnectable: self.edges_reconnectable,
89            connection_mode: self.connection_mode,
90            connection_radius: self.connection_radius,
91            reconnect_radius: self.reconnect_radius,
92            reconnect_on_drop_empty: self.reconnect_on_drop_empty,
93            edge_interaction_width: self.edge_interaction_width,
94            bezier_hit_test_steps: self.bezier_hit_test_steps,
95            elevate_nodes_on_select: self.elevate_nodes_on_select,
96            elevate_edges_on_select: self.elevate_edges_on_select,
97            snap_to_grid: self.snap_to_grid,
98            snap_grid: self.snap_grid,
99            snaplines: self.snaplines,
100            snaplines_threshold: self.snaplines_threshold,
101            pan_on_scroll: self.pan_on_scroll,
102            pan_on_drag: self.pan_on_drag,
103            selection_on_drag: self.selection_on_drag,
104            select_nodes_on_drag: self.select_nodes_on_drag,
105            selection_mode: self.selection_mode,
106            box_select_edges: self.box_select_edges,
107            selection_key: self.selection_key,
108            multi_selection_key: self.multi_selection_key,
109            delete_key: self.delete_key,
110            nudge_step_mode: self.nudge_step_mode,
111            nudge_step_px: self.nudge_step_px,
112            nudge_fast_step_px: self.nudge_fast_step_px,
113            disable_keyboard_a11y: self.disable_keyboard_a11y,
114            pane_click_distance: self.pane_click_distance,
115            pan_activation_key_code: self.pan_activation_key_code,
116            space_to_pan: self.space_to_pan,
117            pan_on_scroll_speed: self.pan_on_scroll_speed,
118            pan_on_scroll_mode: self.pan_on_scroll_mode,
119            pan_inertia: self.pan_inertia.clone(),
120            zoom_on_scroll: self.zoom_on_scroll,
121            zoom_on_scroll_speed: self.zoom_on_scroll_speed,
122            zoom_on_pinch: self.zoom_on_pinch,
123            zoom_on_pinch_speed: self.zoom_on_pinch_speed,
124            zoom_on_double_click: self.zoom_on_double_click,
125            frame_view_duration_ms: self.frame_view_duration_ms,
126            frame_view_ease: self.frame_view_ease,
127            frame_view_padding: self.frame_view_padding,
128            reroute_on_edge_double_click: self.reroute_on_edge_double_click,
129            edge_insert_on_alt_drag: self.edge_insert_on_alt_drag,
130            zoom_activation_key: self.zoom_activation_key,
131            node_drag_threshold: self.node_drag_threshold,
132            node_drag_handle_mode: self.node_drag_handle_mode,
133            node_click_distance: self.node_click_distance,
134            connection_drag_threshold: self.connection_drag_threshold,
135            connect_on_click: self.connect_on_click,
136            auto_pan: self.auto_pan.clone(),
137            translate_extent: self.translate_extent,
138            node_extent: self.node_extent,
139            node_origin: self.node_origin,
140        }
141    }
142
143    pub fn runtime_tuning(&self) -> NodeGraphRuntimeTuning {
144        NodeGraphRuntimeTuning {
145            spatial_index: self.spatial_index,
146            only_render_visible_elements: self.only_render_visible_elements,
147            paint_cache_prune: self.paint_cache_prune,
148        }
149    }
150
151    pub fn split(&self) -> (NodeGraphInteractionConfig, NodeGraphRuntimeTuning) {
152        (self.config(), self.runtime_tuning())
153    }
154}