remove redundant clones, use mul_add on f32s

This commit is contained in:
Cheong Lau 2025-10-11 16:24:38 +10:00 committed by Michael Murphy
parent bd438a8581
commit 1d6a43486e
12 changed files with 69 additions and 69 deletions

View file

@ -33,7 +33,7 @@ where
.layout(self.tree, renderer, &limits); .layout(self.tree, renderer, &limits);
let node_size = node.size(); let node_size = node.size();
node.clone().move_to(Point { node.move_to(Point {
x: if bounds.width > node_size.width - 8.0 { x: if bounds.width > node_size.width - 8.0 {
bounds.width - node_size.width - 8.0 bounds.width - node_size.width - 8.0
} else { } else {

View file

@ -204,7 +204,7 @@ impl<'a, Message: Clone + 'a> Overlay<'a, Message> {
.with_data_mut(|tree| tree.diff(&mut container as &mut dyn Widget<_, _, _>)); .with_data_mut(|tree| tree.diff(&mut container as &mut dyn Widget<_, _, _>));
Self { Self {
state: state.tree.clone(), state: state.tree,
container, container,
width, width,
target_height, target_height,
@ -234,10 +234,11 @@ impl<'a, Message: Clone + 'a> Overlay<'a, Message> {
.state .state
.with_data_mut(|tree| self.container.layout(tree, renderer, &limits)); .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) self.position + Vector::new(0.0, self.target_height)
} else { } else {
self.position - Vector::new(0.0, node.size().height) self.position - Vector::new(0.0, node_size.height)
}) })
} }

View file

@ -199,15 +199,14 @@ impl<Message> iced_core::Overlay<Message, crate::Theme, crate::Renderer> for Ove
) )
.width(self.width); .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) position + Vector::new(0.0, self.target_height)
} else { } else {
position - Vector::new(0.0, node.size().height) position - Vector::new(0.0, node_size.height)
}); })
node
} }
fn on_event( fn on_event(
@ -513,7 +512,7 @@ where
OptionElement::Option((option, item)) => { OptionElement::Option((option, item)) => {
let (color, font) = if self.selected_option.as_ref() == Some(&item) { let (color, font) = if self.selected_option.as_ref() == Some(&item) {
let item_x = bounds.x + appearance.border_width; 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 { bounds = Rectangle {
x: item_x, x: item_x,
@ -551,7 +550,7 @@ where
(appearance.selected_text_color, crate::font::semibold()) (appearance.selected_text_color, crate::font::semibold())
} else if self.hovered_option.as_ref() == Some(item) { } else if self.hovered_option.as_ref() == Some(item) {
let item_x = bounds.x + appearance.border_width; 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 { bounds = Rectangle {
x: item_x, x: item_x,

View file

@ -432,44 +432,46 @@ pub fn overlay<'a, S: AsRef<str>, Message: 'a, Item: Clone + PartialEq + 'static
}; };
let mut desc_count = 0; let mut desc_count = 0;
selections padding.horizontal().mul_add(
.elements() 2.0,
.map(|element| match element { selections
super::menu::OptionElement::Description(desc) => { .elements()
let paragraph = if state.descriptions.len() > desc_count { .map(|element| match element {
&mut state.descriptions[desc_count] super::menu::OptionElement::Description(desc) => {
} else { let paragraph = if state.descriptions.len() > desc_count {
state.descriptions.push(crate::Plain::default()); &mut state.descriptions[desc_count]
state.descriptions.last_mut().unwrap() } else {
}; state.descriptions.push(crate::Plain::default());
desc_count += 1; state.descriptions.last_mut().unwrap()
measure(desc.as_ref(), paragraph, description_line_height) };
} desc_count += 1;
measure(desc.as_ref(), paragraph, description_line_height)
}
super::menu::OptionElement::Option((option, item)) => { super::menu::OptionElement::Option((option, item)) => {
let selection_index = state.selections.iter().position(|(i, _)| i == item); let selection_index =
state.selections.iter().position(|(i, _)| i == item);
let selection_index = match selection_index { let selection_index = match selection_index {
Some(index) => index, Some(index) => index,
None => { None => {
state state
.selections .selections
.push((item.clone(), crate::Plain::default())); .push((item.clone(), crate::Plain::default()));
state.selections.len() - 1 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, super::menu::OptionElement::Separator => 1.0,
}) })
.fold(0.0, |next, current| current.max(next)) .fold(0.0, |next, current| current.max(next)),
+ gap ) + gap
+ 16.0 + 16.0
+ (padding.horizontal() * 2.0)
}) })
.padding(padding) .padding(padding)
.text_size(text_size); .text_size(text_size);

View file

@ -156,7 +156,7 @@ pub fn resolve<Message>(
_ => (), _ => (),
} }
*node = node.clone().move_to(Point { node.move_to_mut(Point {
x: leaf_layout.location.x, x: leaf_layout.location.x,
y: leaf_layout.location.y, y: leaf_layout.location.y,
}); });

View file

@ -187,7 +187,7 @@ pub fn resolve<Message>(
_ => (), _ => (),
} }
*node = node.clone().move_to(Point { node.move_to_mut(Point {
x: leaf_layout.location.x, x: leaf_layout.location.x,
y: leaf_layout.location.y, y: leaf_layout.location.y,
}) })

View file

@ -112,7 +112,7 @@ where
) -> event::Status { ) -> event::Status {
self.content.as_widget_mut().on_event( self.content.as_widget_mut().on_event(
&mut tree.children[0], &mut tree.children[0],
event.clone(), event,
layout layout
.children() .children()
.next() .next()

View file

@ -200,16 +200,16 @@ where
let (x, y) = axis.pack(main, pad.1); 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 { match axis {
Axis::Horizontal => node_.align(Alignment::Start, align_items, Size::new(0.0, cross)), Axis::Horizontal => {
Axis::Vertical => node_.align(align_items, Alignment::Start, Size::new(cross, 0.0)), 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(); let size = node.bounds().size();
*node = node_;
main += axis.main(size); main += axis.main(size);
} }
@ -367,16 +367,16 @@ pub fn resolve_wrapper<'a, Message>(
let (x, y) = axis.pack(main, pad.1); 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 { match axis {
Axis::Horizontal => node_.align(Alignment::Start, align_items, Size::new(0.0, cross)), Axis::Horizontal => {
Axis::Vertical => node_.align(align_items, Alignment::Start, Size::new(cross, 0.0)), 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(); let size = node.bounds().size();
*node = node_;
main += axis.main(size); main += axis.main(size);
} }

View file

@ -370,7 +370,7 @@ impl MenuState {
let limits = Limits::new(Size::ZERO, self.menu_bounds.child_sizes[index]); let limits = Limits::new(Size::ZERO, self.menu_bounds.child_sizes[index]);
let parent_offset = children_bounds.position() - Point::ORIGIN; let parent_offset = children_bounds.position() - Point::ORIGIN;
let node = menu_tree.item.layout(tree, renderer, &limits); 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.x,
parent_offset.y + position + self.scroll_offset, parent_offset.y + position + self.scroll_offset,
)) ))

View file

@ -168,7 +168,7 @@ where
self.content.as_widget_mut().on_event( self.content.as_widget_mut().on_event(
&mut tree.children[0], &mut tree.children[0],
event.clone(), event,
layout layout
.children() .children()
.next() .next()

View file

@ -1419,8 +1419,8 @@ where
renderer.fill_quad( renderer.fill_quad(
renderer::Quad { renderer::Quad {
bounds: Rectangle { bounds: Rectangle {
x: bounds.x x: (level as f32)
- (level as f32 * self.indent_spacing as f32) .mul_add(-(self.indent_spacing as f32), bounds.x)
+ indent_padding, + indent_padding,
width: 1.0, width: 1.0,
..bounds ..bounds

View file

@ -199,7 +199,7 @@ where
fn layout(&mut self, renderer: &Renderer, bounds: Size) -> Node { fn layout(&mut self, renderer: &Renderer, bounds: Size) -> Node {
let limits = Limits::new(Size::ZERO, bounds); let limits = Limits::new(Size::ZERO, bounds);
let mut node = self let node = self
.element .element
.as_widget() .as_widget()
.layout(self.state, renderer, &limits); .layout(self.state, renderer, &limits);
@ -211,9 +211,7 @@ where
bounds.height - (node.size().height + offset), bounds.height - (node.size().height + offset),
); );
node.move_to_mut(position); node.move_to(position)
node
} }
fn draw( fn draw(