jellyflow_runtime/io/config/state/
split.rs1use 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}