From 2303111e09d806ef2a652bddc2b73be6dccf6ae2 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 10 Nov 2019 01:55:32 +0100 Subject: Draft new layout API --- native/src/widget/scrollable.rs | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) (limited to 'native/src/widget/scrollable.rs') diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs index de4c749c..a5eb2f01 100644 --- a/native/src/widget/scrollable.rs +++ b/native/src/widget/scrollable.rs @@ -1,7 +1,7 @@ use crate::{ column, input::{mouse, ButtonState}, - Element, Event, Hasher, Layout, Node, Point, Rectangle, Style, Widget, + layout, Element, Event, Hasher, Layout, Point, Rectangle, Widget, }; pub use iced_core::scrollable::State; @@ -19,32 +19,15 @@ impl<'a, Message, Renderer> Widget where Renderer: self::Renderer + column::Renderer, { - fn node(&self, renderer: &Renderer) -> Node { - let mut content = self.content.node(renderer); - - { - let mut style = content.0.style(); - style.flex_shrink = 0.0; - - content.0.set_style(style); - } - - let mut style = Style::default() - .width(self.content.width) - .max_width(self.content.max_width) - .height(self.height) - .max_height(self.max_height) - .align_self(self.align_self); - - style.0.flex_direction = stretch::style::FlexDirection::Column; - - Node::with_children(style, vec![content]) + fn layout(&self, renderer: &Renderer, limits: &layout::Limits) -> Layout { + // TODO + self.content.layout(renderer, limits) } fn on_event( &mut self, event: Event, - layout: Layout<'_>, + layout: &Layout, cursor_position: Point, messages: &mut Vec, renderer: &Renderer, @@ -147,7 +130,7 @@ where fn draw( &self, renderer: &mut Renderer, - layout: Layout<'_>, + layout: &Layout, cursor_position: Point, ) -> Renderer::Output { let bounds = layout.bounds(); @@ -185,7 +168,7 @@ pub trait Renderer: crate::Renderer + Sized { &mut self, scrollable: &Scrollable<'_, Message, Self>, bounds: Rectangle, - content_layout: Layout<'_>, + content_layout: &Layout, cursor_position: Point, ) -> Self::Output; } -- cgit From 0240c3981b716c82ecb3364945815335b420a63e Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 10 Nov 2019 06:05:20 +0100 Subject: Draft custom layout engine based on `druid` --- native/src/widget/scrollable.rs | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'native/src/widget/scrollable.rs') diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs index a5eb2f01..775c59db 100644 --- a/native/src/widget/scrollable.rs +++ b/native/src/widget/scrollable.rs @@ -1,11 +1,13 @@ use crate::{ column, input::{mouse, ButtonState}, - layout, Element, Event, Hasher, Layout, Point, Rectangle, Widget, + layout, Element, Event, Hasher, Layout, Length, Point, Rectangle, Size, + Widget, }; pub use iced_core::scrollable::State; +use std::f32; use std::hash::Hash; /// A scrollable [`Column`]. @@ -19,15 +21,31 @@ impl<'a, Message, Renderer> Widget where Renderer: self::Renderer + column::Renderer, { - fn layout(&self, renderer: &Renderer, limits: &layout::Limits) -> Layout { - // TODO - self.content.layout(renderer, limits) + fn layout( + &self, + renderer: &Renderer, + limits: &layout::Limits, + ) -> layout::Node { + let limits = limits + .max_height(self.max_height) + .width(Length::Fill) + .height(self.height); + + let child_limits = layout::Limits::new( + Size::new(limits.min().width, 0.0), + Size::new(limits.max().width, f32::INFINITY), + ); + + let content = self.content.layout(renderer, &child_limits); + let size = limits.resolve(content.size()); + + layout::Node::with_children(size, vec![content]) } fn on_event( &mut self, event: Event, - layout: &Layout, + layout: Layout<'_>, cursor_position: Point, messages: &mut Vec, renderer: &Renderer, @@ -130,7 +148,7 @@ where fn draw( &self, renderer: &mut Renderer, - layout: &Layout, + layout: Layout<'_>, cursor_position: Point, ) -> Renderer::Output { let bounds = layout.bounds(); @@ -168,7 +186,7 @@ pub trait Renderer: crate::Renderer + Sized { &mut self, scrollable: &Scrollable<'_, Message, Self>, bounds: Rectangle, - content_layout: &Layout, + content_layout: Layout<'_>, cursor_position: Point, ) -> Self::Output; } -- cgit From ceb02f4a36769c488c2525db2fb73f092a6c2706 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 11 Nov 2019 05:26:08 +0100 Subject: Implement `Container` widget Remove `align_self` and `justify_content` methods --- native/src/widget/scrollable.rs | 1 - 1 file changed, 1 deletion(-) (limited to 'native/src/widget/scrollable.rs') diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs index 775c59db..091dac47 100644 --- a/native/src/widget/scrollable.rs +++ b/native/src/widget/scrollable.rs @@ -168,7 +168,6 @@ where self.height.hash(state); self.max_height.hash(state); - self.align_self.hash(state); self.content.hash_layout(state) } -- cgit