summaryrefslogtreecommitdiffstats
path: root/web/src/widget/image.rs
diff options
context:
space:
mode:
Diffstat (limited to 'web/src/widget/image.rs')
-rw-r--r--web/src/widget/image.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/web/src/widget/image.rs b/web/src/widget/image.rs
new file mode 100644
index 00000000..fd4ff0df
--- /dev/null
+++ b/web/src/widget/image.rs
@@ -0,0 +1,42 @@
+use crate::{Bus, Element, Length, Widget};
+
+use dodrio::bumpalo;
+
+pub type Image<'a> = iced_core::Image<&'a str>;
+
+impl<'a, Message> Widget<Message> for Image<'a> {
+ fn node<'b>(
+ &self,
+ bump: &'b bumpalo::Bump,
+ _bus: &Bus<Message>,
+ ) -> dodrio::Node<'b> {
+ use dodrio::builder::*;
+
+ let src = bumpalo::format!(in bump, "{}", self.handle);
+
+ let mut image = img(bump).attr("src", src.into_bump_str());
+
+ match self.width {
+ Length::Shrink => {}
+ Length::Fill => {
+ image = image.attr("width", "100%");
+ }
+ Length::Units(px) => {
+ image = image.attr(
+ "width",
+ bumpalo::format!(in bump, "{}px", px).into_bump_str(),
+ );
+ }
+ }
+
+ // TODO: Complete styling
+
+ image.finish()
+ }
+}
+
+impl<'a, Message> From<Image<'a>> for Element<'a, Message> {
+ fn from(image: Image<'a>) -> Element<'a, Message> {
+ Element::new(image)
+ }
+}