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/text_input.rs | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) (limited to 'native/src/widget/text_input.rs') diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index d9837b61..ca72801d 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -1,7 +1,6 @@ use crate::{ input::{keyboard, mouse, ButtonState}, - Element, Event, Hasher, Layout, Length, Node, Point, Rectangle, Style, - Widget, + layout, Element, Event, Hasher, Layout, Point, Rectangle, Widget, }; pub use iced_core::{text_input::State, TextInput}; @@ -11,25 +10,20 @@ where Renderer: self::Renderer, Message: Clone + std::fmt::Debug, { - fn node(&self, renderer: &Renderer) -> Node { - let text_bounds = - Node::new(Style::default().width(Length::Fill).height( - Length::Units(self.size.unwrap_or(renderer.default_size())), - )); - - Node::with_children( - Style::default() - .width(self.width) - .max_width(self.width) - .padding(self.padding), - vec![text_bounds], - ) + fn layout(&self, renderer: &Renderer, limits: &layout::Limits) -> Layout { + // TODO + Layout::new(Rectangle { + x: 0.0, + y: 0.0, + width: 0.0, + height: 0.0, + }) } fn on_event( &mut self, event: Event, - layout: Layout<'_>, + layout: &Layout, cursor_position: Point, messages: &mut Vec, _renderer: &Renderer, @@ -101,7 +95,7 @@ where fn draw( &self, renderer: &mut Renderer, - layout: Layout<'_>, + layout: &Layout, cursor_position: Point, ) -> Renderer::Output { let bounds = layout.bounds(); -- 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/text_input.rs | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) (limited to 'native/src/widget/text_input.rs') diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index ca72801d..7e81e257 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -1,6 +1,7 @@ use crate::{ input::{keyboard, mouse, ButtonState}, - layout, Element, Event, Hasher, Layout, Point, Rectangle, Widget, + layout, Element, Event, Hasher, Layout, Length, Point, Rectangle, Size, + Widget, }; pub use iced_core::{text_input::State, TextInput}; @@ -10,20 +11,30 @@ where Renderer: self::Renderer, Message: Clone + std::fmt::Debug, { - fn layout(&self, renderer: &Renderer, limits: &layout::Limits) -> Layout { - // TODO - Layout::new(Rectangle { - x: 0.0, - y: 0.0, - width: 0.0, - height: 0.0, - }) + fn layout( + &self, + renderer: &Renderer, + limits: &layout::Limits, + ) -> layout::Node { + let padding = self.padding as f32; + let text_size = self.size.unwrap_or(renderer.default_size()); + + let limits = limits + .pad(padding) + .width(self.width) + .height(Length::Units(text_size)); + + let mut text = layout::Node::new(limits.resolve(Size::ZERO)); + text.bounds.x = padding; + text.bounds.y = padding; + + layout::Node::with_children(text.size().pad(padding), vec![text]) } fn on_event( &mut self, event: Event, - layout: &Layout, + layout: Layout<'_>, cursor_position: Point, messages: &mut Vec, _renderer: &Renderer, @@ -95,7 +106,7 @@ where fn draw( &self, renderer: &mut Renderer, - layout: &Layout, + layout: Layout<'_>, cursor_position: Point, ) -> Renderer::Output { let bounds = layout.bounds(); -- cgit