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
9pub trait BackgroundView: View {
11 fn background_node(&mut self) -> &mut BackgroundStyle;
13
14 fn background_color(mut self, color: impl Into<Color>) -> Self {
16 *self.background_node() = BackgroundStyle::Color(color.into());
17 self
18 }
19
20 fn background_image(mut self, image: Handle<Image>) -> Self {
22 *self.background_node() = BackgroundStyle::Image(image);
23 self
24 }
25}
26
27#[derive(Debug, Clone, PartialEq)]
29pub enum BackgroundStyle {
30 Color(Color),
32 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}