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
//! Types to abstract away the source of an image that is drawn to the screen. use bytes::Bytes; use super::ImageAsset; use crate::geometry::Size; /// An image source describes the source of an image that can be passed to e.g. /// the Image component. An image source can either be a placeholder, an Asset /// or a Bytes (3rd party crate) object. #[derive(Clone, PartialEq)] pub enum ImageSource { /// If you're loading a remote image, you might want to show a placeholder /// instead. The placeholder is entirely transparent (unless you give the /// containing component an opaque background color) but does have a size. /// This size is subsequently used in calculating the layout. /// /// The benefit of this is that when the image is eventually completely /// loaded and the component re-renders to show that image, the rest of the /// layout will not change because it already anticipated the correct size /// of the image. Placeholder(Size<f32>), /// This image source is backed by a local asset that is included in a /// Polyhorn package. Asset(ImageAsset), /// This image source is backed by an PNG-encoded buffer. Bytes(Bytes), } impl ImageSource { /// Returns a placeholder image source with the given width and height. pub fn placeholder(width: f32, height: f32) -> ImageSource { ImageSource::Placeholder(Size::new(width, height)) } } impl Default for ImageSource { fn default() -> Self { ImageSource::Placeholder(Size::default()) } } impl From<ImageAsset> for ImageSource { fn from(asset: ImageAsset) -> Self { ImageSource::Asset(asset) } } impl From<Bytes> for ImageSource { fn from(bytes: Bytes) -> Self { ImageSource::Bytes(bytes) } } impl From<&'static [u8]> for ImageSource { fn from(bytes: &'static [u8]) -> Self { ImageSource::Bytes(Bytes::from_static(bytes)) } }