diff options
author | 2022-10-19 13:05:56 -0700 | |
---|---|---|
committer | 2022-10-19 13:05:56 -0700 | |
commit | 470723c232493282c513af47d19b3877066ceb2e (patch) | |
tree | 783432bbfe1faa0543b581e7a523377d90ecf74e /native/src/widget/pane_grid.rs | |
parent | fb036529a222126da3f119da4d94d17776460421 (diff) | |
download | iced-470723c232493282c513af47d19b3877066ceb2e.tar.gz iced-470723c232493282c513af47d19b3877066ceb2e.tar.bz2 iced-470723c232493282c513af47d19b3877066ceb2e.zip |
Eliminate unnecessary allocation
Diffstat (limited to 'native/src/widget/pane_grid.rs')
-rw-r--r-- | native/src/widget/pane_grid.rs | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs index 3ef578bf..12ccbb41 100644 --- a/native/src/widget/pane_grid.rs +++ b/native/src/widget/pane_grid.rs @@ -757,32 +757,12 @@ pub fn draw<Renderer, T>( cursor_position }; - // Render picked pane last - let mut elements = elements.zip(layout.children()).collect::<Vec<_>>(); - elements - .sort_by_key(|((id, _), _)| picked_pane.map(|(id, _)| id) == Some(*id)); + let mut render_picked_pane = None; - for ((id, pane), layout) in elements { + for ((id, pane), layout) in elements.zip(layout.children()) { match picked_pane { Some((dragging, origin)) if id == dragging => { - let bounds = layout.bounds(); - - renderer.with_translation( - cursor_position - - Point::new(bounds.x + origin.x, bounds.y + origin.y), - |renderer| { - renderer.with_layer(bounds, |renderer| { - draw_pane( - pane, - renderer, - default_style, - layout, - pane_cursor_position, - viewport, - ); - }); - }, - ); + render_picked_pane = Some((pane, origin, layout.bounds())); } _ => { draw_pane( @@ -797,6 +777,26 @@ pub fn draw<Renderer, T>( } } + // Render picked pane last + if let Some((pane, origin, bounds)) = render_picked_pane { + renderer.with_translation( + cursor_position + - Point::new(bounds.x + origin.x, bounds.y + origin.y), + |renderer| { + renderer.with_layer(bounds, |renderer| { + draw_pane( + pane, + renderer, + default_style, + layout, + pane_cursor_position, + viewport, + ); + }); + }, + ); + }; + if let Some((axis, split_region, is_picked)) = picked_split { let highlight = if is_picked { theme.picked_split(style) |