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
//! Image drawable.
use crate::{
draw_target::DrawTarget,
geometry::{OriginDimensions, Point},
pixelcolor::PixelColor,
primitives::Rectangle,
};
/// Image drawable.
///
/// `ImageDrawable` is implemented for types that contains image information, which makes them
/// usable with the [`Image`] object.
///
/// The methods in this trait shouldn't be called directly by user code. Instead the object
/// that implements `ImageDrawable` should be wrapped in an [`Image`] object.
///
/// # Implementing `ImageDrawable`
///
/// All image drawables are positioned at the origin and need to implement [`OriginDimensions`], in
/// addition to this trait, to define their dimensions.
///
/// [`Image`]: https://docs.rs/embedded-graphics/latest/embedded_graphics/image/struct.Image.html
/// [`OriginDimensions`]: crate::geometry::OriginDimensions
pub trait ImageDrawable: OriginDimensions {
/// The color type.
type Color: PixelColor;
/// Draws the entire image to the target.
///
/// This method shouldn't be called directly by user code. Use an [`Image`] object instead.
///
/// # Implementation notes
///
/// The implementation of this method must draw the image inside the bounding box defined by
/// the [`OriginDimensions`] trait implementation. This means that the top left corner is at the
/// origin and no drawing operations outside the bounding box are allowed.
///
/// [`Image`]: https://docs.rs/embedded-graphics/latest/embedded_graphics/image/struct.Image.html
/// [`OriginDimensions`]: crate::geometry::OriginDimensions
fn draw<D>(&self, target: &mut D) -> Result<(), D::Error>
where
D: DrawTarget<Color = Self::Color>;
/// Draws a part of the image to the target.
///
/// This method shouldn't be called directly by user code. Use a [`SubImage`] object instead.
///
/// # Implementation notes
///
/// The implementation of this method must draw the image inside the given `area`.
/// It must be ensured that no drawing operation outside this [`Rectangle`] occur.
///
/// [`SubImage`]: https://docs.rs/embedded-graphics/latest/embedded_graphics/image/struct.SubImage.html
/// [`Rectangle`]: crate::primitives::rectangle::Rectangle
fn draw_sub_image<D>(&self, target: &mut D, area: &Rectangle) -> Result<(), D::Error>
where
D: DrawTarget<Color = Self::Color>;
}
/// Pixel getter.
pub trait GetPixel {
/// The color type.
type Color: PixelColor;
/// Gets the color of a pixel.
///
/// Returns `None` if `p` is outside the bounding box.
fn pixel(&self, p: Point) -> Option<Self::Color>;
}