summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-11-11 05:26:08 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-11-11 05:26:08 +0100
commitceb02f4a36769c488c2525db2fb73f092a6c2706 (patch)
treed7a43c6b9444fb3079501e49ca1f80e31f1b4740 /core
parentbfe19193b95e9d1be0694bbc6a96e20a9aefdc09 (diff)
downloadiced-ceb02f4a36769c488c2525db2fb73f092a6c2706.tar.gz
iced-ceb02f4a36769c488c2525db2fb73f092a6c2706.tar.bz2
iced-ceb02f4a36769c488c2525db2fb73f092a6c2706.zip
Implement `Container` widget
Remove `align_self` and `justify_content` methods
Diffstat (limited to 'core')
-rw-r--r--core/src/align.rs3
-rw-r--r--core/src/justify.rs27
-rw-r--r--core/src/lib.rs2
-rw-r--r--core/src/widget.rs2
-rw-r--r--core/src/widget/button.rs16
-rw-r--r--core/src/widget/column.rs26
-rw-r--r--core/src/widget/container.rs94
-rw-r--r--core/src/widget/image.rs14
-rw-r--r--core/src/widget/row.rs26
-rw-r--r--core/src/widget/scrollable.rs17
10 files changed, 101 insertions, 126 deletions
diff --git a/core/src/align.rs b/core/src/align.rs
index 5dbd658d..d6915086 100644
--- a/core/src/align.rs
+++ b/core/src/align.rs
@@ -15,7 +15,4 @@ pub enum Align {
/// Align at the end of the cross axis.
End,
-
- /// Stretch over the cross axis.
- Stretch,
}
diff --git a/core/src/justify.rs b/core/src/justify.rs
deleted file mode 100644
index 53aa7319..00000000
--- a/core/src/justify.rs
+++ /dev/null
@@ -1,27 +0,0 @@
-/// Distribution on the main axis of a container.
-///
-/// * On a [`Column`], it describes __vertical__ distribution.
-/// * On a [`Row`], it describes __horizontal__ distribution.
-///
-/// [`Column`]: widget/struct.Column.html
-/// [`Row`]: widget/struct.Row.html
-#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
-pub enum Justify {
- /// Place items at the start of the main axis.
- Start,
-
- /// Place items at the center of the main axis.
- Center,
-
- /// Place items at the end of the main axis.
- End,
-
- /// Place items with space between.
- SpaceBetween,
-
- /// Place items with space around.
- SpaceAround,
-
- /// Place items with evenly distributed space.
- SpaceEvenly,
-}
diff --git a/core/src/lib.rs b/core/src/lib.rs
index 877a8f85..ab43ab94 100644
--- a/core/src/lib.rs
+++ b/core/src/lib.rs
@@ -3,7 +3,6 @@ pub mod widget;
mod align;
mod background;
mod color;
-mod justify;
mod length;
mod point;
mod rectangle;
@@ -12,7 +11,6 @@ mod vector;
pub use align::Align;
pub use background::Background;
pub use color::Color;
-pub use justify::Justify;
pub use length::Length;
pub use point::Point;
pub use rectangle::Rectangle;
diff --git a/core/src/widget.rs b/core/src/widget.rs
index 41c4c6a8..9e629e4f 100644
--- a/core/src/widget.rs
+++ b/core/src/widget.rs
@@ -9,6 +9,7 @@
//! ```
mod checkbox;
mod column;
+mod container;
mod image;
mod radio;
mod row;
@@ -32,6 +33,7 @@ pub use text_input::TextInput;
pub use checkbox::Checkbox;
pub use column::Column;
+pub use container::Container;
pub use image::Image;
pub use radio::Radio;
pub use row::Row;
diff --git a/core/src/widget/button.rs b/core/src/widget/button.rs
index a57f2dd8..9cf20071 100644
--- a/core/src/widget/button.rs
+++ b/core/src/widget/button.rs
@@ -5,7 +5,7 @@
//! [`Button`]: struct.Button.html
//! [`State`]: struct.State.html
-use crate::{Align, Background, Length};
+use crate::{Background, Length};
/// A generic widget that produces a message when clicked.
pub struct Button<'a, Message, Element> {
@@ -24,8 +24,6 @@ pub struct Button<'a, Message, Element> {
pub background: Option<Background>,
pub border_radius: u16,
-
- pub align_self: Option<Align>,
}
impl<'a, Message, Element> std::fmt::Debug for Button<'a, Message, Element>
@@ -57,7 +55,6 @@ impl<'a, Message, Element> Button<'a, Message, Element> {
padding: 0,
background: None,
border_radius: 0,
- align_self: None,
}
}
@@ -84,17 +81,6 @@ impl<'a, Message, Element> Button<'a, Message, Element> {
self
}
- /// Sets the alignment of the [`Button`] itself.
- ///
- /// This is useful if you want to override the default alignment given by
- /// the parent container.
- ///
- /// [`Button`]: struct.Button.html
- pub fn align_self(mut self, align: Align) -> Self {
- self.align_self = Some(align);
- self
- }
-
/// Sets the message that will be produced when the [`Button`] is pressed.
///
/// [`Button`]: struct.Button.html
diff --git a/core/src/widget/column.rs b/core/src/widget/column.rs
index f0c47f50..4a97ad98 100644
--- a/core/src/widget/column.rs
+++ b/core/src/widget/column.rs
@@ -1,4 +1,4 @@
-use crate::{Align, Justify, Length};
+use crate::{Align, Length};
use std::u32;
@@ -14,9 +14,7 @@ pub struct Column<Element> {
pub height: Length,
pub max_width: u32,
pub max_height: u32,
- pub align_self: Option<Align>,
pub align_items: Align,
- pub justify_content: Justify,
pub children: Vec<Element>,
}
@@ -32,9 +30,7 @@ impl<Element> Column<Element> {
height: Length::Shrink,
max_width: u32::MAX,
max_height: u32::MAX,
- align_self: None,
align_items: Align::Start,
- justify_content: Justify::Start,
children: Vec::new(),
}
}
@@ -89,17 +85,6 @@ impl<Element> Column<Element> {
self
}
- /// Sets the alignment of the [`Column`] itself.
- ///
- /// This is useful if you want to override the default alignment given by
- /// the parent container.
- ///
- /// [`Column`]: struct.Column.html
- pub fn align_self(mut self, align: Align) -> Self {
- self.align_self = Some(align);
- self
- }
-
/// Sets the horizontal alignment of the contents of the [`Column`] .
///
/// [`Column`]: struct.Column.html
@@ -108,15 +93,6 @@ impl<Element> Column<Element> {
self
}
- /// Sets the vertical distribution strategy for the contents of the
- /// [`Column`] .
- ///
- /// [`Column`]: struct.Column.html
- pub fn justify_content(mut self, justify: Justify) -> Self {
- self.justify_content = justify;
- self
- }
-
/// Adds an element to the [`Column`].
///
/// [`Column`]: struct.Column.html
diff --git a/core/src/widget/container.rs b/core/src/widget/container.rs
new file mode 100644
index 00000000..dc1aab08
--- /dev/null
+++ b/core/src/widget/container.rs
@@ -0,0 +1,94 @@
+use crate::{Align, Length};
+
+use std::u32;
+
+#[derive(Debug)]
+pub struct Container<Element> {
+ pub width: Length,
+ pub height: Length,
+ pub max_width: u32,
+ pub max_height: u32,
+ pub padding: u16,
+ pub horizontal_alignment: Align,
+ pub vertical_alignment: Align,
+ pub content: Element,
+}
+
+impl<Element> Container<Element> {
+ /// Creates an empty [`Container`].
+ ///
+ /// [`Container`]: struct.Container.html
+ pub fn new<T>(content: T) -> Self
+ where
+ T: Into<Element>,
+ {
+ Container {
+ width: Length::Shrink,
+ height: Length::Shrink,
+ max_width: u32::MAX,
+ max_height: u32::MAX,
+ horizontal_alignment: Align::Start,
+ vertical_alignment: Align::Start,
+ padding: 0,
+ 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
+ }
+
+ /// Sets the padding of the [`Container`].
+ ///
+ /// [`Container`]: struct.Container.html
+ pub fn padding(mut self, units: u16) -> Self {
+ self.padding = units;
+ 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
+ }
+}
diff --git a/core/src/widget/image.rs b/core/src/widget/image.rs
index 6e410dce..7e1b1085 100644
--- a/core/src/widget/image.rs
+++ b/core/src/widget/image.rs
@@ -24,8 +24,6 @@ pub struct Image {
/// The height of the image
pub height: Length,
-
- pub align_self: Option<Align>,
}
impl Image {
@@ -38,7 +36,6 @@ impl Image {
clip: None,
width: Length::Shrink,
height: Length::Shrink,
- align_self: None,
}
}
@@ -65,15 +62,4 @@ impl Image {
self.height = height;
self
}
-
- /// Sets the alignment of the [`Image`] itself.
- ///
- /// This is useful if you want to override the default alignment given by
- /// the parent container.
- ///
- /// [`Image`]: struct.Image.html
- pub fn align_self(mut self, align: Align) -> Self {
- self.align_self = Some(align);
- self
- }
}
diff --git a/core/src/widget/row.rs b/core/src/widget/row.rs
index 10716a7a..3d882b47 100644
--- a/core/src/widget/row.rs
+++ b/core/src/widget/row.rs
@@ -1,4 +1,4 @@
-use crate::{Align, Justify, Length};
+use crate::{Align, Length};
use std::u32;
@@ -14,9 +14,7 @@ pub struct Row<Element> {
pub height: Length,
pub max_width: u32,
pub max_height: u32,
- pub align_self: Option<Align>,
pub align_items: Align,
- pub justify_content: Justify,
pub children: Vec<Element>,
}
@@ -32,9 +30,7 @@ impl<Element> Row<Element> {
height: Length::Shrink,
max_width: u32::MAX,
max_height: u32::MAX,
- align_self: None,
align_items: Align::Start,
- justify_content: Justify::Start,
children: Vec::new(),
}
}
@@ -89,17 +85,6 @@ impl<Element> Row<Element> {
self
}
- /// Sets the alignment of the [`Row`] itself.
- ///
- /// This is useful if you want to override the default alignment given by
- /// the parent container.
- ///
- /// [`Row`]: struct.Row.html
- pub fn align_self(mut self, align: Align) -> Self {
- self.align_self = Some(align);
- self
- }
-
/// Sets the vertical alignment of the contents of the [`Row`] .
///
/// [`Row`]: struct.Row.html
@@ -108,15 +93,6 @@ impl<Element> Row<Element> {
self
}
- /// Sets the horizontal distribution strategy for the contents of the
- /// [`Row`] .
- ///
- /// [`Row`]: struct.Row.html
- pub fn justify_content(mut self, justify: Justify) -> Self {
- self.justify_content = justify;
- self
- }
-
/// Adds an [`Element`] to the [`Row`].
///
/// [`Element`]: ../struct.Element.html
diff --git a/core/src/widget/scrollable.rs b/core/src/widget/scrollable.rs
index c5a2fc59..7f2f0e99 100644
--- a/core/src/widget/scrollable.rs
+++ b/core/src/widget/scrollable.rs
@@ -7,7 +7,6 @@ pub struct Scrollable<'a, Element> {
pub state: &'a mut State,
pub height: Length,
pub max_height: u32,
- pub align_self: Option<Align>,
pub content: Column<Element>,
}
@@ -17,7 +16,6 @@ impl<'a, Element> Scrollable<'a, Element> {
state,
height: Length::Shrink,
max_height: u32::MAX,
- align_self: None,
content: Column::new(),
}
}
@@ -72,17 +70,6 @@ impl<'a, Element> Scrollable<'a, Element> {
self
}
- /// Sets the alignment of the [`Scrollable`] itself.
- ///
- /// This is useful if you want to override the default alignment given by
- /// the parent container.
- ///
- /// [`Scrollable`]: struct.Scrollable.html
- pub fn align_self(mut self, align: Align) -> Self {
- self.align_self = Some(align);
- self
- }
-
/// Sets the horizontal alignment of the contents of the [`Scrollable`] .
///
/// [`Scrollable`]: struct.Scrollable.html
@@ -142,9 +129,9 @@ impl State {
pub fn offset(&self, bounds: Rectangle, content_bounds: Rectangle) -> u32 {
let hidden_content =
- (content_bounds.height - bounds.height).round() as u32;
+ (content_bounds.height - bounds.height).max(0.0).round() as u32;
- self.offset.min(hidden_content).max(0)
+ self.offset.min(hidden_content)
}
pub fn is_scrollbar_grabbed(&self) -> bool {