From dc9ad485d460423e5bc62fe11f159b4ab9988cb7 Mon Sep 17 00:00:00 2001 From: Dmitrii Samsonov Date: Mon, 13 Jan 2025 23:30:53 +0200 Subject: [PATCH] refactored --- src/graph_view.rs | 58 +++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/src/graph_view.rs b/src/graph_view.rs index 7a83cda..d7dd201 100644 --- a/src/graph_view.rs +++ b/src/graph_view.rs @@ -100,37 +100,8 @@ where self.sync_state(&mut meta); - let mut last_layout_events = vec![]; - if let Some(events) = &meta.last_layout_events { - last_layout_events = events.clone(); - }; - let not_placed = &self.g.new_nodes_no_location().iter().copied().collect(); - - GraphView::::sync_layout( - ui, - self.g, - last_layout_events.as_slice(), - not_placed, - ); - - meta.last_layout_events = if let Some(events) = meta.last_layout_events { - Some( - events - .iter() - .cloned() - .filter_map(|el| { - if el == LayoutEvent::NextCalledOnce { - return None; - } - - Some(el) - }) - .collect(), - ) - } else { - Some(vec![LayoutEvent::NextCalledOnce, LayoutEvent::NextCalled]) - }; + GraphView::::sync_layout(ui, &mut meta, self.g, not_placed); let (resp, p) = ui.allocate_painter(ui.available_size(), Sense::click_and_drag()); self.handle_fit_to_screen(&resp, &mut meta); @@ -232,8 +203,8 @@ where fn sync_layout( ui: &mut Ui, + meta: &mut Metadata, g: &mut Graph, - last_layout_events: &[LayoutEvent], not_placed: &HashSet>, ) { ui.data_mut(|data| { @@ -241,9 +212,32 @@ where .get_persisted::(Id::new(KEY_LAYOUT)) .unwrap_or_default(); - let mut layout = L::from_state(state, last_layout_events); + let mut last_layout_events = vec![]; + if let Some(events) = &meta.last_layout_events { + last_layout_events.clone_from(events); + }; + + let mut layout = L::from_state(state, last_layout_events.as_slice()); layout.next(g, not_placed); + meta.last_layout_events = if let Some(events) = &meta.last_layout_events { + Some( + events + .iter() + .cloned() + .filter_map(|el| { + if el == LayoutEvent::NextCalledOnce { + return None; + } + + Some(el) + }) + .collect(), + ) + } else { + Some(vec![LayoutEvent::NextCalledOnce, LayoutEvent::NextCalled]) + }; + data.insert_persisted(Id::new(KEY_LAYOUT), layout.state()); }); }