1use alloc::{vec, vec::Vec};
4use embedded_graphics::primitives::Rectangle;
5
6#[derive(Clone, Debug, PartialEq, Eq)]
8pub enum DirtyRegion {
9 None,
11 Full,
13 Rects(Vec<Rectangle>),
15}
16
17impl DirtyRegion {
18 #[must_use]
20 pub const fn none() -> Self {
21 Self::None
22 }
23
24 #[must_use]
26 pub const fn full() -> Self {
27 Self::Full
28 }
29
30 #[must_use]
32 pub fn rect(rect: Rectangle) -> Self {
33 Self::Rects(vec![rect])
34 }
35
36 #[must_use]
38 pub const fn is_none(&self) -> bool {
39 matches!(self, Self::None)
40 }
41
42 #[must_use]
44 pub fn rects(&self) -> Option<&[Rectangle]> {
45 match self {
46 Self::Rects(rects) => Some(rects.as_slice()),
47 _ => None,
48 }
49 }
50
51 pub fn add_rect(&mut self, rect: Rectangle) {
53 match self {
54 Self::None => *self = Self::Rects(vec![rect]),
55 Self::Full => {}
56 Self::Rects(rects) => rects.push(rect),
57 }
58 }
59}
60
61#[derive(Copy, Clone, Debug, Default, PartialEq, Eq)]
63pub struct PlatformCapabilities {
64 pub supports_clip: bool,
66 pub supports_partial_flush: bool,
68 pub supports_semantic_input: bool,
70 pub prefers_full_redraw: bool,
72}