diff options
author | 2019-11-14 06:46:50 +0100 | |
---|---|---|
committer | 2019-11-14 06:46:50 +0100 | |
commit | bc8d347736ec997ec0e0c401289e2bc09e212b8a (patch) | |
tree | b98798c09a3aa914b7d0869fba0cfd3efff7754f /native/src/element.rs | |
parent | 839e039dbf2fb89dcb8c141503740777d2af2eb3 (diff) | |
parent | 73f3c900071f950ea914652ca3f0002c1e173f61 (diff) | |
download | iced-bc8d347736ec997ec0e0c401289e2bc09e212b8a.tar.gz iced-bc8d347736ec997ec0e0c401289e2bc09e212b8a.tar.bz2 iced-bc8d347736ec997ec0e0c401289e2bc09e212b8a.zip |
Merge pull request #52 from hecrj/custom-layout-engine
Custom layout engine
Diffstat (limited to 'native/src/element.rs')
-rw-r--r-- | native/src/element.rs | 54 |
1 files changed, 36 insertions, 18 deletions
diff --git a/native/src/element.rs b/native/src/element.rs index be64a981..23f069f1 100644 --- a/native/src/element.rs +++ b/native/src/element.rs @@ -1,6 +1,6 @@ -use stretch::{geometry, result}; - -use crate::{renderer, Color, Event, Hasher, Layout, Node, Point, Widget}; +use crate::{ + layout, renderer, Color, Event, Hasher, Layout, Length, Point, Widget, +}; /// A generic [`Widget`]. /// @@ -41,8 +41,20 @@ where } } - pub fn node(&self, renderer: &Renderer) -> Node { - self.widget.node(renderer) + 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::Node { + self.widget.layout(renderer, limits) } pub fn draw( @@ -116,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; /// # @@ -132,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( @@ -247,12 +263,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,8 +299,12 @@ 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::Node { + self.widget.layout(renderer, limits) } fn on_event( @@ -361,8 +375,12 @@ impl<'a, Message, Renderer> Widget<Message, Renderer> 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::Node { + self.element.widget.layout(renderer, limits) } fn on_event( |