diff --git a/Cargo.toml b/Cargo.toml index c340fa8..d3c0a05 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,8 @@ edition = "2018" # travis-ci = { repository = "caemor/epd-waveshare" } [dependencies] -embedded-graphics = { version = "0.6.2", optional = true} +embedded-graphics = { version = "0.7.1", optional = true} +embedded-graphics-core = { version = "0.3.2", optional = true} embedded-hal = {version = "0.2.4", features = ["unproven"]} bit_field = "0.10.1" @@ -27,7 +28,7 @@ embedded-hal-mock = "0.7" [features] default = ["graphics"] -graphics = ["embedded-graphics"] +graphics = ["embedded-graphics","embedded-graphics-core"] # Offers an alternative fast full lut for type_a displays, but the refreshed screen isnt as clean looking type_a_alternative_faster_lut = [] diff --git a/examples/epd2in13_v2.rs b/examples/epd2in13_v2.rs index 3ee0e8c..f245bae 100644 --- a/examples/epd2in13_v2.rs +++ b/examples/epd2in13_v2.rs @@ -1,17 +1,16 @@ #![deny(warnings)] use embedded_graphics::{ - fonts::{Font12x16, Font6x8, Text}, + mono_font::MonoTextStyleBuilder, prelude::*, - primitives::{Circle, Line}, - style::PrimitiveStyle, - text_style, + primitives::{Circle, Line, PrimitiveStyle}, + text::{Baseline, Text, TextStyleBuilder}, }; use embedded_hal::prelude::*; use epd_waveshare::{ color::*, epd2in13_v2::{Display2in13, Epd2in13}, - graphics::{Display, DisplayRotation}, + graphics::DisplayRotation, prelude::*, }; use linux_embedded_hal::{ @@ -90,7 +89,7 @@ fn main() -> Result<(), std::io::Error> { display.clear_buffer(Color::White); // draw a analog clock - let _ = Circle::new(Point::new(64, 64), 40) + let _ = Circle::with_center(Point::new(64, 64), 80) .into_styled(PrimitiveStyle::with_stroke(Black, 1)) .draw(&mut display); let _ = Line::new(Point::new(64, 64), Point::new(30, 40)) @@ -101,21 +100,24 @@ fn main() -> Result<(), std::io::Error> { .draw(&mut display); // draw white on black background - let _ = Text::new("It's working-WoB!", Point::new(90, 10)) - .into_styled(text_style!( - font = Font6x8, - text_color = White, - background_color = Black - )) + let style = MonoTextStyleBuilder::new() + .font(&embedded_graphics::mono_font::ascii::FONT_6X10) + .text_color(White) + .background_color(Black) + .build(); + let text_style = TextStyleBuilder::new().baseline(Baseline::Top).build(); + + let _ = Text::with_text_style("It's working-WoB!", Point::new(90, 10), style, text_style) .draw(&mut display); // use bigger/different font - let _ = Text::new("It's working-WoB!", Point::new(90, 40)) - .into_styled(text_style!( - font = Font12x16, - text_color = White, - background_color = Black - )) + let style = MonoTextStyleBuilder::new() + .font(&embedded_graphics::mono_font::ascii::FONT_10X20) + .text_color(White) + .background_color(Black) + .build(); + + let _ = Text::with_text_style("It's working\nWoB!", Point::new(90, 40), style, text_style) .draw(&mut display); // Demonstrating how to use the partial refresh feature of the screen. @@ -157,11 +159,13 @@ fn main() -> Result<(), std::io::Error> { } fn draw_text(display: &mut Display2in13, text: &str, x: i32, y: i32) { - let _ = Text::new(text, Point::new(x, y)) - .into_styled(text_style!( - font = Font6x8, - text_color = Black, - background_color = White - )) - .draw(display); + let style = MonoTextStyleBuilder::new() + .font(&embedded_graphics::mono_font::ascii::FONT_6X10) + .text_color(White) + .background_color(Black) + .build(); + + let text_style = TextStyleBuilder::new().baseline(Baseline::Top).build(); + + let _ = Text::with_text_style(text, Point::new(x, y), style, text_style).draw(display); } diff --git a/examples/epd2in13bc.rs b/examples/epd2in13bc.rs index 603f3bf..6d8d8b8 100644 --- a/examples/epd2in13bc.rs +++ b/examples/epd2in13bc.rs @@ -1,11 +1,10 @@ #![deny(warnings)] use embedded_graphics::{ - fonts::{Font12x16, Font6x8, Text}, + mono_font::MonoTextStyleBuilder, prelude::*, - primitives::{Circle, Line}, - style::PrimitiveStyle, - text_style, + primitives::{Circle, Line, PrimitiveStyle}, + text::{Baseline, Text, TextStyleBuilder}, }; use embedded_hal::prelude::*; use epd_waveshare::{ @@ -104,8 +103,8 @@ fn main() -> Result<(), std::io::Error> { println!("Now test new graphics with default rotation and three colors:"); display.clear_buffer(TriColor::White); - // draw a analog clock in black - let _ = Circle::new(Point::new(64, 64), 40) + // draw a analog clock + let _ = Circle::with_center(Point::new(64, 64), 80) .into_styled(PrimitiveStyle::with_stroke(TriColor::Black, 1)) .draw(&mut display); let _ = Line::new(Point::new(64, 64), Point::new(30, 40)) @@ -115,23 +114,25 @@ fn main() -> Result<(), std::io::Error> { .into_styled(PrimitiveStyle::with_stroke(TriColor::Black, 1)) .draw(&mut display); - // draw text white on chromatic (red or yellow) background + // draw text white on Red background by using the chromatic buffer + let style = MonoTextStyleBuilder::new() + .font(&embedded_graphics::mono_font::ascii::FONT_6X10) + .text_color(TriColor::White) + .background_color(TriColor::Chromatic) + .build(); + let text_style = TextStyleBuilder::new().baseline(Baseline::Top).build(); - let _ = Text::new("It's working-WoB!", Point::new(90, 10)) - .into_styled(text_style!( - font = Font6x8, - text_color = TriColor::White, - background_color = TriColor::Chromatic - )) + let _ = Text::with_text_style("It's working-WoB!", Point::new(90, 10), style, text_style) .draw(&mut display); // use bigger/different font - let _ = Text::new("It's working-WoB!", Point::new(90, 40)) - .into_styled(text_style!( - font = Font12x16, - text_color = TriColor::White, - background_color = TriColor::Chromatic - )) + let style = MonoTextStyleBuilder::new() + .font(&embedded_graphics::mono_font::ascii::FONT_10X20) + .text_color(TriColor::White) + .background_color(TriColor::Chromatic) + .build(); + + let _ = Text::with_text_style("It's working\nWoB!", Point::new(90, 40), style, text_style) .draw(&mut display); // we used three colors, so we need to update both bw-buffer and chromatic-buffer @@ -154,11 +155,13 @@ fn main() -> Result<(), std::io::Error> { } fn draw_text(display: &mut Display2in13bc, text: &str, x: i32, y: i32) { - let _ = Text::new(text, Point::new(x, y)) - .into_styled(text_style!( - font = Font6x8, - text_color = TriColor::Black, - background_color = TriColor::White - )) - .draw(display); + let style = MonoTextStyleBuilder::new() + .font(&embedded_graphics::mono_font::ascii::FONT_6X10) + .text_color(TriColor::White) + .background_color(TriColor::Black) + .build(); + + let text_style = TextStyleBuilder::new().baseline(Baseline::Top).build(); + + let _ = Text::with_text_style(text, Point::new(x, y), style, text_style).draw(display); } diff --git a/examples/epd4in2.rs b/examples/epd4in2.rs index dffc083..08464b5 100644 --- a/examples/epd4in2.rs +++ b/examples/epd4in2.rs @@ -1,17 +1,16 @@ #![deny(warnings)] use embedded_graphics::{ - fonts::{Font12x16, Font6x8, Text}, + mono_font::MonoTextStyleBuilder, prelude::*, - primitives::{Circle, Line}, - style::PrimitiveStyle, - text_style, + primitives::{Circle, Line, PrimitiveStyleBuilder}, + text::{Baseline, Text, TextStyleBuilder}, }; use embedded_hal::prelude::*; use epd_waveshare::{ color::*, epd4in2::{Display4in2, Epd4in2}, - graphics::{Display, DisplayRotation}, + graphics::DisplayRotation, prelude::*, }; use linux_embedded_hal::{ @@ -65,7 +64,7 @@ fn main() -> Result<(), std::io::Error> { let mut epd4in2 = Epd4in2::new(&mut spi, cs, busy, dc, rst, &mut delay).expect("eink initalize error"); - //println!("Test all the rotations"); + println!("Test all the rotations"); let mut display = Display4in2::default(); display.set_rotation(DisplayRotation::Rotate0); @@ -86,36 +85,44 @@ fn main() -> Result<(), std::io::Error> { .expect("display frame new graphics"); delay.delay_ms(5000u16); - //println!("Now test new graphics with default rotation and some special stuff:"); + println!("Now test new graphics with default rotation and some special stuff"); display.clear_buffer(Color::White); // draw a analog clock - let _ = Circle::new(Point::new(64, 64), 64) - .into_styled(PrimitiveStyle::with_stroke(Black, 1)) + let style = PrimitiveStyleBuilder::new() + .stroke_color(Black) + .stroke_width(1) + .build(); + + let _ = Circle::with_center(Point::new(64, 64), 80) + .into_styled(style) .draw(&mut display); let _ = Line::new(Point::new(64, 64), Point::new(0, 64)) - .into_styled(PrimitiveStyle::with_stroke(Black, 1)) + .into_styled(style) .draw(&mut display); let _ = Line::new(Point::new(64, 64), Point::new(80, 80)) - .into_styled(PrimitiveStyle::with_stroke(Black, 1)) + .into_styled(style) .draw(&mut display); // draw white on black background - let _ = Text::new("It's working-WoB!", Point::new(175, 250)) - .into_styled(text_style!( - font = Font6x8, - text_color = White, - background_color = Black - )) + let style = MonoTextStyleBuilder::new() + .font(&embedded_graphics::mono_font::ascii::FONT_6X10) + .text_color(White) + .background_color(Black) + .build(); + let text_style = TextStyleBuilder::new().baseline(Baseline::Top).build(); + + let _ = Text::with_text_style("It's working-WoB!", Point::new(175, 250), style, text_style) .draw(&mut display); // use bigger/different font - let _ = Text::new("It's working-WoB!", Point::new(50, 200)) - .into_styled(text_style!( - font = Font12x16, - text_color = White, - background_color = Black - )) + let style = MonoTextStyleBuilder::new() + .font(&embedded_graphics::mono_font::ascii::FONT_10X20) + .text_color(White) + .background_color(Black) + .build(); + + let _ = Text::with_text_style("It's working-WoB!", Point::new(50, 200), style, text_style) .draw(&mut display); // a moving `Hello World!` @@ -142,11 +149,13 @@ fn main() -> Result<(), std::io::Error> { } fn draw_text(display: &mut Display4in2, text: &str, x: i32, y: i32) { - let _ = Text::new(text, Point::new(x, y)) - .into_styled(text_style!( - font = Font6x8, - text_color = Black, - background_color = White - )) - .draw(display); + let style = MonoTextStyleBuilder::new() + .font(&embedded_graphics::mono_font::ascii::FONT_6X10) + .text_color(White) + .background_color(Black) + .build(); + + let text_style = TextStyleBuilder::new().baseline(Baseline::Top).build(); + + let _ = Text::with_text_style(text, Point::new(x, y), style, text_style).draw(display); } diff --git a/examples/epd4in2_variable_size.rs b/examples/epd4in2_variable_size.rs index fe36f7e..a388fcd 100644 --- a/examples/epd4in2_variable_size.rs +++ b/examples/epd4in2_variable_size.rs @@ -2,11 +2,10 @@ #![deny(warnings)] use embedded_graphics::{ - fonts::{Font12x16, Font6x8, Text}, + mono_font::MonoTextStyleBuilder, prelude::*, - primitives::{Circle, Line}, - style::PrimitiveStyle, - text_style, + primitives::{Circle, Line, PrimitiveStyleBuilder}, + text::{Baseline, Text, TextStyleBuilder}, }; use embedded_hal::prelude::*; use epd_waveshare::{ @@ -97,33 +96,40 @@ fn main() -> Result<(), std::io::Error> { display.clear_buffer(Color::White); // draw a analog clock - // draw a analog clock - let _ = Circle::new(Point::new(64, 64), 64) - .into_styled(PrimitiveStyle::with_stroke(Black, 1)) + let style = PrimitiveStyleBuilder::new() + .stroke_color(Black) + .stroke_width(1) + .build(); + + let _ = Circle::with_center(Point::new(64, 64), 128) + .into_styled(style) .draw(&mut display); let _ = Line::new(Point::new(64, 64), Point::new(0, 64)) - .into_styled(PrimitiveStyle::with_stroke(Black, 1)) + .into_styled(style) .draw(&mut display); let _ = Line::new(Point::new(64, 64), Point::new(80, 80)) - .into_styled(PrimitiveStyle::with_stroke(Black, 1)) + .into_styled(style) .draw(&mut display); // draw white on black background - let _ = Text::new("It's working-WoB!", Point::new(175, 250)) - .into_styled(text_style!( - font = Font6x8, - text_color = White, - background_color = Black - )) + let style = MonoTextStyleBuilder::new() + .font(&embedded_graphics::mono_font::ascii::FONT_6X10) + .text_color(White) + .background_color(Black) + .build(); + let text_style = TextStyleBuilder::new().baseline(Baseline::Top).build(); + + let _ = Text::with_text_style("It's working-WoB!", Point::new(175, 250), style, text_style) .draw(&mut display); // use bigger/different font - let _ = Text::new("It's working-WoB!", Point::new(50, 200)) - .into_styled(text_style!( - font = Font12x16, - text_color = White, - background_color = Black - )) + let style = MonoTextStyleBuilder::new() + .font(&embedded_graphics::mono_font::ascii::FONT_10X20) + .text_color(White) + .background_color(Black) + .build(); + + let _ = Text::with_text_style("It's working-WoB!", Point::new(50, 200), style, text_style) .draw(&mut display); // a moving `Hello World!` @@ -148,11 +154,13 @@ fn main() -> Result<(), std::io::Error> { } fn draw_text(display: &mut VarDisplay, text: &str, x: i32, y: i32) { - let _ = Text::new(text, Point::new(x, y)) - .into_styled(text_style!( - font = Font6x8, - text_color = Black, - background_color = White - )) - .draw(display); + let style = MonoTextStyleBuilder::new() + .font(&embedded_graphics::mono_font::ascii::FONT_6X10) + .text_color(White) + .background_color(Black) + .build(); + + let text_style = TextStyleBuilder::new().baseline(Baseline::Top).build(); + + let _ = Text::with_text_style(text, Point::new(x, y), style, text_style).draw(display); } diff --git a/src/epd1in54/graphics.rs b/src/epd1in54/graphics.rs index 2cdc1d2..8c4a9ec 100644 --- a/src/epd1in54/graphics.rs +++ b/src/epd1in54/graphics.rs @@ -1,7 +1,7 @@ use crate::epd1in54::{DEFAULT_BACKGROUND_COLOR, HEIGHT, WIDTH}; use crate::graphics::{Display, DisplayRotation}; use embedded_graphics::pixelcolor::BinaryColor; -use embedded_graphics::prelude::*; +use embedded_graphics_core::prelude::*; /// Full size buffer for use with the 1in54 EPD /// @@ -22,13 +22,22 @@ impl Default for Display1in54 { } } -impl DrawTarget for Display1in54 { +impl DrawTarget for Display1in54 { + type Color = BinaryColor; type Error = core::convert::Infallible; - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper(WIDTH, HEIGHT, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper(WIDTH, HEIGHT, pixel)?; + } + Ok(()) } +} +impl OriginDimensions for Display1in54 { fn size(&self) -> Size { Size::new(WIDTH, HEIGHT) } @@ -57,7 +66,10 @@ mod tests { use super::*; use crate::color::{Black, Color}; use crate::graphics::{Display, DisplayRotation}; - use embedded_graphics::{primitives::Line, style::PrimitiveStyle}; + use embedded_graphics::{ + prelude::*, + primitives::{Line, PrimitiveStyle}, + }; // test buffer length #[test] diff --git a/src/epd1in54/mod.rs b/src/epd1in54/mod.rs index e5d97bd..ae7f542 100644 --- a/src/epd1in54/mod.rs +++ b/src/epd1in54/mod.rs @@ -6,7 +6,7 @@ //!# use embedded_hal_mock::*; //!# fn main() -> Result<(), MockError> { //!use embedded_graphics::{ -//! pixelcolor::BinaryColor::On as Black, prelude::*, primitives::Line, style::PrimitiveStyle, +//! pixelcolor::BinaryColor::On as Black, prelude::*, primitives::{Line, PrimitiveStyleBuilder}, //!}; //!use epd_waveshare::{epd1in54::*, prelude::*}; //!# @@ -26,8 +26,12 @@ //!let mut display = Display1in54::default(); //! //!// Use embedded graphics for drawing a line +//!let style = PrimitiveStyleBuilder::new() +//! .stroke_color(Black) +//! .stroke_width(1) +//! .build(); //!let _ = Line::new(Point::new(0, 120), Point::new(0, 295)) -//! .into_styled(PrimitiveStyle::with_stroke(Black, 1)) +//! .into_styled(style) //! .draw(&mut display); //! //!// Display updated frame diff --git a/src/epd1in54b/graphics.rs b/src/epd1in54b/graphics.rs index 617d697..9fca3ef 100644 --- a/src/epd1in54b/graphics.rs +++ b/src/epd1in54b/graphics.rs @@ -1,7 +1,7 @@ use crate::epd1in54b::{DEFAULT_BACKGROUND_COLOR, HEIGHT, WIDTH}; use crate::graphics::{Display, DisplayRotation}; use embedded_graphics::pixelcolor::BinaryColor; -use embedded_graphics::prelude::*; +use embedded_graphics_core::prelude::*; /// Full size buffer for use with the 1in54 EPD /// @@ -21,13 +21,22 @@ impl Default for Display1in54b { } } -impl DrawTarget for Display1in54b { +impl DrawTarget for Display1in54b { + type Color = BinaryColor; type Error = core::convert::Infallible; - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper(WIDTH, HEIGHT, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper(WIDTH, HEIGHT, pixel)?; + } + Ok(()) } +} +impl OriginDimensions for Display1in54b { fn size(&self) -> Size { Size::new(WIDTH, HEIGHT) } diff --git a/src/epd1in54c/graphics.rs b/src/epd1in54c/graphics.rs index 4475083..d08a7ff 100644 --- a/src/epd1in54c/graphics.rs +++ b/src/epd1in54c/graphics.rs @@ -1,7 +1,7 @@ use crate::epd1in54c::{DEFAULT_BACKGROUND_COLOR, HEIGHT, NUM_DISPLAY_BITS, WIDTH}; use crate::graphics::{Display, DisplayRotation}; use embedded_graphics::pixelcolor::BinaryColor; -use embedded_graphics::prelude::*; +use embedded_graphics_core::prelude::*; /// Full size buffer for use with the 1in54c EPD /// @@ -20,13 +20,22 @@ impl Default for Display1in54c { } } -impl DrawTarget for Display1in54c { +impl DrawTarget for Display1in54c { + type Color = BinaryColor; type Error = core::convert::Infallible; - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper(WIDTH, HEIGHT, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper(WIDTH, HEIGHT, pixel)?; + } + Ok(()) } +} +impl OriginDimensions for Display1in54c { fn size(&self) -> Size { Size::new(WIDTH, HEIGHT) } diff --git a/src/epd2in13_v2/graphics.rs b/src/epd2in13_v2/graphics.rs index 1c77a3e..0d04bf7 100644 --- a/src/epd2in13_v2/graphics.rs +++ b/src/epd2in13_v2/graphics.rs @@ -2,7 +2,7 @@ use crate::buffer_len; use crate::epd2in13_v2::{DEFAULT_BACKGROUND_COLOR, HEIGHT, WIDTH}; use crate::graphics::{Display, DisplayRotation}; use embedded_graphics::pixelcolor::BinaryColor; -use embedded_graphics::prelude::*; +use embedded_graphics_core::prelude::*; /// Full size buffer for use with the 2in13 v2 EPD /// @@ -23,13 +23,22 @@ impl Default for Display2in13 { } } -impl DrawTarget for Display2in13 { +impl DrawTarget for Display2in13 { + type Color = BinaryColor; type Error = core::convert::Infallible; - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper(WIDTH, HEIGHT, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper(WIDTH, HEIGHT, pixel)?; + } + Ok(()) } +} +impl OriginDimensions for Display2in13 { fn size(&self) -> Size { Size::new(WIDTH, HEIGHT) } @@ -59,7 +68,10 @@ mod tests { use crate::color::{Black, Color}; use crate::epd2in13_v2; use crate::graphics::{Display, DisplayRotation}; - use embedded_graphics::{primitives::Line, style::PrimitiveStyle}; + use embedded_graphics::{ + prelude::*, + primitives::{Line, PrimitiveStyle}, + }; // test buffer length #[test] diff --git a/src/epd2in13bc/graphics.rs b/src/epd2in13bc/graphics.rs index 80ce6d1..9d29a40 100644 --- a/src/epd2in13bc/graphics.rs +++ b/src/epd2in13bc/graphics.rs @@ -1,7 +1,7 @@ use crate::color::TriColor; use crate::epd2in13bc::{DEFAULT_BACKGROUND_COLOR, HEIGHT, NUM_DISPLAY_BITS, WIDTH}; use crate::graphics::{DisplayRotation, TriDisplay}; -use embedded_graphics::prelude::*; +use embedded_graphics_core::prelude::*; /// Full size buffer for use with the 2.13" b/c EPD /// @@ -23,13 +23,21 @@ impl Default for Display2in13bc { } } -impl DrawTarget for Display2in13bc { +impl DrawTarget for Display2in13bc { + type Color = TriColor; type Error = core::convert::Infallible; - - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper_tri(WIDTH, HEIGHT, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper_tri(WIDTH, HEIGHT, pixel)?; + } + Ok(()) } +} +impl OriginDimensions for Display2in13bc { fn size(&self) -> Size { Size::new(WIDTH, HEIGHT) } diff --git a/src/epd2in13bc/mod.rs b/src/epd2in13bc/mod.rs index 27c034b..ef5a044 100644 --- a/src/epd2in13bc/mod.rs +++ b/src/epd2in13bc/mod.rs @@ -7,8 +7,8 @@ //!```rust, no_run //!# use embedded_hal_mock::*; //!# fn main() -> Result<(), MockError> { -//!use embedded_graphics::{prelude::*, primitives::Line, style::PrimitiveStyle}; -//!use epd_waveshare::{epd2in13bc::*, prelude::*, color::TriColor}; +//!use embedded_graphics::{prelude::*, primitives::{Line, PrimitiveStyle, PrimitiveStyleBuilder}}; +//!use epd_waveshare::{epd2in13bc::*, prelude::*}; //!# //!# let expectations = []; //!# let mut spi = spi::Mock::new(&expectations); diff --git a/src/epd2in7b/graphics.rs b/src/epd2in7b/graphics.rs index 1dcd7bf..c460a9c 100644 --- a/src/epd2in7b/graphics.rs +++ b/src/epd2in7b/graphics.rs @@ -1,7 +1,7 @@ use crate::epd2in7b::{DEFAULT_BACKGROUND_COLOR, HEIGHT, WIDTH}; use crate::graphics::{Display, DisplayRotation}; use embedded_graphics::pixelcolor::BinaryColor; -use embedded_graphics::prelude::*; +use embedded_graphics_core::prelude::*; /// Full size buffer for use with the 2in7B EPD /// @@ -22,13 +22,22 @@ impl Default for Display2in7b { } } -impl DrawTarget for Display2in7b { +impl DrawTarget for Display2in7b { + type Color = BinaryColor; type Error = core::convert::Infallible; - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper(WIDTH, HEIGHT, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper(WIDTH, HEIGHT, pixel)?; + } + Ok(()) } +} +impl OriginDimensions for Display2in7b { fn size(&self) -> Size { Size::new(WIDTH, HEIGHT) } @@ -60,7 +69,10 @@ mod tests { use crate::epd2in7b; use crate::epd2in7b::{HEIGHT, WIDTH}; use crate::graphics::{Display, DisplayRotation}; - use embedded_graphics::{primitives::Line, style::PrimitiveStyle}; + use embedded_graphics::{ + prelude::*, + primitives::{Line, PrimitiveStyle}, + }; // test buffer length #[test] diff --git a/src/epd2in9/graphics.rs b/src/epd2in9/graphics.rs index fb1154e..5dba792 100644 --- a/src/epd2in9/graphics.rs +++ b/src/epd2in9/graphics.rs @@ -1,7 +1,7 @@ use crate::epd2in9::{DEFAULT_BACKGROUND_COLOR, HEIGHT, WIDTH}; use crate::graphics::{Display, DisplayRotation}; use embedded_graphics::pixelcolor::BinaryColor; -use embedded_graphics::prelude::*; +use embedded_graphics_core::prelude::*; /// Display with Fullsize buffer for use with the 2in9 EPD /// @@ -22,13 +22,22 @@ impl Default for Display2in9 { } } -impl DrawTarget for Display2in9 { +impl DrawTarget for Display2in9 { + type Color = BinaryColor; type Error = core::convert::Infallible; - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper(WIDTH, HEIGHT, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper(WIDTH, HEIGHT, pixel)?; + } + Ok(()) } +} +impl OriginDimensions for Display2in9 { fn size(&self) -> Size { Size::new(WIDTH, HEIGHT) } diff --git a/src/epd2in9/mod.rs b/src/epd2in9/mod.rs index 0feec3d..fc1ed54 100644 --- a/src/epd2in9/mod.rs +++ b/src/epd2in9/mod.rs @@ -7,7 +7,7 @@ //!# use embedded_hal_mock::*; //!# fn main() -> Result<(), MockError> { //!use embedded_graphics::{ -//! pixelcolor::BinaryColor::On as Black, prelude::*, primitives::Line, style::PrimitiveStyle, +//! pixelcolor::BinaryColor::On as Black, prelude::*, primitives::{Line, PrimitiveStyle}, //!}; //!use epd_waveshare::{epd2in9::*, prelude::*}; //!# diff --git a/src/epd2in9_v2/graphics.rs b/src/epd2in9_v2/graphics.rs index df1cd2e..6fc6308 100644 --- a/src/epd2in9_v2/graphics.rs +++ b/src/epd2in9_v2/graphics.rs @@ -1,7 +1,7 @@ use crate::epd2in9::{DEFAULT_BACKGROUND_COLOR, HEIGHT, WIDTH}; use crate::graphics::{Display, DisplayRotation}; use embedded_graphics::pixelcolor::BinaryColor; -use embedded_graphics::prelude::*; +use embedded_graphics_core::prelude::*; /// Display with Fullsize buffer for use with the 2in9 EPD V2 /// @@ -22,13 +22,22 @@ impl Default for Display2in9 { } } -impl DrawTarget for Display2in9 { +impl DrawTarget for Display2in9 { + type Color = BinaryColor; type Error = core::convert::Infallible; - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper(WIDTH, HEIGHT, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper(WIDTH, HEIGHT, pixel)?; + } + Ok(()) } +} +impl OriginDimensions for Display2in9 { fn size(&self) -> Size { Size::new(WIDTH, HEIGHT) } diff --git a/src/epd2in9_v2/mod.rs b/src/epd2in9_v2/mod.rs index 354cc32..1c94e46 100644 --- a/src/epd2in9_v2/mod.rs +++ b/src/epd2in9_v2/mod.rs @@ -8,7 +8,7 @@ //!# use embedded_hal_mock::*; //!# fn main() -> Result<(), MockError> { //!use embedded_graphics::{ -//! pixelcolor::BinaryColor::On as Black, prelude::*, primitives::Line, style::PrimitiveStyle, +//! pixelcolor::BinaryColor::On as Black, prelude::*, primitives::{Line, PrimitiveStyle}, //!}; //!use epd_waveshare::{epd2in9_v2::*, prelude::*}; //!# diff --git a/src/epd2in9bc/graphics.rs b/src/epd2in9bc/graphics.rs index 16d12d1..1044aee 100644 --- a/src/epd2in9bc/graphics.rs +++ b/src/epd2in9bc/graphics.rs @@ -1,7 +1,7 @@ use crate::epd2in9bc::{DEFAULT_BACKGROUND_COLOR, HEIGHT, NUM_DISPLAY_BITS, WIDTH}; use crate::graphics::{Display, DisplayRotation}; use embedded_graphics::pixelcolor::BinaryColor; -use embedded_graphics::prelude::*; +use embedded_graphics_core::prelude::*; /// Full size buffer for use with the 2in9b/c EPD /// @@ -20,13 +20,22 @@ impl Default for Display2in9bc { } } -impl DrawTarget for Display2in9bc { +impl DrawTarget for Display2in9bc { + type Color = BinaryColor; type Error = core::convert::Infallible; - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper(WIDTH, HEIGHT, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper(WIDTH, HEIGHT, pixel)?; + } + Ok(()) } +} +impl OriginDimensions for Display2in9bc { fn size(&self) -> Size { Size::new(WIDTH, HEIGHT) } diff --git a/src/epd2in9bc/mod.rs b/src/epd2in9bc/mod.rs index 37280f3..d76ce8e 100644 --- a/src/epd2in9bc/mod.rs +++ b/src/epd2in9bc/mod.rs @@ -6,7 +6,7 @@ //!# use embedded_hal_mock::*; //!# fn main() -> Result<(), MockError> { //!use embedded_graphics::{ -//! pixelcolor::BinaryColor::On as Black, prelude::*, primitives::Line, style::PrimitiveStyle, +//! pixelcolor::BinaryColor::On as Black, prelude::*, primitives::{Line, PrimitiveStyle}, //!}; //!use epd_waveshare::{epd2in9bc::*, prelude::*}; //!# diff --git a/src/epd4in2/graphics.rs b/src/epd4in2/graphics.rs index 101501e..cc98590 100644 --- a/src/epd4in2/graphics.rs +++ b/src/epd4in2/graphics.rs @@ -1,7 +1,7 @@ use crate::epd4in2::{DEFAULT_BACKGROUND_COLOR, HEIGHT, WIDTH}; use crate::graphics::{Display, DisplayRotation}; use embedded_graphics::pixelcolor::BinaryColor; -use embedded_graphics::prelude::*; +use embedded_graphics_core::prelude::*; /// Full size buffer for use with the 4in2 EPD /// @@ -22,13 +22,21 @@ impl Default for Display4in2 { } } -impl DrawTarget for Display4in2 { +impl DrawTarget for Display4in2 { + type Color = BinaryColor; type Error = core::convert::Infallible; - - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper(WIDTH, HEIGHT, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper(WIDTH, HEIGHT, pixel)?; + } + Ok(()) } +} +impl OriginDimensions for Display4in2 { fn size(&self) -> Size { Size::new(WIDTH, HEIGHT) } @@ -59,7 +67,10 @@ mod tests { use crate::color::Color; use crate::epd4in2; use crate::graphics::{Display, DisplayRotation}; - use embedded_graphics::{primitives::Line, style::PrimitiveStyle}; + use embedded_graphics::{ + prelude::*, + primitives::{Line, PrimitiveStyle}, + }; // test buffer length #[test] diff --git a/src/epd4in2/mod.rs b/src/epd4in2/mod.rs index b39ee5e..3ab7e6e 100644 --- a/src/epd4in2/mod.rs +++ b/src/epd4in2/mod.rs @@ -11,7 +11,7 @@ //!# use embedded_hal_mock::*; //!# fn main() -> Result<(), MockError> { //!use embedded_graphics::{ -//! pixelcolor::BinaryColor::On as Black, prelude::*, primitives::Line, style::PrimitiveStyle, +//! pixelcolor::BinaryColor::On as Black, prelude::*, primitives::{Line, PrimitiveStyle}, //!}; //!use epd_waveshare::{epd4in2::*, prelude::*}; //!# diff --git a/src/epd5in65f/graphics.rs b/src/epd5in65f/graphics.rs index d21f8e8..d58cd31 100644 --- a/src/epd5in65f/graphics.rs +++ b/src/epd5in65f/graphics.rs @@ -1,7 +1,7 @@ use crate::color::OctColor; use crate::epd5in65f::{DEFAULT_BACKGROUND_COLOR, HEIGHT, WIDTH}; use crate::graphics::{DisplayRotation, OctDisplay}; -use embedded_graphics::prelude::*; +use embedded_graphics_core::prelude::*; /// Full size buffer for use with the 5in65f EPD /// @@ -22,13 +22,22 @@ impl Default for Display5in65f { } } -impl DrawTarget for Display5in65f { +impl DrawTarget for Display5in65f { + type Color = OctColor; type Error = core::convert::Infallible; - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper(WIDTH, HEIGHT, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper(WIDTH, HEIGHT, pixel)?; + } + Ok(()) } +} +impl OriginDimensions for Display5in65f { fn size(&self) -> Size { Size::new(WIDTH, HEIGHT) } @@ -57,7 +66,10 @@ mod tests { use super::*; use crate::epd5in65f; use crate::graphics::{DisplayRotation, OctDisplay}; - use embedded_graphics::{primitives::Line, style::PrimitiveStyle}; + use embedded_graphics::{ + prelude::*, + primitives::{Line, PrimitiveStyle}, + }; // test buffer length #[test] diff --git a/src/epd7in5/graphics.rs b/src/epd7in5/graphics.rs index 62d1563..4c7896e 100644 --- a/src/epd7in5/graphics.rs +++ b/src/epd7in5/graphics.rs @@ -1,7 +1,7 @@ use crate::epd7in5::{DEFAULT_BACKGROUND_COLOR, HEIGHT, WIDTH}; use crate::graphics::{Display, DisplayRotation}; use embedded_graphics::pixelcolor::BinaryColor; -use embedded_graphics::prelude::*; +use embedded_graphics_core::prelude::*; /// Full size buffer for use with the 7in5 EPD /// @@ -22,13 +22,22 @@ impl Default for Display7in5 { } } -impl DrawTarget for Display7in5 { +impl DrawTarget for Display7in5 { + type Color = BinaryColor; type Error = core::convert::Infallible; - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper(WIDTH, HEIGHT, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper(WIDTH, HEIGHT, pixel)?; + } + Ok(()) } +} +impl OriginDimensions for Display7in5 { fn size(&self) -> Size { Size::new(WIDTH, HEIGHT) } @@ -59,7 +68,10 @@ mod tests { use crate::color::Color; use crate::epd7in5; use crate::graphics::{Display, DisplayRotation}; - use embedded_graphics::{primitives::Line, style::PrimitiveStyle}; + use embedded_graphics::{ + prelude::*, + primitives::{Line, PrimitiveStyle}, + }; // test buffer length #[test] diff --git a/src/epd7in5_hd/graphics.rs b/src/epd7in5_hd/graphics.rs index 60c36dc..1b13ec2 100644 --- a/src/epd7in5_hd/graphics.rs +++ b/src/epd7in5_hd/graphics.rs @@ -1,7 +1,7 @@ use crate::epd7in5_hd::{DEFAULT_BACKGROUND_COLOR, HEIGHT, WIDTH}; use crate::graphics::{Display, DisplayRotation}; use embedded_graphics::pixelcolor::BinaryColor; -use embedded_graphics::prelude::*; +use embedded_graphics_core::prelude::*; /// Full size buffer for use with the 7in5 EPD /// @@ -22,13 +22,22 @@ impl Default for Display7in5 { } } -impl DrawTarget for Display7in5 { +impl DrawTarget for Display7in5 { + type Color = BinaryColor; type Error = core::convert::Infallible; - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper(WIDTH, HEIGHT, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper(WIDTH, HEIGHT, pixel)?; + } + Ok(()) } +} +impl OriginDimensions for Display7in5 { fn size(&self) -> Size { Size::new(WIDTH, HEIGHT) } @@ -58,7 +67,10 @@ mod tests { use crate::color::{Black, Color}; use crate::epd7in5_hd; use crate::graphics::{Display, DisplayRotation}; - use embedded_graphics::{primitives::Line, style::PrimitiveStyle}; + use embedded_graphics::{ + prelude::*, + primitives::{Line, PrimitiveStyle}, + }; // test buffer length #[test] diff --git a/src/epd7in5_v2/graphics.rs b/src/epd7in5_v2/graphics.rs index 8c3211f..4cc905f 100644 --- a/src/epd7in5_v2/graphics.rs +++ b/src/epd7in5_v2/graphics.rs @@ -1,7 +1,7 @@ use crate::epd7in5_v2::{DEFAULT_BACKGROUND_COLOR, HEIGHT, WIDTH}; use crate::graphics::{Display, DisplayRotation}; use embedded_graphics::pixelcolor::BinaryColor; -use embedded_graphics::prelude::*; +use embedded_graphics_core::prelude::*; /// Full size buffer for use with the 7in5 EPD /// @@ -22,13 +22,22 @@ impl Default for Display7in5 { } } -impl DrawTarget for Display7in5 { +impl DrawTarget for Display7in5 { + type Color = BinaryColor; type Error = core::convert::Infallible; - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper(WIDTH, HEIGHT, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper(WIDTH, HEIGHT, pixel)?; + } + Ok(()) } +} +impl OriginDimensions for Display7in5 { fn size(&self) -> Size { Size::new(WIDTH, HEIGHT) } @@ -58,7 +67,10 @@ mod tests { use crate::color::{Black, Color}; use crate::epd7in5_v2; use crate::graphics::{Display, DisplayRotation}; - use embedded_graphics::{primitives::Line, style::PrimitiveStyle}; + use embedded_graphics::{ + prelude::*, + primitives::{Line, PrimitiveStyle}, + }; // test buffer length #[test] diff --git a/src/graphics.rs b/src/graphics.rs index 17ea4ec..abdf88f 100644 --- a/src/graphics.rs +++ b/src/graphics.rs @@ -2,7 +2,8 @@ use crate::buffer_len; use crate::color::{Color, OctColor, TriColor}; -use embedded_graphics::{pixelcolor::BinaryColor, prelude::*}; +use embedded_graphics::pixelcolor::BinaryColor; +use embedded_graphics_core::prelude::*; /// Displayrotation #[derive(Clone, Copy)] @@ -29,7 +30,7 @@ impl Default for DisplayRotation { /// - Drawing (With the help of DrawTarget/Embedded Graphics) /// - Rotations /// - Clearing -pub trait Display: DrawTarget { +pub trait Display: DrawTarget { /// Clears the buffer of the display with the chosen background color fn clear_buffer(&mut self, background_color: Color) { for elem in self.get_mut_buffer().iter_mut() { @@ -91,7 +92,7 @@ pub trait Display: DrawTarget { /// - Drawing (With the help of DrawTarget/Embedded Graphics) /// - Rotations /// - Clearing -pub trait TriDisplay: DrawTarget { +pub trait TriDisplay: DrawTarget { /// Clears the buffer of the display with the chosen background color fn clear_buffer(&mut self, background_color: TriColor) { for elem in self.get_mut_buffer().iter_mut() { @@ -174,7 +175,7 @@ pub trait TriDisplay: DrawTarget { /// - Drawing (With the help of DrawTarget/Embedded Graphics) /// - Rotations /// - Clearing -pub trait OctDisplay: DrawTarget { +pub trait OctDisplay: DrawTarget { /// Clears the buffer of the display with the chosen background color fn clear_buffer(&mut self, background_color: OctColor) { for elem in self.get_mut_buffer().iter_mut() { @@ -240,8 +241,7 @@ pub trait OctDisplay: DrawTarget { /// # use epd_waveshare::graphics::VarDisplay; /// # use epd_waveshare::color::Black; /// # use embedded_graphics::prelude::*; -/// # use embedded_graphics::primitives::{Circle, Line}; -/// # use embedded_graphics::style::PrimitiveStyle; +/// # use embedded_graphics::primitives::{Circle, Line, PrimitiveStyle}; /// let width = 128; /// let height = 296; /// @@ -277,13 +277,22 @@ impl<'a> VarDisplay<'a> { } } -impl<'a> DrawTarget for VarDisplay<'a> { +impl<'a> DrawTarget for VarDisplay<'a> { + type Color = BinaryColor; type Error = core::convert::Infallible; - fn draw_pixel(&mut self, pixel: Pixel) -> Result<(), Self::Error> { - self.draw_helper(self.width, self.height, pixel) + fn draw_iter(&mut self, pixels: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for pixel in pixels { + self.draw_helper(self.width, self.height, pixel)?; + } + Ok(()) } +} +impl<'a> OriginDimensions for VarDisplay<'a> { fn size(&self) -> Size { Size::new(self.width, self.height) } @@ -379,7 +388,10 @@ mod tests { use super::{buffer_len, find_position, outside_display, Display, DisplayRotation, VarDisplay}; use crate::color::Black; use crate::color::Color; - use embedded_graphics::{prelude::*, primitives::Line, style::PrimitiveStyle}; + use embedded_graphics::{ + prelude::*, + primitives::{Line, PrimitiveStyle}, + }; #[test] fn buffer_clear() { diff --git a/src/lib.rs b/src/lib.rs index bfd34bf..0319c0e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,7 +14,7 @@ //!# use embedded_hal_mock::*; //!# fn main() -> Result<(), MockError> { //!use embedded_graphics::{ -//! pixelcolor::BinaryColor::On as Black, prelude::*, primitives::Line, style::PrimitiveStyle, +//! pixelcolor::BinaryColor::On as Black, prelude::*, primitives::{Line, PrimitiveStyle}, //!}; //!use epd_waveshare::{epd1in54::*, prelude::*}; //!# @@ -34,6 +34,7 @@ //!let mut display = Display1in54::default(); //! //!// Use embedded graphics for drawing a line +//! //!let _ = Line::new(Point::new(0, 120), Point::new(0, 295)) //! .into_styled(PrimitiveStyle::with_stroke(Black, 1)) //! .draw(&mut display); diff --git a/src/traits.rs b/src/traits.rs index abdb919..a74c2a2 100644 --- a/src/traits.rs +++ b/src/traits.rs @@ -92,7 +92,7 @@ where ///# use embedded_hal_mock::*; ///# fn main() -> Result<(), MockError> { ///use embedded_graphics::{ -/// pixelcolor::BinaryColor::On as Black, prelude::*, primitives::Line, style::PrimitiveStyle, +/// pixelcolor::BinaryColor::On as Black, prelude::*, primitives::{Line, PrimitiveStyle}, ///}; ///use epd_waveshare::{epd4in2::*, prelude::*}; ///# @@ -112,6 +112,7 @@ where ///let mut display = Display4in2::default(); /// ///// Use embedded graphics for drawing a line +/// ///let _ = Line::new(Point::new(0, 120), Point::new(0, 295)) /// .into_styled(PrimitiveStyle::with_stroke(Black, 1)) /// .draw(&mut display); @@ -248,7 +249,7 @@ where ///# use embedded_hal_mock::*; ///# fn main() -> Result<(), MockError> { ///# use embedded_graphics::{ -///# pixelcolor::BinaryColor::On as Black, prelude::*, primitives::Line, style::PrimitiveStyle, +///# pixelcolor::BinaryColor::On as Black, prelude::*, primitives::{Line, PrimitiveStyle}, ///# }; ///# use epd_waveshare::{epd4in2::*, prelude::*}; ///# use epd_waveshare::graphics::VarDisplay;