summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-11-10 06:05:20 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-11-11 03:08:00 +0100
commit0240c3981b716c82ecb3364945815335b420a63e (patch)
tree441eebaa9441649a4e878bde71cdec20d4a67391 /core
parent2303111e09d806ef2a652bddc2b73be6dccf6ae2 (diff)
downloadiced-0240c3981b716c82ecb3364945815335b420a63e.tar.gz
iced-0240c3981b716c82ecb3364945815335b420a63e.tar.bz2
iced-0240c3981b716c82ecb3364945815335b420a63e.zip
Draft custom layout engine based on `druid`
Diffstat (limited to 'core')
-rw-r--r--core/src/length.rs12
-rw-r--r--core/src/rectangle.rs2
-rw-r--r--core/src/widget/column.rs14
-rw-r--r--core/src/widget/row.rs14
-rw-r--r--core/src/widget/scrollable.rs10
5 files changed, 34 insertions, 18 deletions
diff --git a/core/src/length.rs b/core/src/length.rs
index 0e670038..73c227d8 100644
--- a/core/src/length.rs
+++ b/core/src/length.rs
@@ -1,7 +1,17 @@
/// The strategy used to fill space in a specific dimension.
-#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
+#[derive(Debug, Clone, Copy, PartialEq, Hash)]
pub enum Length {
Fill,
Shrink,
Units(u16),
}
+
+impl Length {
+ pub fn fill_factor(&self) -> u16 {
+ match self {
+ Length::Fill => 1,
+ Length::Shrink => 0,
+ Length::Units(_) => 0,
+ }
+ }
+}
diff --git a/core/src/rectangle.rs b/core/src/rectangle.rs
index c3191677..ee1e3807 100644
--- a/core/src/rectangle.rs
+++ b/core/src/rectangle.rs
@@ -1,7 +1,7 @@
use crate::Point;
/// A rectangle.
-#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Rectangle<T = f32> {
/// X coordinate of the top-left corner.
pub x: T,
diff --git a/core/src/widget/column.rs b/core/src/widget/column.rs
index 2df327a0..f0c47f50 100644
--- a/core/src/widget/column.rs
+++ b/core/src/widget/column.rs
@@ -1,5 +1,7 @@
use crate::{Align, Justify, Length};
+use std::u32;
+
/// A container that distributes its contents vertically.
///
/// A [`Column`] will try to fill the horizontal space of its container.
@@ -10,8 +12,8 @@ pub struct Column<Element> {
pub padding: u16,
pub width: Length,
pub height: Length,
- pub max_width: Length,
- pub max_height: Length,
+ pub max_width: u32,
+ pub max_height: u32,
pub align_self: Option<Align>,
pub align_items: Align,
pub justify_content: Justify,
@@ -28,8 +30,8 @@ impl<Element> Column<Element> {
padding: 0,
width: Length::Fill,
height: Length::Shrink,
- max_width: Length::Shrink,
- max_height: Length::Shrink,
+ max_width: u32::MAX,
+ max_height: u32::MAX,
align_self: None,
align_items: Align::Start,
justify_content: Justify::Start,
@@ -74,7 +76,7 @@ impl<Element> Column<Element> {
/// Sets the maximum width of the [`Column`].
///
/// [`Column`]: struct.Column.html
- pub fn max_width(mut self, max_width: Length) -> Self {
+ pub fn max_width(mut self, max_width: u32) -> Self {
self.max_width = max_width;
self
}
@@ -82,7 +84,7 @@ impl<Element> Column<Element> {
/// Sets the maximum height of the [`Column`] in pixels.
///
/// [`Column`]: struct.Column.html
- pub fn max_height(mut self, max_height: Length) -> Self {
+ pub fn max_height(mut self, max_height: u32) -> Self {
self.max_height = max_height;
self
}
diff --git a/core/src/widget/row.rs b/core/src/widget/row.rs
index 6bdb4ed2..10716a7a 100644
--- a/core/src/widget/row.rs
+++ b/core/src/widget/row.rs
@@ -1,5 +1,7 @@
use crate::{Align, Justify, Length};
+use std::u32;
+
/// A container that distributes its contents horizontally.
///
/// A [`Row`] will try to fill the horizontal space of its container.
@@ -10,8 +12,8 @@ pub struct Row<Element> {
pub padding: u16,
pub width: Length,
pub height: Length,
- pub max_width: Length,
- pub max_height: Length,
+ pub max_width: u32,
+ pub max_height: u32,
pub align_self: Option<Align>,
pub align_items: Align,
pub justify_content: Justify,
@@ -28,8 +30,8 @@ impl<Element> Row<Element> {
padding: 0,
width: Length::Fill,
height: Length::Shrink,
- max_width: Length::Shrink,
- max_height: Length::Shrink,
+ max_width: u32::MAX,
+ max_height: u32::MAX,
align_self: None,
align_items: Align::Start,
justify_content: Justify::Start,
@@ -74,7 +76,7 @@ impl<Element> Row<Element> {
/// Sets the maximum width of the [`Row`].
///
/// [`Row`]: struct.Row.html
- pub fn max_width(mut self, max_width: Length) -> Self {
+ pub fn max_width(mut self, max_width: u32) -> Self {
self.max_width = max_width;
self
}
@@ -82,7 +84,7 @@ impl<Element> Row<Element> {
/// Sets the maximum height of the [`Row`].
///
/// [`Row`]: struct.Row.html
- pub fn max_height(mut self, max_height: Length) -> Self {
+ pub fn max_height(mut self, max_height: u32) -> Self {
self.max_height = max_height;
self
}
diff --git a/core/src/widget/scrollable.rs b/core/src/widget/scrollable.rs
index 31a5abed..c5a2fc59 100644
--- a/core/src/widget/scrollable.rs
+++ b/core/src/widget/scrollable.rs
@@ -1,10 +1,12 @@
use crate::{Align, Column, Length, Point, Rectangle};
+use std::u32;
+
#[derive(Debug)]
pub struct Scrollable<'a, Element> {
pub state: &'a mut State,
pub height: Length,
- pub max_height: Length,
+ pub max_height: u32,
pub align_self: Option<Align>,
pub content: Column<Element>,
}
@@ -14,7 +16,7 @@ impl<'a, Element> Scrollable<'a, Element> {
Scrollable {
state,
height: Length::Shrink,
- max_height: Length::Shrink,
+ max_height: u32::MAX,
align_self: None,
content: Column::new(),
}
@@ -57,7 +59,7 @@ impl<'a, Element> Scrollable<'a, Element> {
/// Sets the maximum width of the [`Scrollable`].
///
/// [`Scrollable`]: struct.Scrollable.html
- pub fn max_width(mut self, max_width: Length) -> Self {
+ pub fn max_width(mut self, max_width: u32) -> Self {
self.content = self.content.max_width(max_width);
self
}
@@ -65,7 +67,7 @@ impl<'a, Element> Scrollable<'a, Element> {
/// Sets the maximum height of the [`Scrollable`] in pixels.
///
/// [`Scrollable`]: struct.Scrollable.html
- pub fn max_height(mut self, max_height: Length) -> Self {
+ pub fn max_height(mut self, max_height: u32) -> Self {
self.max_height = max_height;
self
}