summaryrefslogtreecommitdiffstats
path: root/web/src/widget
diff options
context:
space:
mode:
authorLibravatar Liam Murphy <liampm32@gmail.com>2021-04-10 17:18:04 +1000
committerLibravatar Liam Murphy <liampm32@gmail.com>2021-04-10 17:18:04 +1000
commit11f29bca86e299ed3e2c0d3db0d8058efe4be7ef (patch)
tree960b17ec45e5e33a3a8492e7cdcefeca8acaf75d /web/src/widget
parent99c56b9bff891d55794dccc20f460192ff06f0b8 (diff)
downloadiced-11f29bca86e299ed3e2c0d3db0d8058efe4be7ef.tar.gz
iced-11f29bca86e299ed3e2c0d3db0d8058efe4be7ef.tar.bz2
iced-11f29bca86e299ed3e2c0d3db0d8058efe4be7ef.zip
Use data urls instead of blob URLs
I didn't do this originally because I was half doing it in the first place to mess with Blob URLs, and it feels kinda wrong to be encoding it as base64 when that option is available. But not having memory leaks is more important.
Diffstat (limited to 'web/src/widget')
-rw-r--r--web/src/widget/image.rs21
1 files changed, 6 insertions, 15 deletions
diff --git a/web/src/widget/image.rs b/web/src/widget/image.rs
index f38f5cfb..28435f4f 100644
--- a/web/src/widget/image.rs
+++ b/web/src/widget/image.rs
@@ -2,15 +2,11 @@
use crate::{Bus, Css, Element, Hasher, Length, Widget};
use dodrio::bumpalo;
-use js_sys::Array;
-use js_sys::Uint8Array;
use std::{
hash::{Hash, Hasher as _},
path::PathBuf,
sync::Arc,
};
-use web_sys::Blob;
-use web_sys::Url;
/// A frame that displays an image while keeping aspect ratio.
///
@@ -79,18 +75,13 @@ impl<Message> Widget<Message> for Image {
let src = match self.handle.data.as_ref() {
Data::Path(path) => {
String::from_str_in(path.to_str().unwrap_or(""), bump)
- .into_bump_str()
}
- Data::Bytes(bytes) => bump.alloc(
- Url::create_object_url_with_blob(
- &Blob::new_with_u8_array_sequence(&Array::of1(
- &Uint8Array::from(bytes.as_slice()),
- ))
- .unwrap(),
- )
- .unwrap(),
- ),
- };
+ Data::Bytes(bytes) => {
+ // The web is able to infer the kind of image, so we don't have to add a dependency on image-rs to guess the mime type.
+ bumpalo::format!(in bump, "data:;base64,{}", base64::encode(bytes))
+ },
+ }
+ .into_bump_str();
let alt = String::from_str_in(&self.alt, bump).into_bump_str();