use crate::{Extent, Position, RegionS2};
#[doc = crate::_tags!(image)]
#[doc = crate::_doc_location!("media/visual/draw")]
pub trait Canvas {
type Unit;
type Color;
type Error;
fn canvas_extent(&self) -> Extent<Self::Unit, 2>;
fn canvas_clear(&mut self, color: Self::Color) -> Result<(), Self::Error>;
fn canvas_set_color(
&mut self,
pos: Position<Self::Unit, 2>,
color: Self::Color,
) -> Result<(), Self::Error>;
fn canvas_fill_region(
&mut self,
rect: RegionS2<Self::Unit>,
color: Self::Color,
) -> Result<(), Self::Error>;
}
#[doc = crate::_tags!(image)]
#[doc = crate::_doc_location!("media/visual/draw")]
pub trait CanvasRead: Canvas {
fn canvas_get_color(&self, pos: Position<Self::Unit, 2>) -> Result<Self::Color, Self::Error>;
}
#[doc = crate::_tags!(image text)]
#[doc = crate::_doc_location!("media/visual/draw")]
pub trait CanvasTextel: Canvas {
type Textel;
fn canvas_put_textel(
&mut self,
pos: Position<Self::Unit, 2>,
textel: Self::Textel,
) -> Result<(), Self::Error>;
}