remove redundant clones, use mul_add on f32s
This commit is contained in:
parent
bd438a8581
commit
1d6a43486e
12 changed files with 69 additions and 69 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
})
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ where
|
|||
) -> event::Status {
|
||||
self.content.as_widget_mut().on_event(
|
||||
&mut tree.children[0],
|
||||
event.clone(),
|
||||
event,
|
||||
layout
|
||||
.children()
|
||||
.next()
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
))
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@ where
|
|||
|
||||
self.content.as_widget_mut().on_event(
|
||||
&mut tree.children[0],
|
||||
event.clone(),
|
||||
event,
|
||||
layout
|
||||
.children()
|
||||
.next()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue