use crate::prelude::*;
use embedded_graphics::image::Image;
pub struct StaticImage<'a, ID, T> {
region: &'a Region<ID>,
raw_img: &'a T,
show: bool,
}
impl<'a, ID: WidgetId, T: ImageDrawable> StaticImage<'a, ID, T> {
pub const fn new(region: &'a Region<ID>, raw_img: &'a T) -> Self {
Self {
region,
raw_img,
show: true,
}
}
pub const fn visible(mut self, show: bool) -> Self {
self.show = show;
self
}
}
impl<'a, DRAW, ID: WidgetId, T, COL> Widget<DRAW, COL> for StaticImage<'a, ID, T>
where
COL: PixelColor,
DRAW: DrawTarget<Color = COL>,
T: ImageDrawable<Color = COL>,
{
fn draw(&mut self, ui: &mut Ui<DRAW, COL>) -> GuiResult<Response> {
let widget_state = ui.get_widget_state(self.region.id())?;
if !widget_state.compare_set(RenderStatus::Rendered) {
let area = self.region.rectangle();
ui.clear_area(&area)?;
if self.show {
let image = Image::new(self.raw_img, area.top_left);
ui.draw(&image)?;
}
}
Ok(Response::Idle)
}
}