summaryrefslogtreecommitdiffstats
path: root/graphics/src/image/storage.rs
blob: 4caa61410fe28573e2b31183dd5af4fdac65627e (plain) (blame)
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
//! Store images.
use iced_core::Size;

use std::fmt::Debug;

/// Stores cached image data for use in rendering
pub trait Storage {
    /// The type of an [`Entry`] in the [`Storage`].
    type Entry: Entry;

    /// State provided to upload or remove a [`Self::Entry`].
    type State<'a>;

    /// Upload the image data of a [`Self::Entry`].
    fn upload(
        &mut self,
        width: u32,
        height: u32,
        data: &[u8],
        state: &mut Self::State<'_>,
    ) -> Option<Self::Entry>;

    /// Remove a [`Self::Entry`] from the [`Storage`].
    fn remove(&mut self, entry: &Self::Entry, state: &mut Self::State<'_>);
}

/// An entry in some [`Storage`],
pub trait Entry: Debug {
    /// The [`Size`] of the [`Entry`].
    fn size(&self) -> Size<u32>;
}