mirror of
https://github.com/yuri91/ili9341-rs.git
synced 2024-11-24 07:30:59 +00:00
Add fast rectangle drawing
This commit is contained in:
parent
fe16080383
commit
6bdd8e6e37
1 changed files with 41 additions and 4 deletions
45
src/lib.rs
45
src/lib.rs
|
@ -285,16 +285,16 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "graphics")]
|
||||
use embedded_graphics::drawable;
|
||||
#[cfg(feature = "graphics")]
|
||||
use embedded_graphics::{
|
||||
drawable::Pixel,
|
||||
geometry::Size,
|
||||
geometry::{Point, Size},
|
||||
pixelcolor::{
|
||||
raw::{RawData, RawU16},
|
||||
Rgb565,
|
||||
},
|
||||
primitives::Rectangle,
|
||||
style::{PrimitiveStyle, Styled},
|
||||
DrawTarget,
|
||||
};
|
||||
|
||||
|
@ -314,7 +314,7 @@ where
|
|||
fn draw_pixel(&mut self, pixel: Pixel<Rgb565>) -> Result<(), Self::Error> {
|
||||
let Pixel(pos, color) = pixel;
|
||||
|
||||
if pos.x < 0 || pos.y < 0 || pos.x > self.width as i32 || pos.y > self.height as i32 {
|
||||
if pos.x < 0 || pos.y < 0 || pos.x >= self.width as i32 || pos.y >= self.height as i32 {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
|
@ -326,6 +326,43 @@ where
|
|||
&[RawU16::from(color).into_inner()],
|
||||
)
|
||||
}
|
||||
fn draw_rectangle(
|
||||
&mut self,
|
||||
item: &Styled<Rectangle, PrimitiveStyle<Rgb565>>,
|
||||
) -> Result<(), Self::Error> {
|
||||
let Point { x: x0, y: y0 } = item.primitive.top_left;
|
||||
let Point { x: x1, y: y1 } = item.primitive.bottom_right;
|
||||
let w = self.width as i32;
|
||||
let h = self.height as i32;
|
||||
if x0 >= w || y0 >= h {
|
||||
return Ok(());
|
||||
}
|
||||
fn clamp(v: i32, max: i32) -> u16 {
|
||||
if v < 0 {
|
||||
0
|
||||
} else if v > max {
|
||||
max as u16
|
||||
} else {
|
||||
v as u16
|
||||
}
|
||||
}
|
||||
let x0 = clamp(x0, w - 1);
|
||||
let y0 = clamp(y0, h - 1);
|
||||
let x1 = clamp(x1, w - 1);
|
||||
let y1 = clamp(y1, h - 1);
|
||||
self.draw_iter(
|
||||
x0,
|
||||
y0,
|
||||
x1,
|
||||
y1,
|
||||
item.into_iter()
|
||||
.filter(|p| {
|
||||
let Point { x, y } = p.0;
|
||||
x >= 0 && y >= 0 && x < w && y < h
|
||||
})
|
||||
.map(|p| RawU16::from(p.1).into_inner()),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
|
|
Loading…
Reference in a new issue