1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
use crate::{BackendCoord, BackendStyle, DrawingBackend, DrawingErrorKind};
pub fn draw_rect<B: DrawingBackend, S: BackendStyle>(
b: &mut B,
upper_left: BackendCoord,
bottom_right: BackendCoord,
style: &S,
fill: bool,
) -> Result<(), DrawingErrorKind<B::ErrorType>> {
if style.color().alpha == 0.0 {
return Ok(());
}
let (upper_left, bottom_right) = (
(
upper_left.0.min(bottom_right.0),
upper_left.1.min(bottom_right.1),
),
(
upper_left.0.max(bottom_right.0),
upper_left.1.max(bottom_right.1),
),
);
if fill {
if bottom_right.0 - upper_left.0 < bottom_right.1 - upper_left.1 {
for x in upper_left.0..=bottom_right.0 {
check_result!(b.draw_line((x, upper_left.1), (x, bottom_right.1), style));
}
} else {
for y in upper_left.1..=bottom_right.1 {
check_result!(b.draw_line((upper_left.0, y), (bottom_right.0, y), style));
}
}
} else {
b.draw_line(
(upper_left.0, upper_left.1),
(upper_left.0, bottom_right.1),
style,
)?;
b.draw_line(
(upper_left.0, upper_left.1),
(bottom_right.0, upper_left.1),
style,
)?;
b.draw_line(
(bottom_right.0, bottom_right.1),
(upper_left.0, bottom_right.1),
style,
)?;
b.draw_line(
(bottom_right.0, bottom_right.1),
(bottom_right.0, upper_left.1),
style,
)?;
}
Ok(())
}
|