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);
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 {

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<_, _, _>));
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)
})
}

View file

@ -199,15 +199,14 @@ impl<Message> iced_core::Overlay<Message, crate::Theme, crate::Renderer> 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,

View file

@ -432,44 +432,46 @@ pub fn overlay<'a, S: AsRef<str>, 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);

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,
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,
y: leaf_layout.location.y,
})

View file

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

View file

@ -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);
}

View file

@ -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,
))

View file

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

View file

@ -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

View file

@ -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(