diff options
Diffstat (limited to 'native/src/widget/container.rs')
-rw-r--r-- | native/src/widget/container.rs | 92 |
1 files changed, 88 insertions, 4 deletions
diff --git a/native/src/widget/container.rs b/native/src/widget/container.rs index fd7a5ca5..54117eb1 100644 --- a/native/src/widget/container.rs +++ b/native/src/widget/container.rs @@ -1,10 +1,94 @@ use std::hash::Hash; -use crate::{layout, Element, Event, Hasher, Layout, Length, Point, Widget}; +use crate::{ + layout, Align, Element, Event, Hasher, Layout, Length, Point, Widget, +}; -/// A container that distributes its contents vertically. -pub type Container<'a, Message, Renderer> = - iced_core::Container<Element<'a, Message, Renderer>>; +use std::u32; + +/// An element decorating some content. +/// +/// It is normally used for alignment purposes. +#[allow(missing_docs)] +pub struct Container<'a, Message, Renderer> { + width: Length, + height: Length, + max_width: u32, + max_height: u32, + horizontal_alignment: Align, + vertical_alignment: Align, + content: Element<'a, Message, Renderer>, +} + +impl<'a, Message, Renderer> Container<'a, Message, Renderer> { + /// Creates an empty [`Container`]. + /// + /// [`Container`]: struct.Container.html + pub fn new<T>(content: T) -> Self + where + T: Into<Element<'a, Message, Renderer>>, + { + Container { + width: Length::Shrink, + height: Length::Shrink, + max_width: u32::MAX, + max_height: u32::MAX, + horizontal_alignment: Align::Start, + vertical_alignment: Align::Start, + content: content.into(), + } + } + + /// Sets the width of the [`Container`]. + /// + /// [`Container`]: struct.Container.html + pub fn width(mut self, width: Length) -> Self { + self.width = width; + self + } + + /// Sets the height of the [`Container`]. + /// + /// [`Container`]: struct.Container.html + pub fn height(mut self, height: Length) -> Self { + self.height = height; + self + } + + /// Sets the maximum width of the [`Container`]. + /// + /// [`Container`]: struct.Container.html + pub fn max_width(mut self, max_width: u32) -> Self { + self.max_width = max_width; + self + } + + /// Sets the maximum height of the [`Container`] in pixels. + /// + /// [`Container`]: struct.Container.html + pub fn max_height(mut self, max_height: u32) -> Self { + self.max_height = max_height; + self + } + + /// Centers the contents in the horizontal axis of the [`Container`]. + /// + /// [`Container`]: struct.Container.html + pub fn center_x(mut self) -> Self { + self.horizontal_alignment = Align::Center; + + self + } + + /// Centers the contents in the vertical axis of the [`Container`]. + /// + /// [`Container`]: struct.Container.html + pub fn center_y(mut self) -> Self { + self.vertical_alignment = Align::Center; + + self + } +} impl<'a, Message, Renderer> Widget<Message, Renderer> for Container<'a, Message, Renderer> |