mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-24 09:46:59 -06:00
Merge pull request #3218 from nrq6993-a11y/stream/vc-feat1-g1-place-file-marquee-size
G1: File Place cursor shows placed size in measurement labels while dragging
This commit is contained in:
@@ -124,7 +124,12 @@ impl Tool for PlaceTool {
|
||||
|
||||
fn overlays(&self, cx: &ToolContext) -> Vec<Overlay> {
|
||||
let Some((a, b)) = self.drag else { return vec![] };
|
||||
self.target(a, b, cx.tol(3.0)).map(Overlay::Marquee).into_iter().collect()
|
||||
let Some(r) = self.target(a, b, cx.tol(3.0)) else { return vec![] };
|
||||
let mut o = vec![Overlay::Marquee(r)];
|
||||
if cx.measurement_labels {
|
||||
o.push(Overlay::Measure { p: b, text: cx.size_label(r.width(), r.height()) });
|
||||
}
|
||||
o
|
||||
}
|
||||
|
||||
fn cursor(&self, _cx: &ToolContext, _p: Point, _mods: Mods) -> Cursor {
|
||||
@@ -215,7 +220,8 @@ mod tests {
|
||||
// A drag up and to the left grows the box from the press point, aspect kept.
|
||||
t.pointer(&c, &ev(PointerKind::Down, 100.0, 100.0));
|
||||
t.pointer(&c, &ev(PointerKind::Drag, 20.0, 90.0));
|
||||
assert_eq!(t.overlays(&c), vec![Overlay::Marquee(Rect::new(20.0, 60.0, 100.0, 100.0))]);
|
||||
let c_marquee_only = ToolContext { measurement_labels: false, ..c };
|
||||
assert_eq!(t.overlays(&c_marquee_only), vec![Overlay::Marquee(Rect::new(20.0, 60.0, 100.0, 100.0))]);
|
||||
let acts = t.pointer(&c, &ev(PointerKind::Up, 20.0, 90.0));
|
||||
assert_eq!(acts[0], Action::Exec("file.place".into(), json!({"path": "f1.png", "rect": [20.0, 60.0, 80.0, 40.0]})));
|
||||
assert_eq!(t.options()["count"], 1);
|
||||
@@ -226,6 +232,29 @@ mod tests {
|
||||
assert!(!t.claims_key(&c, ToolKey::Escape), "an empty cursor takes no keys");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn measurement_labels_gate_the_place_size_readout() {
|
||||
let (d, _) = doc_with_rect();
|
||||
let (s, p) = (Default::default(), paint());
|
||||
let base = cx(&d, &s, &p);
|
||||
let mut t = loaded(1);
|
||||
t.pointer(&base, &ev(PointerKind::Down, 100.0, 100.0));
|
||||
t.pointer(&base, &ev(PointerKind::Drag, 20.0, 90.0));
|
||||
let r = Rect::new(20.0, 60.0, 100.0, 100.0);
|
||||
for on in [false, true] {
|
||||
let c = ToolContext { measurement_labels: on, ..base };
|
||||
let o = t.overlays(&c);
|
||||
assert!(o.iter().any(|x| matches!(x, Overlay::Marquee(_))));
|
||||
let measures = o.iter().filter(|x| matches!(x, Overlay::Measure { .. })).count();
|
||||
assert_eq!(measures, usize::from(on), "measurement labels {on}");
|
||||
if on {
|
||||
assert!(o.iter().any(
|
||||
|x| matches!(x, Overlay::Measure { p, text, .. } if *p == Point::new(20.0, 90.0) && text == &c.size_label(r.width(), r.height()))
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn arrows_cycle_and_escape_discards() {
|
||||
let (d, _) = doc_with_rect();
|
||||
|
||||
Reference in New Issue
Block a user