1use sdl3::{
2 pixels::Color,
3 render::{Canvas, FPoint, FRect},
4 video::Window,
5};
6
7pub fn simple_ui_button(
9 rect: &FRect,
10 color: Color,
11 canvas: &mut Canvas<Window>,
12 point: &FPoint,
13 pressed: bool,
14 scale: f32,
15 text: &str,
16) -> bool {
17 let color_ = canvas.draw_color();
18 canvas.set_draw_color(color);
19 canvas.draw_rect(*rect).unwrap();
21
22 for (i, ch) in text.chars().collect::<Vec<char>>().iter().enumerate() {
24 draw_letter(canvas, rect.x + 7.0 + (i as f32 * 10.), rect.y + 10., *ch);
25 }
26
27 canvas.set_draw_color(color_);
28
29 let x0 = rect.x * scale;
30 let y0 = rect.y * scale;
31 let x1 = (rect.x + rect.w) * scale;
32 let y1 = (rect.y + rect.h) * scale;
33 pressed && x0 <= point.x && point.x <= x1 && y0 <= point.y && point.y <= y1
34}
35
36fn draw_letter(canvas: &mut Canvas<Window>, x: f32, y: f32, ch: char) {
37 match ch {
38 'A' => {
39 let v: Vec<FPoint> = vec![
40 FPoint::new(x + 0., y + 10.),
41 FPoint::new(x + 0., y + 5.),
42 FPoint::new(x + 2., y + 0.),
43 FPoint::new(x + 3., y + 0.),
44 FPoint::new(x + 5., y + 5.),
45 FPoint::new(x + 5., y + 10.),
46 FPoint::new(x + 5., y + 5.),
47 FPoint::new(x + 0., y + 5.),
48 ];
49 canvas.draw_lines(v.as_slice()).unwrap();
50 }
51 'B' => {
52 let v: Vec<FPoint> = vec![
53 FPoint::new(x + 0., y + 10.),
54 FPoint::new(x + 0., y + 0.),
55 FPoint::new(x + 3., y + 0.),
56 FPoint::new(x + 5., y + 2.),
57 FPoint::new(x + 5., y + 3.),
58 FPoint::new(x + 3., y + 5.),
59 FPoint::new(x + 0., y + 5.),
60 FPoint::new(x + 3., y + 5.),
61 FPoint::new(x + 5., y + 7.),
62 FPoint::new(x + 5., y + 8.),
63 FPoint::new(x + 3., y + 10.),
64 FPoint::new(x + 0., y + 10.),
65 ];
66 canvas.draw_lines(v.as_slice()).unwrap();
67 }
68 'D' => {
69 let v: Vec<FPoint> = vec![
70 FPoint::new(x + 0., y + 0.),
71 FPoint::new(x + 0., y + 10.),
72 FPoint::new(x + 3., y + 10.),
73 FPoint::new(x + 5., y + 5.),
74 FPoint::new(x + 3., y + 0.),
75 FPoint::new(x + 0., y + 0.),
76 ];
77 canvas.draw_lines(v.as_slice()).unwrap();
78 }
79 'E' => {
80 let v: Vec<FPoint> = vec![
81 FPoint::new(x + 5., y + 0.),
82 FPoint::new(x + 0., y + 0.),
83 FPoint::new(x + 0., y + 5.),
84 FPoint::new(x + 5., y + 5.),
85 FPoint::new(x + 0., y + 5.),
86 FPoint::new(x + 0., y + 10.),
87 FPoint::new(x + 5., y + 10.),
88 ];
89 canvas.draw_lines(v.as_slice()).unwrap();
90 }
91 'G' => {
92 let v: Vec<FPoint> = vec![
93 FPoint::new(x + 5., y + 0.),
94 FPoint::new(x + 0., y + 0.),
95 FPoint::new(x + 0., y + 10.),
96 FPoint::new(x + 5., y + 10.),
97 FPoint::new(x + 5., y + 5.),
98 FPoint::new(x + 3., y + 5.),
99 ];
100 canvas.draw_lines(v.as_slice()).unwrap();
101 }
102 'L' => {
103 let v: Vec<FPoint> = vec![
104 FPoint::new(x + 0., y + 0.),
105 FPoint::new(x + 0., y + 10.),
106 FPoint::new(x + 5., y + 10.),
107 ];
108 canvas.draw_lines(v.as_slice()).unwrap();
109 }
110 'O' => {
111 let v: Vec<FPoint> = vec![
112 FPoint::new(x + 0., y + 0.),
113 FPoint::new(x + 0., y + 10.),
114 FPoint::new(x + 5., y + 10.),
115 FPoint::new(x + 5., y + 0.),
116 FPoint::new(x + 0., y + 0.),
117 ];
118 canvas.draw_lines(v.as_slice()).unwrap();
119 }
120 'R' => {
121 let v: Vec<FPoint> = vec![
122 FPoint::new(x + 0., y + 10.),
123 FPoint::new(x + 0., y + 0.),
124 FPoint::new(x + 5., y + 0.),
125 FPoint::new(x + 5., y + 5.),
126 FPoint::new(x + 0., y + 5.),
127 FPoint::new(x + 5., y + 10.),
128 ];
129 canvas.draw_lines(v.as_slice()).unwrap();
130 }
131 'S' => {
132 let v: Vec<FPoint> = vec![
133 FPoint::new(x + 5., y + 0.),
134 FPoint::new(x + 1., y + 0.),
135 FPoint::new(x + 0., y + 1.),
136 FPoint::new(x + 0., y + 5.),
137 FPoint::new(x + 5., y + 5.),
138 FPoint::new(x + 5., y + 9.),
139 FPoint::new(x + 4., y + 10.),
140 FPoint::new(x + 0., y + 10.),
141 ];
142 canvas.draw_lines(v.as_slice()).unwrap();
143 }
144 'T' => {
145 let v: Vec<FPoint> = vec![
146 FPoint::new(x + 0., y + 0.),
147 FPoint::new(x + 2.5, y + 0.),
148 FPoint::new(x + 2.5, y + 10.),
149 FPoint::new(x + 2.5, y + 0.),
150 FPoint::new(x + 5., y + 0.),
151 ];
152 canvas.draw_lines(v.as_slice()).unwrap();
153 }
154 'V' => {
155 let v: Vec<FPoint> = vec![
156 FPoint::new(x + 0., y + 0.),
157 FPoint::new(x + 2., y + 10.),
158 FPoint::new(x + 3., y + 10.),
159 FPoint::new(x + 5., y + 0.),
160 ];
161 canvas.draw_lines(v.as_slice()).unwrap();
162 }
163 '1' => {
164 let v: Vec<FPoint> = vec![
165 FPoint::new(x + 0., y + 2.),
166 FPoint::new(x + 2., y + 0.),
167 FPoint::new(x + 2., y + 10.),
168 ];
169 canvas.draw_lines(v.as_slice()).unwrap();
170 }
171 '2' => {
172 let v: Vec<FPoint> = vec![
173 FPoint::new(x + 0., y + 2.),
174 FPoint::new(x + 0., y + 0.),
175 FPoint::new(x + 5., y + 0.),
176 FPoint::new(x + 5., y + 3.),
177 FPoint::new(x + 0., y + 7.),
178 FPoint::new(x + 0., y + 10.),
179 FPoint::new(x + 5., y + 10.),
180 ];
181 canvas.draw_lines(v.as_slice()).unwrap();
182 }
183 _ => {}
184 }
185}