Keep allocation destinations readable without blocking collapsed header drops
This commit is contained in:
@@ -41,7 +41,6 @@ pub struct Target {
|
||||
pub element: Id,
|
||||
pub placement: Id,
|
||||
pub region: Rectangle,
|
||||
pub label: plan::Rect,
|
||||
pub name: String,
|
||||
pub ancestors: Vec<Id>,
|
||||
}
|
||||
@@ -95,22 +94,7 @@ impl Frozen {
|
||||
ancestors.push(id);
|
||||
parent = project.elements.get(&id).and_then(|e| e.parent);
|
||||
}
|
||||
// This is also the exact frozen label painted above the ghost.
|
||||
let name = crate::views::short(
|
||||
project.named(e.id),
|
||||
(((region.width - 28.).max(10.) / 10.) as usize).min(34),
|
||||
);
|
||||
let label = plan::Rect {
|
||||
position: Position {
|
||||
x: region.x + 10.,
|
||||
y: region.y + 31.,
|
||||
},
|
||||
size: Size {
|
||||
width: (name.chars().count() as f32 * 10. + 8.)
|
||||
.min((region.width - 20.).max(1.)),
|
||||
height: 22.,
|
||||
},
|
||||
};
|
||||
let name = project.named(e.id).to_owned();
|
||||
let collapsed = scope.diagram.nodes[&n.id].collapsed;
|
||||
targets.push(Target {
|
||||
element: e.id,
|
||||
@@ -123,7 +107,6 @@ impl Frozen {
|
||||
} else {
|
||||
region
|
||||
},
|
||||
label,
|
||||
name,
|
||||
ancestors,
|
||||
});
|
||||
@@ -281,6 +264,30 @@ pub struct Feedback {
|
||||
pub text: String,
|
||||
pub refused: bool,
|
||||
}
|
||||
impl Feedback {
|
||||
/// Captured accepted names, independent of clipped status/refusal prose.
|
||||
pub fn destination_identity(&self) -> String {
|
||||
match self.targets.as_slice() {
|
||||
[] => if self.press.arrange {
|
||||
"Arrange only"
|
||||
} else if self.refused {
|
||||
"No eligible destination"
|
||||
} else {
|
||||
"Outside performers"
|
||||
}
|
||||
.into(),
|
||||
[index] => self.press.frozen.targets[*index].name.clone(),
|
||||
indices => format!(
|
||||
"Ambiguous: {}",
|
||||
indices
|
||||
.iter()
|
||||
.map(|index| self.press.frozen.targets[*index].name.as_str())
|
||||
.collect::<Vec<_>>()
|
||||
.join(" / ")
|
||||
),
|
||||
}
|
||||
}
|
||||
}
|
||||
#[derive(Default)]
|
||||
pub struct State {
|
||||
pub epoch: u64,
|
||||
@@ -552,7 +559,7 @@ impl App {
|
||||
viewport: stamp.viewport(), zoom: stamp.zoom,
|
||||
target: target.map(|i| {
|
||||
let t = &press.frozen.targets[i];
|
||||
plan::TargetPresentation { placement: t.placement, label: t.label }
|
||||
plan::TargetPresentation { placement: t.placement }
|
||||
}),
|
||||
};
|
||||
let placement = plan::place(&semantic, requested, presentation).map_err(|r| refusal(&r))?;
|
||||
|
||||
Reference in New Issue
Block a user