Move image/svg handling into iced_graphics

The `TextureStore` trait is implemented by the atlas, and can also be
implemented in the glow renderer or in a software renderer.

The API here may be improved in the future, but API stability is
presumably not a huge issue since these types will only be used by
renderer backends.
This commit is contained in:
Ian Douglas Scott 2022-10-31 13:37:56 -07:00 committed by Héctor Ramón Jiménez
parent 7b12991728
commit 2c7c42ee93
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
10 changed files with 281 additions and 191 deletions

34
graphics/src/image.rs Normal file
View file

@ -0,0 +1,34 @@
//! Image loading and caching
use std::fmt::Debug;
#[cfg(feature = "image_rs")]
pub mod raster;
#[cfg(feature = "svg")]
pub mod vector;
/// Entry in the texture store
pub trait TextureStoreEntry: Debug {
/// Width and height of the entry
fn size(&self) -> (u32, u32);
}
/// Stores cached image data for use in rendering
pub trait TextureStore {
/// Entry in the texture store
type Entry: TextureStoreEntry;
/// State passed to upload/remove
type State<'a>;
/// Upload image data
fn upload(
&mut self,
width: u32,
height: u32,
data: &[u8],
state: &mut Self::State<'_>,
) -> Option<Self::Entry>;
/// Remome image from store
fn remove(&mut self, entry: &Self::Entry, state: &mut Self::State<'_>);
}