swoop_ui/
background.rs

1use bevy_asset::prelude::*;
2use bevy_color::prelude::*;
3use bevy_ecs::prelude::*;
4use bevy_image::prelude::*;
5use bevy_ui::prelude::*;
6
7use crate::{View, ViewPack};
8
9/// Provides background configuration for a UI container
10pub trait BackgroundView: View {
11    /// Returns a mutable reference to the current background style
12    fn background_node(&mut self) -> &mut BackgroundStyle;
13
14    /// Sets a solid color as the background
15    fn background_color(mut self, color: impl Into<Color>) -> Self {
16        *self.background_node() = BackgroundStyle::Color(color.into());
17        self
18    }
19
20    /// Sets an image as the background
21    fn background_image(mut self, image: Handle<Image>) -> Self {
22        *self.background_node() = BackgroundStyle::Image(image);
23        self
24    }
25}
26
27/// Defines how a container should be visually styled in the background
28#[derive(Debug, Clone, PartialEq)]
29pub enum BackgroundStyle {
30    /// A solid background color
31    Color(Color),
32    /// A textured background image
33    Image(Handle<Image>),
34}
35
36impl ViewPack for BackgroundStyle {
37    fn pack(self) -> impl Bundle {
38        match self {
39            BackgroundStyle::Color(color) => (
40                BackgroundColor(color),
41                ImageNode::solid_color(Srgba::NONE.into()),
42            ),
43            BackgroundStyle::Image(handle) => {
44                (BackgroundColor(Srgba::NONE.into()), ImageNode::new(handle))
45            }
46        }
47    }
48}
49
50impl Default for BackgroundStyle {
51    fn default() -> Self {
52        BackgroundStyle::Color(Srgba::NONE.into())
53    }
54}