Skip to main content

animato_devtools/
state.rs

1//! Shared DevTools state model.
2
3/// Shared DevTools state consumed by optional rendering backends.
4#[derive(Clone, Debug, Default)]
5pub struct DevToolsState {
6    /// Timeline inspector state.
7    #[cfg(feature = "inspector")]
8    pub inspector: crate::TimelineInspector,
9    /// Easing curve editor state.
10    #[cfg(feature = "easing-editor")]
11    pub easing_editor: crate::EasingCurveEditor,
12    /// Spring visualizer state.
13    #[cfg(feature = "spring-viz")]
14    pub spring_visualizer: crate::SpringVisualizer,
15    /// Recorder controls.
16    #[cfg(feature = "recorder")]
17    pub recorder: crate::RecorderControls,
18    /// Performance monitor state.
19    #[cfg(feature = "perf-monitor")]
20    pub performance: crate::PerformanceMonitor,
21    open: bool,
22}
23
24impl DevToolsState {
25    /// Create default DevTools state.
26    pub fn new() -> Self {
27        Self {
28            open: true,
29            ..Self::default()
30        }
31    }
32
33    /// Whether a panel should be visible.
34    pub fn is_open(&self) -> bool {
35        self.open
36    }
37
38    /// Set panel visibility.
39    pub fn set_open(&mut self, open: bool) {
40        self.open = open;
41    }
42
43    /// Toggle panel visibility.
44    pub fn toggle(&mut self) {
45        self.open = !self.open;
46    }
47}
48
49#[cfg(test)]
50mod tests {
51    use super::*;
52
53    #[test]
54    fn toggles_visibility() {
55        let mut state = DevToolsState::new();
56        assert!(state.is_open());
57        state.toggle();
58        assert!(!state.is_open());
59    }
60}