1use crate::{Component, Container, Palette, Theme};
9use embedded_graphics::pixelcolor::{PixelColor, Rgb888};
10
11#[must_use]
13pub fn convert_theme<'a, C>(src: &Theme<'a, Rgb888>) -> Theme<'a, C>
14where
15 C: PixelColor + From<Rgb888>,
16{
17 Theme {
18 background: convert_container(src.background),
19 primary: convert_container(src.primary),
20 secondary: convert_container(src.secondary),
21 accent: convert_component(src.accent),
22 button: convert_component(src.button),
23 destructive: convert_component(src.destructive),
24 success: convert_component(src.success),
25 warning: convert_component(src.warning),
26 text_button: convert_component(src.text_button),
27 icon_button: convert_component(src.icon_button),
28 palette: convert_palette(src.palette),
29 spacing: src.spacing,
30 corner_radii: src.corner_radii,
31 typography: src.typography,
32 is_dark: src.is_dark,
33 is_high_contrast: src.is_high_contrast,
34 }
35}
36
37fn convert_container<C: From<Rgb888>>(c: Container<Rgb888>) -> Container<C>
38where
39 C: PixelColor,
40{
41 Container {
42 base: c.base.into(),
43 on_base: c.on_base.into(),
44 divider: c.divider.into(),
45 }
46}
47
48fn convert_component<C: From<Rgb888>>(c: Component<Rgb888>) -> Component<C>
49where
50 C: PixelColor,
51{
52 Component {
53 base: c.base.into(),
54 pressed: c.pressed.into(),
55 disabled: c.disabled.into(),
56 on_base: c.on_base.into(),
57 border: c.border.into(),
58 }
59}
60
61fn convert_palette<C: From<Rgb888>>(p: Palette<Rgb888>) -> Palette<C>
62where
63 C: PixelColor,
64{
65 Palette {
66 neutral_0: p.neutral_0.into(),
67 neutral_2: p.neutral_2.into(),
68 neutral_4: p.neutral_4.into(),
69 neutral_5: p.neutral_5.into(),
70 neutral_6: p.neutral_6.into(),
71 neutral_8: p.neutral_8.into(),
72 neutral_10: p.neutral_10.into(),
73 accent_blue: p.accent_blue.into(),
74 accent_green: p.accent_green.into(),
75 accent_red: p.accent_red.into(),
76 accent_yellow: p.accent_yellow.into(),
77 black: p.black.into(),
78 white: p.white.into(),
79 }
80}