diff --git a/src/widget/context_drawer/overlay.rs b/src/widget/context_drawer/overlay.rs index d9cc88ab..4f72e113 100644 --- a/src/widget/context_drawer/overlay.rs +++ b/src/widget/context_drawer/overlay.rs @@ -33,7 +33,7 @@ where .layout(self.tree, renderer, &limits); let node_size = node.size(); - node.clone().move_to(Point { + node.move_to(Point { x: if bounds.width > node_size.width - 8.0 { bounds.width - node_size.width - 8.0 } else { diff --git a/src/widget/dropdown/menu/mod.rs b/src/widget/dropdown/menu/mod.rs index 021fcc60..1d42d01f 100644 --- a/src/widget/dropdown/menu/mod.rs +++ b/src/widget/dropdown/menu/mod.rs @@ -204,7 +204,7 @@ impl<'a, Message: Clone + 'a> Overlay<'a, Message> { .with_data_mut(|tree| tree.diff(&mut container as &mut dyn Widget<_, _, _>)); Self { - state: state.tree.clone(), + state: state.tree, container, width, target_height, @@ -234,10 +234,11 @@ impl<'a, Message: Clone + 'a> Overlay<'a, Message> { .state .with_data_mut(|tree| self.container.layout(tree, renderer, &limits)); - node.clone().move_to(if space_below > space_above { + let node_size = node.size(); + node.move_to(if space_below > space_above { self.position + Vector::new(0.0, self.target_height) } else { - self.position - Vector::new(0.0, node.size().height) + self.position - Vector::new(0.0, node_size.height) }) } diff --git a/src/widget/dropdown/multi/menu.rs b/src/widget/dropdown/multi/menu.rs index 10b0d8d4..0035829f 100644 --- a/src/widget/dropdown/multi/menu.rs +++ b/src/widget/dropdown/multi/menu.rs @@ -199,15 +199,14 @@ impl iced_core::Overlay for Ove ) .width(self.width); - let mut node = self.container.layout(self.state, renderer, &limits); + let node = self.container.layout(self.state, renderer, &limits); - node = node.clone().move_to(if space_below > space_above { + let node_size = node.size(); + node.move_to(if space_below > space_above { position + Vector::new(0.0, self.target_height) } else { - position - Vector::new(0.0, node.size().height) - }); - - node + position - Vector::new(0.0, node_size.height) + }) } fn on_event( @@ -513,7 +512,7 @@ where OptionElement::Option((option, item)) => { let (color, font) = if self.selected_option.as_ref() == Some(&item) { let item_x = bounds.x + appearance.border_width; - let item_width = bounds.width - appearance.border_width * 2.0; + let item_width = appearance.border_width.mul_add(-2.0, bounds.width); bounds = Rectangle { x: item_x, @@ -551,7 +550,7 @@ where (appearance.selected_text_color, crate::font::semibold()) } else if self.hovered_option.as_ref() == Some(item) { let item_x = bounds.x + appearance.border_width; - let item_width = bounds.width - appearance.border_width * 2.0; + let item_width = appearance.border_width.mul_add(-2.0, bounds.width); bounds = Rectangle { x: item_x, diff --git a/src/widget/dropdown/multi/widget.rs b/src/widget/dropdown/multi/widget.rs index 9c183292..79b1a6b7 100644 --- a/src/widget/dropdown/multi/widget.rs +++ b/src/widget/dropdown/multi/widget.rs @@ -432,44 +432,46 @@ pub fn overlay<'a, S: AsRef, Message: 'a, Item: Clone + PartialEq + 'static }; let mut desc_count = 0; - selections - .elements() - .map(|element| match element { - super::menu::OptionElement::Description(desc) => { - let paragraph = if state.descriptions.len() > desc_count { - &mut state.descriptions[desc_count] - } else { - state.descriptions.push(crate::Plain::default()); - state.descriptions.last_mut().unwrap() - }; - desc_count += 1; - measure(desc.as_ref(), paragraph, description_line_height) - } + padding.horizontal().mul_add( + 2.0, + selections + .elements() + .map(|element| match element { + super::menu::OptionElement::Description(desc) => { + let paragraph = if state.descriptions.len() > desc_count { + &mut state.descriptions[desc_count] + } else { + state.descriptions.push(crate::Plain::default()); + state.descriptions.last_mut().unwrap() + }; + desc_count += 1; + measure(desc.as_ref(), paragraph, description_line_height) + } - super::menu::OptionElement::Option((option, item)) => { - let selection_index = state.selections.iter().position(|(i, _)| i == item); + super::menu::OptionElement::Option((option, item)) => { + let selection_index = + state.selections.iter().position(|(i, _)| i == item); - let selection_index = match selection_index { - Some(index) => index, - None => { - state - .selections - .push((item.clone(), crate::Plain::default())); - state.selections.len() - 1 - } - }; + let selection_index = match selection_index { + Some(index) => index, + None => { + state + .selections + .push((item.clone(), crate::Plain::default())); + state.selections.len() - 1 + } + }; - let paragraph = &mut state.selections[selection_index].1; + let paragraph = &mut state.selections[selection_index].1; - measure(option.as_ref(), paragraph, text_line_height) - } + measure(option.as_ref(), paragraph, text_line_height) + } - super::menu::OptionElement::Separator => 1.0, - }) - .fold(0.0, |next, current| current.max(next)) - + gap + super::menu::OptionElement::Separator => 1.0, + }) + .fold(0.0, |next, current| current.max(next)), + ) + gap + 16.0 - + (padding.horizontal() * 2.0) }) .padding(padding) .text_size(text_size); diff --git a/src/widget/flex_row/layout.rs b/src/widget/flex_row/layout.rs index 720e4561..744b607d 100644 --- a/src/widget/flex_row/layout.rs +++ b/src/widget/flex_row/layout.rs @@ -156,7 +156,7 @@ pub fn resolve( _ => (), } - *node = node.clone().move_to(Point { + node.move_to_mut(Point { x: leaf_layout.location.x, y: leaf_layout.location.y, }); diff --git a/src/widget/grid/layout.rs b/src/widget/grid/layout.rs index d1da68af..a7e42759 100644 --- a/src/widget/grid/layout.rs +++ b/src/widget/grid/layout.rs @@ -187,7 +187,7 @@ pub fn resolve( _ => (), } - *node = node.clone().move_to(Point { + node.move_to_mut(Point { x: leaf_layout.location.x, y: leaf_layout.location.y, }) diff --git a/src/widget/id_container.rs b/src/widget/id_container.rs index 7f6bc97e..3d468b20 100644 --- a/src/widget/id_container.rs +++ b/src/widget/id_container.rs @@ -112,7 +112,7 @@ where ) -> event::Status { self.content.as_widget_mut().on_event( &mut tree.children[0], - event.clone(), + event, layout .children() .next() diff --git a/src/widget/menu/flex.rs b/src/widget/menu/flex.rs index 5eaf3d94..8eb08d4e 100644 --- a/src/widget/menu/flex.rs +++ b/src/widget/menu/flex.rs @@ -200,16 +200,16 @@ where let (x, y) = axis.pack(main, pad.1); - let node_ = node.clone().move_to(Point::new(x, y)); + node.move_to_mut(Point::new(x, y)); - let node_ = match axis { - Axis::Horizontal => node_.align(Alignment::Start, align_items, Size::new(0.0, cross)), - Axis::Vertical => node_.align(align_items, Alignment::Start, Size::new(cross, 0.0)), + match axis { + Axis::Horizontal => { + node.align_mut(Alignment::Start, align_items, Size::new(0.0, cross)) + } + Axis::Vertical => node.align_mut(align_items, Alignment::Start, Size::new(cross, 0.0)), }; - let size = node_.bounds().size(); - - *node = node_; + let size = node.bounds().size(); main += axis.main(size); } @@ -367,16 +367,16 @@ pub fn resolve_wrapper<'a, Message>( let (x, y) = axis.pack(main, pad.1); - let node_ = node.clone().move_to(Point::new(x, y)); + node.move_to_mut(Point::new(x, y)); - let node_ = match axis { - Axis::Horizontal => node_.align(Alignment::Start, align_items, Size::new(0.0, cross)), - Axis::Vertical => node_.align(align_items, Alignment::Start, Size::new(cross, 0.0)), + match axis { + Axis::Horizontal => { + node.align_mut(Alignment::Start, align_items, Size::new(0.0, cross)) + } + Axis::Vertical => node.align_mut(align_items, Alignment::Start, Size::new(cross, 0.0)), }; - let size = node_.bounds().size(); - - *node = node_; + let size = node.bounds().size(); main += axis.main(size); } diff --git a/src/widget/menu/menu_inner.rs b/src/widget/menu/menu_inner.rs index c88a7570..c455cd13 100644 --- a/src/widget/menu/menu_inner.rs +++ b/src/widget/menu/menu_inner.rs @@ -370,7 +370,7 @@ impl MenuState { let limits = Limits::new(Size::ZERO, self.menu_bounds.child_sizes[index]); let parent_offset = children_bounds.position() - Point::ORIGIN; let node = menu_tree.item.layout(tree, renderer, &limits); - node.clone().move_to(Point::new( + node.move_to(Point::new( parent_offset.x, parent_offset.y + position + self.scroll_offset, )) diff --git a/src/widget/responsive_container.rs b/src/widget/responsive_container.rs index 92bedef1..fbc2df9e 100644 --- a/src/widget/responsive_container.rs +++ b/src/widget/responsive_container.rs @@ -168,7 +168,7 @@ where self.content.as_widget_mut().on_event( &mut tree.children[0], - event.clone(), + event, layout .children() .next() diff --git a/src/widget/segmented_button/widget.rs b/src/widget/segmented_button/widget.rs index 5dd8e7c7..bb05aa9d 100644 --- a/src/widget/segmented_button/widget.rs +++ b/src/widget/segmented_button/widget.rs @@ -1419,8 +1419,8 @@ where renderer.fill_quad( renderer::Quad { bounds: Rectangle { - x: bounds.x - - (level as f32 * self.indent_spacing as f32) + x: (level as f32) + .mul_add(-(self.indent_spacing as f32), bounds.x) + indent_padding, width: 1.0, ..bounds diff --git a/src/widget/toaster/widget.rs b/src/widget/toaster/widget.rs index f6324e15..52604592 100644 --- a/src/widget/toaster/widget.rs +++ b/src/widget/toaster/widget.rs @@ -199,7 +199,7 @@ where fn layout(&mut self, renderer: &Renderer, bounds: Size) -> Node { let limits = Limits::new(Size::ZERO, bounds); - let mut node = self + let node = self .element .as_widget() .layout(self.state, renderer, &limits); @@ -211,9 +211,7 @@ where bounds.height - (node.size().height + offset), ); - node.move_to_mut(position); - - node + node.move_to(position) } fn draw(