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}