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
61
62
63
64
65
66
67
68
69
use crate::{css, Bus, Css, Element, Length, Widget};
use dodrio::bumpalo;

/// An amount of empty space.
///
/// It can be useful if you want to fill some space with nothing.
#[derive(Debug)]
pub struct Space {
    width: Length,
    height: Length,
}

impl Space {
    /// Creates an amount of empty [`Space`] with the given width and height.
    ///
    /// [`Space`]: struct.Space.html
    pub fn new(width: Length, height: Length) -> Self {
        Space { width, height }
    }

    /// Creates an amount of horizontal [`Space`].
    ///
    /// [`Space`]: struct.Space.html
    pub fn with_width(width: Length) -> Self {
        Space {
            width,
            height: Length::Shrink,
        }
    }

    /// Creates an amount of vertical [`Space`].
    ///
    /// [`Space`]: struct.Space.html
    pub fn with_height(height: Length) -> Self {
        Space {
            width: Length::Shrink,
            height,
        }
    }
}

impl<'a, Message> Widget<Message> for Space {
    fn node<'b>(
        &self,
        bump: &'b bumpalo::Bump,
        _publish: &Bus<Message>,
        _css: &mut Css<'b>,
    ) -> dodrio::Node<'b> {
        use dodrio::builder::*;

        let width = css::length(self.width);
        let height = css::length(self.height);

        let style = bumpalo::format!(
            in bump,
            "width: {}; height: {};",
            width,
            height
        );

        div(bump).attr("style", style.into_bump_str()).finish()
    }
}

impl<'a, Message> From<Space> for Element<'a, Message> {
    fn from(space: Space) -> Element<'a, Message> {
        Element::new(space)
    }
}