summaryrefslogtreecommitdiffstats
path: root/core/src/widget
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/widget')
-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
6 files changed, 99 insertions, 94 deletions
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 {