1use crate::core;
3use crate::core::layout;
4use crate::core::mouse;
5use crate::core::renderer;
6use crate::core::widget::{Meta, Tree};
7use crate::core::{Layout, Length, Rectangle, Size, Widget};
8
9pub fn horizontal() -> Space {
14 Space::new().width(Length::Fill)
15}
16
17pub fn vertical() -> Space {
22 Space::new().height(Length::Fill)
23}
24
25#[derive(Debug)]
29pub struct Space {
30 width: Length,
31 height: Length,
32}
33
34impl Space {
35 pub fn new() -> Self {
37 Space {
38 width: Length::Fit,
39 height: Length::Fit,
40 }
41 }
42
43 pub fn width(mut self, width: impl Into<Length>) -> Self {
45 self.width = width.into();
46 self
47 }
48
49 pub fn height(mut self, height: impl Into<Length>) -> Self {
51 self.height = height.into();
52 self
53 }
54}
55
56impl Default for Space {
57 fn default() -> Self {
58 Space::new()
59 }
60}
61
62impl Meta for Space {}
63
64impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Space
65where
66 Renderer: core::Renderer,
67{
68 fn size(&self) -> Size<Length> {
69 Size {
70 width: self.width,
71 height: self.height,
72 }
73 }
74
75 fn layout(&mut self, tree: &mut Tree, _renderer: &Renderer, limits: &layout::Limits) {
76 tree.size = layout::atomic(limits, self.width, self.height);
77 }
78
79 fn draw(
80 &self,
81 _tree: &Tree,
82 _renderer: &mut Renderer,
83 _theme: &Theme,
84 _style: &renderer::Style,
85 _layout: Layout,
86 _cursor: mouse::Cursor,
87 _viewport: &Rectangle,
88 ) {
89 }
90}