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/element.rs | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) (limited to 'native/src/element.rs') diff --git a/native/src/element.rs b/native/src/element.rs index be64a981..acae1135 100644 --- a/native/src/element.rs +++ b/native/src/element.rs @@ -1,6 +1,4 @@ -use stretch::{geometry, result}; - -use crate::{renderer, Color, Event, Hasher, Layout, Node, Point, Widget}; +use crate::{layout, renderer, Color, Event, Hasher, Layout, Point, Widget}; /// A generic [`Widget`]. /// @@ -41,14 +39,18 @@ where } } - pub fn node(&self, renderer: &Renderer) -> Node { - self.widget.node(renderer) + pub fn layout( + &self, + renderer: &Renderer, + limits: &layout::Limits, + ) -> Layout { + self.widget.layout(renderer, limits) } pub fn draw( &self, renderer: &mut Renderer, - layout: Layout<'_>, + layout: &Layout, cursor_position: Point, ) -> Renderer::Output { self.widget.draw(renderer, layout, cursor_position) @@ -247,12 +249,6 @@ where } } - pub(crate) fn compute_layout(&self, renderer: &Renderer) -> result::Layout { - let node = self.widget.node(renderer); - - node.0.compute_layout(geometry::Size::undefined()).unwrap() - } - pub(crate) fn hash_layout(&self, state: &mut Hasher) { self.widget.hash_layout(state); } @@ -289,14 +285,14 @@ where A: Clone, Renderer: crate::Renderer, { - fn node(&self, renderer: &Renderer) -> Node { - self.widget.node(renderer) + fn layout(&self, renderer: &Renderer, limits: &layout::Limits) -> Layout { + self.widget.layout(renderer, limits) } fn on_event( &mut self, event: Event, - layout: Layout<'_>, + layout: &Layout, cursor_position: Point, messages: &mut Vec, renderer: &Renderer, @@ -320,7 +316,7 @@ where fn draw( &self, renderer: &mut Renderer, - layout: Layout<'_>, + layout: &Layout, cursor_position: Point, ) -> Renderer::Output { self.widget.draw(renderer, layout, cursor_position) @@ -361,14 +357,14 @@ impl<'a, Message, Renderer> Widget where Renderer: crate::Renderer + renderer::Debugger, { - fn node(&self, renderer: &Renderer) -> Node { - self.element.widget.node(renderer) + fn layout(&self, renderer: &Renderer, limits: &layout::Limits) -> Layout { + self.element.widget.layout(renderer, limits) } fn on_event( &mut self, event: Event, - layout: Layout<'_>, + layout: &Layout, cursor_position: Point, messages: &mut Vec, renderer: &Renderer, @@ -385,7 +381,7 @@ where fn draw( &self, renderer: &mut Renderer, - layout: Layout<'_>, + layout: &Layout, cursor_position: Point, ) -> Renderer::Output { renderer.explain( -- 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/element.rs | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) (limited to 'native/src/element.rs') diff --git a/native/src/element.rs b/native/src/element.rs index acae1135..361d7567 100644 --- a/native/src/element.rs +++ b/native/src/element.rs @@ -1,4 +1,6 @@ -use crate::{layout, renderer, Color, Event, Hasher, Layout, Point, Widget}; +use crate::{ + layout, renderer, Color, Event, Hasher, Layout, Length, Point, Widget, +}; /// A generic [`Widget`]. /// @@ -39,18 +41,26 @@ where } } + pub fn width(&self) -> Length { + self.widget.width() + } + + pub fn height(&self) -> Length { + self.widget.height() + } + pub fn layout( &self, renderer: &Renderer, limits: &layout::Limits, - ) -> Layout { + ) -> layout::Node { self.widget.layout(renderer, limits) } pub fn draw( &self, renderer: &mut Renderer, - layout: &Layout, + layout: Layout<'_>, cursor_position: Point, ) -> Renderer::Output { self.widget.draw(renderer, layout, cursor_position) @@ -285,14 +295,18 @@ where A: Clone, Renderer: crate::Renderer, { - fn layout(&self, renderer: &Renderer, limits: &layout::Limits) -> Layout { + fn layout( + &self, + renderer: &Renderer, + limits: &layout::Limits, + ) -> layout::Node { self.widget.layout(renderer, limits) } fn on_event( &mut self, event: Event, - layout: &Layout, + layout: Layout<'_>, cursor_position: Point, messages: &mut Vec, renderer: &Renderer, @@ -316,7 +330,7 @@ where fn draw( &self, renderer: &mut Renderer, - layout: &Layout, + layout: Layout<'_>, cursor_position: Point, ) -> Renderer::Output { self.widget.draw(renderer, layout, cursor_position) @@ -357,14 +371,18 @@ impl<'a, Message, Renderer> Widget where Renderer: crate::Renderer + renderer::Debugger, { - fn layout(&self, renderer: &Renderer, limits: &layout::Limits) -> Layout { + fn layout( + &self, + renderer: &Renderer, + limits: &layout::Limits, + ) -> layout::Node { self.element.widget.layout(renderer, limits) } fn on_event( &mut self, event: Event, - layout: &Layout, + layout: Layout<'_>, cursor_position: Point, messages: &mut Vec, renderer: &Renderer, @@ -381,7 +399,7 @@ where fn draw( &self, renderer: &mut Renderer, - layout: &Layout, + layout: Layout<'_>, cursor_position: Point, ) -> Renderer::Output { renderer.explain( -- cgit From 60774740efee5ff612390f1c3456282d63b5907c Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 11 Nov 2019 07:11:41 +0100 Subject: Fix doc comments and remove `Align` from `tour` --- native/src/element.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'native/src/element.rs') diff --git a/native/src/element.rs b/native/src/element.rs index 361d7567..23f069f1 100644 --- a/native/src/element.rs +++ b/native/src/element.rs @@ -128,7 +128,7 @@ where /// # /// # mod iced_wgpu { /// # use iced_native::{ - /// # text, row, Text, Node, Point, Rectangle, Style, Layout, Row + /// # text, row, layout, Text, Size, Point, Rectangle, Layout, Row /// # }; /// # pub struct Renderer; /// # @@ -144,8 +144,12 @@ where /// # } /// # /// # impl text::Renderer for Renderer { - /// # fn node(&self, _text: &Text) -> Node { - /// # Node::new(Style::default()) + /// # fn layout( + /// # &self, + /// # _text: &Text, + /// # _limits: &layout::Limits, + /// # ) -> layout::Node { + /// # layout::Node::new(Size::ZERO) /// # } /// # /// # fn draw( -- cgit