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);
|
.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 {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
))
|
))
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue