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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
use crate::node::{Node, NodeContainer};
use std::borrow::BorrowMut;
use crate::DefaultModifiers;
use crate::{Renderable};
#[derive(Debug, Clone)]
pub enum ObjectFit {
Fill,
Contain,
Cover,
None,
ScaleDown,
}
#[derive(Debug, Clone)]
pub struct Image {
node: Node,
pub src: String,
}
impl NodeContainer for Image {
fn get_node(&mut self) -> &mut Node {
self.node.borrow_mut()
}
}
impl DefaultModifiers<Image> for Image {}
impl Image {
pub fn new(src: &str) -> Self {
Image {
node: Default::default(),
src: src.to_string(),
}
}
pub fn object_fit(&mut self, fit: ObjectFit) -> Self {
self.get_node().node_style
.push(("object-fit".to_string(), {
match fit {
ObjectFit::Fill => "fill",
ObjectFit::Contain => "contain",
ObjectFit::Cover => "cover",
ObjectFit::None => "none",
ObjectFit::ScaleDown => "scale-down"
}
}.to_string()));
self.clone()
}
}
impl Renderable for Image {
fn render(&self) -> Node {
self.clone()
.add_class("image")
.set_attr("src", self.src.as_str())
.tag("img")
.node
}
}