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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//! Pixel color types.
//!
//! This module contains structs for commonly used pixel color formats and
//! conversions between them. The [`raw` module] provides additional functions
//! to convert colors to and from raw data for use with images and displays.
//!
//! # Implementing custom color types
//!
//! Custom color types can be added by implementing the [`PixelColor`] trait.
//! The following example shows how to implement a new color type for a
//! 3 color EPD display.
//!
//! ```
//! use embedded_graphics::prelude::*;
//! use embedded_graphics::egrectangle;
//!
//! /// Color with 3 states.
//! #[derive(Debug, Clone, Copy, PartialEq, Eq)]
//! pub enum EpdColor {
//! White,
//! Black,
//! Red,
//! }
//!
//! /// The `Raw` can be is set to `()` because `EpdColor` doesn't need to be
//! /// converted to raw data for the display and isn't stored in images.
//! impl PixelColor for EpdColor {
//! type Raw = ();
//! }
//!
//! /// Mock EPD display.
//! pub struct EpdDisplay {}
//!
//! impl Drawing<EpdColor> for EpdDisplay {
//! fn draw<T>(&mut self, item: T)
//! where
//! T: IntoIterator<Item = Pixel<EpdColor>>
//! {
//! for Pixel(point, color) in item {
//! match color {
//! EpdColor::White => {} // draw white pixel at `point`
//! EpdColor::Black => {} // draw black pixel at `point`
//! EpdColor::Red => {} // draw red pixel at `point`
//! }
//! }
//! }
//! }
//!
//! fn main() {
//! let mut display = EpdDisplay {};
//!
//! display.draw(
//! egrectangle!((0, 0), (100, 100), fill = Some(EpdColor::White))
//! );
//!
//! display.draw(
//! egrectangle!((100, 0), (200, 100), fill = Some(EpdColor::Black))
//! );
//!
//! display.draw(
//! egrectangle!((200, 0), (300, 100), fill = Some(EpdColor::Red))
//! );
//! }
//! ```
//!
//! The implementation of the [`Drawing`] trait uses a `match` statement to
//! draw the specified color and doesn't depend on the raw data conversions,
//! see the [`raw` module] documentation for an example that uses this feature.
//!
//! [`Drawing`]: ../trait.Drawing.html
//! [`PixelColor`]: trait.PixelColor.html
//! [`Raw`]: trait.PixelColor.html#associatedtype.Raw
//! [`raw` module]: raw/index.html
pub use *;
pub use *;
pub use *;
/// Pixel color trait.
///
/// This trait is used to represent types that can be used in drawing methods.
///
/// See the [module-level documentation] for more details.
///
/// [module-level documentation]: index.html