pub struct IMAGES;
Expand description
Image loading, cache and render service.
If the app is running without a VIEW_PROCESS
all images are dummy, see load_in_headless
for
details.
Implementations§
source§impl IMAGES
impl IMAGES
sourcepub fn render<N, R>(
&self,
mask: Option<ImageMaskMode>,
render: N,
) -> ReadOnlyVar<Img, ArcVar<Img>>
pub fn render<N, R>( &self, mask: Option<ImageMaskMode>, render: N, ) -> ReadOnlyVar<Img, ArcVar<Img>>
Render the window generated by render
to an image.
The window is created as a headless surface and rendered to the returned image. You can use the
IMAGE_RENDER.retain
var create an image that updates with new frames, or by default only render once.
The closure runs in the WINDOW
context of the headless window.
sourcepub fn render_node<U, N>(
&self,
render_mode: RenderMode,
scale_factor: impl Into<Factor>,
mask: Option<ImageMaskMode>,
render: N,
) -> ReadOnlyVar<Img, ArcVar<Img>>
pub fn render_node<U, N>( &self, render_mode: RenderMode, scale_factor: impl Into<Factor>, mask: Option<ImageMaskMode>, render: N, ) -> ReadOnlyVar<Img, ArcVar<Img>>
source§impl IMAGES
impl IMAGES
sourcepub fn load_in_headless(&self) -> ArcVar<bool>
pub fn load_in_headless(&self) -> ArcVar<bool>
If should still download/read image bytes in headless/renderless mode.
When an app is in headless mode without renderer no VIEW_PROCESS
is available, so
images cannot be decoded, in this case all images are the dummy
image and no attempt
to download/read the image files is made. You can enable loading in headless tests to detect
IO errors, in this case if there is an error acquiring the image file the image will be a
dummy
with error.
sourcepub fn limits(&self) -> ArcVar<ImageLimits>
pub fn limits(&self) -> ArcVar<ImageLimits>
Default loading and decoding limits for each image.
sourcepub fn dummy(&self, error: Option<Txt>) -> ReadOnlyVar<Img, ArcVar<Img>>
pub fn dummy(&self, error: Option<Txt>) -> ReadOnlyVar<Img, ArcVar<Img>>
Returns a dummy image that reports it is loaded or an error.
sourcepub fn read(&self, path: impl Into<PathBuf>) -> ReadOnlyVar<Img, ArcVar<Img>>
pub fn read(&self, path: impl Into<PathBuf>) -> ReadOnlyVar<Img, ArcVar<Img>>
Cache or load an image file from a file system path
.
sourcepub fn download(
&self,
uri: impl TryUri,
accept: Option<Txt>,
) -> ReadOnlyVar<Img, ArcVar<Img>>
pub fn download( &self, uri: impl TryUri, accept: Option<Txt>, ) -> ReadOnlyVar<Img, ArcVar<Img>>
Get a cached uri
or download it.
Optionally define the HTTP ACCEPT header, if not set all image formats supported by the view-process backend are accepted.
sourcepub fn from_static(
&self,
data: &'static [u8],
format: impl Into<ImageDataFormat>,
) -> ReadOnlyVar<Img, ArcVar<Img>>
pub fn from_static( &self, data: &'static [u8], format: impl Into<ImageDataFormat>, ) -> ReadOnlyVar<Img, ArcVar<Img>>
Get a cached image from &'static [u8]
data.
The data can be any of the formats described in ImageDataFormat
.
The image key is a ImageHash
of the image data.
§Examples
Get an image from a PNG file embedded in the app executable using include_bytes!
.
let image_var = IMAGES.from_static(include_bytes!("ico.png"), "png");
sourcepub fn from_data(
&self,
data: Arc<Vec<u8>>,
format: impl Into<ImageDataFormat>,
) -> ReadOnlyVar<Img, ArcVar<Img>>
pub fn from_data( &self, data: Arc<Vec<u8>>, format: impl Into<ImageDataFormat>, ) -> ReadOnlyVar<Img, ArcVar<Img>>
Get a cached image from shared data.
The image key is a ImageHash
of the image data. The data reference is held only until the image is decoded.
The data can be any of the formats described in ImageDataFormat
.
sourcepub fn cache(
&self,
source: impl Into<ImageSource>,
) -> ReadOnlyVar<Img, ArcVar<Img>>
pub fn cache( &self, source: impl Into<ImageSource>, ) -> ReadOnlyVar<Img, ArcVar<Img>>
Get a cached image or add it to the cache.
sourcepub fn retry(
&self,
source: impl Into<ImageSource>,
) -> ReadOnlyVar<Img, ArcVar<Img>>
pub fn retry( &self, source: impl Into<ImageSource>, ) -> ReadOnlyVar<Img, ArcVar<Img>>
Get a cached image or add it to the cache or retry if the cached image is an error.
sourcepub fn reload(
&self,
source: impl Into<ImageSource>,
) -> ReadOnlyVar<Img, ArcVar<Img>>
pub fn reload( &self, source: impl Into<ImageSource>, ) -> ReadOnlyVar<Img, ArcVar<Img>>
Load an image, if it was already cached update the cached image with the reloaded data.
sourcepub fn image(
&self,
source: impl Into<ImageSource>,
cache_mode: impl Into<ImageCacheMode>,
limits: Option<ImageLimits>,
downscale: Option<ImageDownscale>,
mask: Option<ImageMaskMode>,
) -> ReadOnlyVar<Img, ArcVar<Img>>
pub fn image( &self, source: impl Into<ImageSource>, cache_mode: impl Into<ImageCacheMode>, limits: Option<ImageLimits>, downscale: Option<ImageDownscale>, mask: Option<ImageMaskMode>, ) -> ReadOnlyVar<Img, ArcVar<Img>>
Get or load an image.
If limits
is None
the IMAGES.limits
is used.
sourcepub fn image_task<F>(
&self,
source: impl IntoFuture<IntoFuture = F>,
cache_mode: impl Into<ImageCacheMode>,
cache_key: Option<ImageHash>,
limits: Option<ImageLimits>,
downscale: Option<ImageDownscale>,
mask: Option<ImageMaskMode>,
) -> ReadOnlyVar<Img, ArcVar<Img>>
pub fn image_task<F>( &self, source: impl IntoFuture<IntoFuture = F>, cache_mode: impl Into<ImageCacheMode>, cache_key: Option<ImageHash>, limits: Option<ImageLimits>, downscale: Option<ImageDownscale>, mask: Option<ImageMaskMode>, ) -> ReadOnlyVar<Img, ArcVar<Img>>
Await for an image source, then get or load the image.
If limits
is None
the IMAGES.limits
is used.
This method returns immediately with a loading ImageVar
, when source
is ready it
is used to get the actual ImageVar
and binds it to the returned image.
Note that the cache_mode
always applies to the inner image, and only to the return image if cache_key
is set.
sourcepub fn register(
&self,
key: ImageHash,
image: ViewImage,
) -> Result<ReadOnlyVar<Img, ArcVar<Img>>, (ViewImage, ReadOnlyVar<Img, ArcVar<Img>>)>
pub fn register( &self, key: ImageHash, image: ViewImage, ) -> Result<ReadOnlyVar<Img, ArcVar<Img>>, (ViewImage, ReadOnlyVar<Img, ArcVar<Img>>)>
Associate the image
with the key
in the cache.
Returns Ok(ImageVar)
with the new image var that tracks image
, or Err(ViewImage, ImageVar)
that returns the image
and a clone of the var already associated with the key
.
sourcepub fn clean(&self, key: ImageHash) -> bool
pub fn clean(&self, key: ImageHash) -> bool
Remove the image from the cache, if it is only held by the cache.
You can use ImageSource::hash128_read
and ImageSource::hash128_download
to get the key
for files or downloads.
Returns true
if the image was removed.
sourcepub fn purge(&self, key: &ImageHash) -> bool
pub fn purge(&self, key: &ImageHash) -> bool
Remove the image from the cache, even if it is still referenced outside of the cache.
You can use ImageSource::hash128_read
and ImageSource::hash128_download
to get the key
for files or downloads.
Returns true
if the image was cached.
sourcepub fn detach(
&self,
image: ReadOnlyVar<Img, ArcVar<Img>>,
) -> ReadOnlyVar<Img, ArcVar<Img>>
pub fn detach( &self, image: ReadOnlyVar<Img, ArcVar<Img>>, ) -> ReadOnlyVar<Img, ArcVar<Img>>
Returns an image that is not cached.
If the image
is the only reference returns it and removes it from the cache. If there are other
references a new ImageVar
is generated from a clone of the image.
sourcepub fn purge_all(&self)
pub fn purge_all(&self)
Clear all cached images, including images that are still referenced outside of the cache.
Image memory only drops when all strong references are removed, so if an image is referenced outside of the cache it will merely be disconnected from the cache by this method.
sourcepub fn install_proxy(&self, proxy: Box<dyn ImageCacheProxy>)
pub fn install_proxy(&self, proxy: Box<dyn ImageCacheProxy>)
Add a cache proxy.
Proxies can intercept cache requests and map to a different request or return an image directly.
sourcepub fn available_decoders(&self) -> Vec<Txt>
pub fn available_decoders(&self) -> Vec<Txt>
Image format decoders implemented by the current view-process.
sourcepub fn available_encoders(&self) -> Vec<Txt>
pub fn available_encoders(&self) -> Vec<Txt>
Image format encoders implemented by the current view-process.
Auto Trait Implementations§
impl Freeze for IMAGES
impl RefUnwindSafe for IMAGES
impl Send for IMAGES
impl Sync for IMAGES
impl Unpin for IMAGES
impl UnwindSafe for IMAGES
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more