Skip to main content

jellyflow_runtime/io/config/interaction/
editor.rs

1use serde::{Deserialize, Serialize};
2
3use crate::io::tuning::NodeGraphRuntimeTuning;
4
5use super::super::state::NodeGraphInteractionState;
6use super::NodeGraphInteractionConfig;
7
8/// Persisted editor configuration stored alongside pure view state.
9#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
10pub struct NodeGraphEditorConfig {
11    #[serde(
12        default,
13        skip_serializing_if = "NodeGraphInteractionConfig::is_default"
14    )]
15    pub interaction: NodeGraphInteractionConfig,
16    #[serde(default, skip_serializing_if = "NodeGraphRuntimeTuning::is_default")]
17    pub runtime_tuning: NodeGraphRuntimeTuning,
18}
19
20impl NodeGraphEditorConfig {
21    pub fn from_parts(
22        interaction: NodeGraphInteractionConfig,
23        runtime_tuning: NodeGraphRuntimeTuning,
24    ) -> Self {
25        Self {
26            interaction,
27            runtime_tuning,
28        }
29    }
30
31    pub fn into_parts(self) -> (NodeGraphInteractionConfig, NodeGraphRuntimeTuning) {
32        (self.interaction, self.runtime_tuning)
33    }
34
35    pub fn is_default(this: &Self) -> bool {
36        this == &Self::default()
37    }
38
39    pub fn resolved_interaction_state(&self) -> NodeGraphInteractionState {
40        NodeGraphInteractionState::from_parts(&self.interaction, &self.runtime_tuning)
41    }
42
43    pub fn with_spatial_index_enabled(mut self, enabled: bool) -> Self {
44        self.runtime_tuning = self.runtime_tuning.with_spatial_index_enabled(enabled);
45        self
46    }
47
48    pub fn with_only_render_visible_elements(mut self, enabled: bool) -> Self {
49        self.runtime_tuning = self
50            .runtime_tuning
51            .with_only_render_visible_elements(enabled);
52        self
53    }
54}