iced_native/widget/
space.rs

1//! Distribute content vertically.
2use crate::layout;
3use crate::renderer;
4use crate::widget::Tree;
5use crate::{Element, Layout, Length, Point, Rectangle, Size, Widget};
6
7/// An amount of empty space.
8///
9/// It can be useful if you want to fill some space with nothing.
10#[derive(Debug)]
11pub struct Space {
12    width: Length,
13    height: Length,
14}
15
16impl Space {
17    /// Creates an amount of empty [`Space`] with the given width and height.
18    pub fn new(width: impl Into<Length>, height: impl Into<Length>) -> Self {
19        Space {
20            width: width.into(),
21            height: height.into(),
22        }
23    }
24
25    /// Creates an amount of horizontal [`Space`].
26    pub fn with_width(width: impl Into<Length>) -> Self {
27        Space {
28            width: width.into(),
29            height: Length::Shrink,
30        }
31    }
32
33    /// Creates an amount of vertical [`Space`].
34    pub fn with_height(height: impl Into<Length>) -> Self {
35        Space {
36            width: Length::Shrink,
37            height: height.into(),
38        }
39    }
40}
41
42impl<Message, Renderer> Widget<Message, Renderer> for Space
43where
44    Renderer: crate::Renderer,
45{
46    fn width(&self) -> Length {
47        self.width
48    }
49
50    fn height(&self) -> Length {
51        self.height
52    }
53
54    fn layout(
55        &self,
56        _renderer: &Renderer,
57        limits: &layout::Limits,
58    ) -> layout::Node {
59        let limits = limits.width(self.width).height(self.height);
60
61        layout::Node::new(limits.resolve(Size::ZERO))
62    }
63
64    fn draw(
65        &self,
66        _state: &Tree,
67        _renderer: &mut Renderer,
68        _theme: &Renderer::Theme,
69        _style: &renderer::Style,
70        _layout: Layout<'_>,
71        _cursor_position: Point,
72        _viewport: &Rectangle,
73    ) {
74    }
75}
76
77impl<'a, Message, Renderer> From<Space> for Element<'a, Message, Renderer>
78where
79    Renderer: crate::Renderer,
80    Message: 'a,
81{
82    fn from(space: Space) -> Element<'a, Message, Renderer> {
83        Element::new(space)
84    }
85}