Skip to main content

simple_render/ui/types/
commands.rs

1use super::*;
2
3#[derive(Clone, Debug, PartialEq)]
4pub enum DrawCommand {
5    Rect {
6        rect: Bounds,
7        clip: Clip,
8        opacity: f32,
9        paint: Paint,
10        gradient: GradientDirection,
11        radii: CornerRadius,
12    },
13    Border {
14        rect: Bounds,
15        clip: Clip,
16        opacity: f32,
17        paint: Paint,
18        gradient: GradientDirection,
19        widths: BorderWidth,
20        radii: CornerRadius,
21    },
22    Text {
23        rect: Bounds,
24        clip: Clip,
25        opacity: f32,
26        scale: f32,
27        text: Text,
28    },
29    RichText {
30        rect: Bounds,
31        clip: Clip,
32        opacity: f32,
33        scale: f32,
34        text: RichText,
35    },
36    Image {
37        rect: Bounds,
38        clip: Clip,
39        opacity: f32,
40        image: Image,
41    },
42}
43
44pub(in crate::ui) enum PaintCommand<'a> {
45    Rect {
46        rect: Bounds,
47        clip: Clip,
48        opacity: f32,
49        paint: &'a Paint,
50        gradient: GradientDirection,
51        radii: CornerRadius,
52    },
53    Border {
54        rect: Bounds,
55        clip: Clip,
56        opacity: f32,
57        paint: &'a Paint,
58        gradient: GradientDirection,
59        widths: BorderWidth,
60        radii: CornerRadius,
61    },
62    Text {
63        rect: Bounds,
64        clip: Clip,
65        opacity: f32,
66        scale: f32,
67        text: &'a Text,
68    },
69    RichText {
70        rect: Bounds,
71        clip: Clip,
72        opacity: f32,
73        scale: f32,
74        text: &'a RichText,
75    },
76    Image {
77        rect: Bounds,
78        clip: Clip,
79        opacity: f32,
80        image: &'a Image,
81    },
82}
83
84impl PaintCommand<'_> {
85    pub(in crate::ui) fn rect(&self) -> Bounds {
86        match self {
87            Self::Rect { rect, .. }
88            | Self::Border { rect, .. }
89            | Self::Text { rect, .. }
90            | Self::RichText { rect, .. }
91            | Self::Image { rect, .. } => *rect,
92        }
93    }
94
95    pub(in crate::ui) fn to_owned(&self) -> DrawCommand {
96        match self {
97            Self::Rect {
98                rect,
99                clip,
100                opacity,
101                paint,
102                gradient,
103                radii,
104            } => DrawCommand::Rect {
105                rect: *rect,
106                clip: *clip,
107                opacity: *opacity,
108                paint: (*paint).clone(),
109                gradient: *gradient,
110                radii: *radii,
111            },
112            Self::Border {
113                rect,
114                clip,
115                opacity,
116                paint,
117                gradient,
118                widths,
119                radii,
120            } => DrawCommand::Border {
121                rect: *rect,
122                clip: *clip,
123                opacity: *opacity,
124                paint: (*paint).clone(),
125                gradient: *gradient,
126                widths: *widths,
127                radii: *radii,
128            },
129            Self::Text {
130                rect,
131                clip,
132                opacity,
133                scale,
134                text,
135            } => DrawCommand::Text {
136                rect: *rect,
137                clip: *clip,
138                opacity: *opacity,
139                scale: *scale,
140                text: (*text).clone(),
141            },
142            Self::RichText {
143                rect,
144                clip,
145                opacity,
146                scale,
147                text,
148            } => DrawCommand::RichText {
149                rect: *rect,
150                clip: *clip,
151                opacity: *opacity,
152                scale: *scale,
153                text: (*text).clone(),
154            },
155            Self::Image {
156                rect,
157                clip,
158                opacity,
159                image,
160            } => DrawCommand::Image {
161                rect: *rect,
162                clip: *clip,
163                opacity: *opacity,
164                image: (*image).clone(),
165            },
166        }
167    }
168}