Skip to main content

shape_viz_core/layers/
background.rs

1//! Background layer for rendering chart outer background using theme colors
2
3use crate::data::ChartData;
4use crate::error::Result;
5use crate::layers::{Layer, LayerStage};
6use crate::renderer::RenderContext;
7use crate::style::ChartStyle;
8use crate::theme::ChartTheme;
9use crate::viewport::Viewport;
10
11/// Layer that fills the entire screen rectangle with the theme's chart_background color.
12#[derive(Debug)]
13pub struct BackgroundLayer {
14    enabled: bool,
15    needs_render: bool,
16}
17
18impl BackgroundLayer {
19    /// Create new background layer
20    pub fn new() -> Self {
21        Self {
22            enabled: true,
23            needs_render: true,
24        }
25    }
26}
27
28impl Default for BackgroundLayer {
29    fn default() -> Self {
30        Self::new()
31    }
32}
33
34impl Layer for BackgroundLayer {
35    fn name(&self) -> &str {
36        "Background"
37    }
38
39    fn stage(&self) -> LayerStage {
40        LayerStage::ScreenBackground
41    }
42
43    fn update(
44        &mut self,
45        _data: &ChartData,
46        _viewport: &Viewport,
47        _theme: &ChartTheme,
48        _style: &ChartStyle,
49    ) {
50        // nothing dynamic, but mark dirty every frame in case size/theme change
51        self.needs_render = true;
52    }
53
54    fn set_enabled(&mut self, enabled: bool) {
55        self.enabled = enabled;
56        self.needs_render = true;
57    }
58
59    fn render(
60        &self,
61        context: &mut RenderContext,
62        _render_pass: &mut wgpu::RenderPass,
63    ) -> Result<()> {
64        if !self.enabled {
65            return Ok(());
66        }
67        let viewport = context.viewport().clone();
68        let theme = context.theme().clone();
69        let rect = viewport.screen_rect;
70        context.draw_rect(rect, theme.colors.chart_background);
71        Ok(())
72    }
73
74    fn needs_render(&self) -> bool {
75        self.needs_render
76    }
77
78    fn z_order(&self) -> i32 {
79        -1000 // Furthest back
80    }
81
82    fn is_enabled(&self) -> bool {
83        self.enabled
84    }
85}