Keep raw route gesture baseline separate from wrapped presentation
This commit is contained in:
@@ -96,6 +96,9 @@ struct Scene {
|
||||
font_version: Option<iced::advanced::graphics::text::Version>,
|
||||
work: Option<Arc<crate::app::allocation_drag::Preview>>,
|
||||
view: ProjectedView,
|
||||
/// Core routing is the gesture baseline. Presentation-only wrapping must
|
||||
/// never become a frozen label in a later core preview.
|
||||
core_routed: Arc<RoutedView>,
|
||||
routed: Arc<RoutedView>,
|
||||
}
|
||||
struct CachedScene {
|
||||
@@ -541,7 +544,8 @@ impl DiagramCanvas<'_> {
|
||||
{
|
||||
return scene.clone();
|
||||
}
|
||||
let mut routed = preview.routed.clone();
|
||||
let core_routed = preview.routed.clone();
|
||||
let mut routed = core_routed.clone();
|
||||
let label_layout = if profile == label_layout_experiment::Profile::Baseline {
|
||||
None
|
||||
} else {
|
||||
@@ -559,6 +563,7 @@ impl DiagramCanvas<'_> {
|
||||
font_version,
|
||||
work: Some(preview.clone()),
|
||||
view: preview.placement.view.clone(),
|
||||
core_routed,
|
||||
routed,
|
||||
});
|
||||
*state.work_cache.borrow_mut() = Some(scene.clone());
|
||||
@@ -596,7 +601,7 @@ impl DiagramCanvas<'_> {
|
||||
self.project.diagrams[&self.diagram].clone()
|
||||
};
|
||||
let view = self.projected(&diagram);
|
||||
let mut routed = Arc::new(
|
||||
let core_routed = Arc::new(
|
||||
if let Some(gesture) = state
|
||||
.route_drag
|
||||
.as_ref()
|
||||
@@ -613,6 +618,7 @@ impl DiagramCanvas<'_> {
|
||||
route_diagram(self.project, &diagram, &view)
|
||||
},
|
||||
);
|
||||
let mut routed = core_routed.clone();
|
||||
let label_layout = if profile == label_layout_experiment::Profile::Baseline {
|
||||
None
|
||||
} else {
|
||||
@@ -630,6 +636,7 @@ impl DiagramCanvas<'_> {
|
||||
font_version,
|
||||
work: None,
|
||||
view,
|
||||
core_routed,
|
||||
routed,
|
||||
});
|
||||
*state.cache.borrow_mut() = Some(CachedScene {
|
||||
@@ -658,7 +665,7 @@ impl DiagramCanvas<'_> {
|
||||
route: EdgeRoute,
|
||||
profile: label_layout_experiment::Profile,
|
||||
) {
|
||||
let baseline = self.scene_with_profile(state, profile).routed.clone();
|
||||
let baseline = self.scene_with_profile(state, profile).core_routed.clone();
|
||||
state.route_drag = Some(Gesture {
|
||||
context: self.context,
|
||||
start: world,
|
||||
|
||||
@@ -421,17 +421,19 @@ fn coincident_attachment_handles_honor_explicit_end_choice() {
|
||||
EdgeEnd::Target,
|
||||
)));
|
||||
let c = canvas(&app, 1.);
|
||||
let core_routed = Arc::new(route_diagram(
|
||||
c.project,
|
||||
&c.project.diagrams[&c.diagram],
|
||||
&projection::project_view(c.project, c.diagram),
|
||||
));
|
||||
let mut scene = Scene {
|
||||
label_layout: None,
|
||||
profile: label_layout_experiment::Profile::Baseline,
|
||||
font_version: None,
|
||||
work: None,
|
||||
view: projection::project_view(c.project, c.diagram),
|
||||
routed: Arc::new(route_diagram(
|
||||
c.project,
|
||||
&c.project.diagrams[&c.diagram],
|
||||
&projection::project_view(c.project, c.diagram),
|
||||
)),
|
||||
routed: core_routed.clone(),
|
||||
core_routed,
|
||||
};
|
||||
let routed = Arc::make_mut(&mut scene.routed);
|
||||
let edge = routed.edges.get_mut(&c.selected).unwrap();
|
||||
|
||||
@@ -609,7 +609,7 @@ mod tests {
|
||||
handle: Handle::Label { original: offset },
|
||||
route: p.diagrams[&id].routes[0].clone(),
|
||||
changed: true,
|
||||
baseline: scene.routed.clone(),
|
||||
baseline: scene.core_routed.clone(),
|
||||
});
|
||||
preview
|
||||
.route_drag
|
||||
@@ -758,6 +758,7 @@ mod tests {
|
||||
));
|
||||
let plain = c.scene_with_profile(&state, Profile::Baseline);
|
||||
assert!(plain.label_layout.is_none());
|
||||
assert!(Arc::ptr_eq(&plain.core_routed, &plain.routed));
|
||||
assert_eq!(
|
||||
*plain.routed,
|
||||
route_diagram(&p, &p.diagrams[&id], &plain.view)
|
||||
|
||||
Reference in New Issue
Block a user