diff options
Diffstat (limited to 'widget/src/text_input.rs')
| -rw-r--r-- | widget/src/text_input.rs | 57 | 
1 files changed, 27 insertions, 30 deletions
| diff --git a/widget/src/text_input.rs b/widget/src/text_input.rs index 65d3e1eb..03eb2fd0 100644 --- a/widget/src/text_input.rs +++ b/widget/src/text_input.rs @@ -506,14 +506,11 @@ where  {      let font = font.unwrap_or_else(|| renderer.default_font());      let text_size = size.unwrap_or_else(|| renderer.default_size()); -      let padding = padding.fit(Size::ZERO, limits.max()); -    let limits = limits -        .width(width) -        .pad(padding) -        .height(line_height.to_absolute(text_size)); +    let height = line_height.to_absolute(text_size); -    let text_bounds = limits.resolve(Size::ZERO); +    let limits = limits.width(width).shrink(padding).height(height); +    let text_bounds = limits.resolve(Size::ZERO, width, height);      let placeholder_text = Text {          font, @@ -552,41 +549,41 @@ where          let icon_width = state.icon.min_width(); -        let mut text_node = layout::Node::new( -            text_bounds - Size::new(icon_width + icon.spacing, 0.0), -        ); - -        let mut icon_node = -            layout::Node::new(Size::new(icon_width, text_bounds.height)); - -        match icon.side { -            Side::Left => { -                text_node.move_to(Point::new( +        let (text_position, icon_position) = match icon.side { +            Side::Left => ( +                Point::new(                      padding.left + icon_width + icon.spacing,                      padding.top, -                )); - -                icon_node.move_to(Point::new(padding.left, padding.top)); -            } -            Side::Right => { -                text_node.move_to(Point::new(padding.left, padding.top)); - -                icon_node.move_to(Point::new( +                ), +                Point::new(padding.left, padding.top), +            ), +            Side::Right => ( +                Point::new(padding.left, padding.top), +                Point::new(                      padding.left + text_bounds.width - icon_width,                      padding.top, -                )); -            } +                ), +            ),          }; +        let text_node = layout::Node::new( +            text_bounds - Size::new(icon_width + icon.spacing, 0.0), +        ) +        .move_to(text_position); + +        let icon_node = +            layout::Node::new(Size::new(icon_width, text_bounds.height)) +                .move_to(icon_position); +          layout::Node::with_children( -            text_bounds.pad(padding), +            text_bounds.expand(padding),              vec![text_node, icon_node],          )      } else { -        let mut text = layout::Node::new(text_bounds); -        text.move_to(Point::new(padding.left, padding.top)); +        let text = layout::Node::new(text_bounds) +            .move_to(Point::new(padding.left, padding.top)); -        layout::Node::with_children(text_bounds.pad(padding), vec![text]) +        layout::Node::with_children(text_bounds.expand(padding), vec![text])      }  } | 
