mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-29 20:27:05 -06:00
Fix #504: Convert corner/smooth for a path selected as a whole with the anchor tools
Reported: Alt-click with the Pen should toggle an anchor between corner and smooth, and the Control bar had no way to make a corner anchor smooth. v0.5.0 already has Pen + Alt as the Anchor Point tool (#473) and the Control bar's and the Properties panel's Convert buttons for direct-selected anchors, the path being drawn included (its last anchor is selected). The remaining gap: with Direct Selection, the Pen, the Curvature or the anchor tools, a path selected as a whole shows all its anchors selected, yet the Convert buttons only appeared once anchors were direct-selected. - chrome::anchor_controls decides what the Control bar and the Properties panel show: Convert and Anchors for direct-selected anchors (as before), Convert alone for paths selected as a whole with a tool that edits anchors (path.convertAnchors already converts every anchor of those); Remove and Cut still wait for anchors direct-selected, as they act on those only. - Tests: the Control bar and the Properties panel offer Convert for a whole rectangle with Direct Selection and the Pen, not with the Selection tool, and smooth converts every corner; Pen + Alt on the path being drawn makes a smooth anchor a corner (click) and a corner smooth (drag), and drawing goes on. ROADMAP. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
f6cd4588ee
commit
ac63002df9
@@ -766,3 +766,27 @@ fn pen_drag_from_the_first_anchor_closes_the_path() {
|
||||
gesture(&mut s, &[(500.0, 500.0)], none);
|
||||
assert_eq!(paths(&s).len(), 2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pen_with_alt_converts_the_anchors_of_the_path_being_drawn() {
|
||||
// #504: while drawing, Alt-click on a smooth anchor of the path makes it a corner and Alt-drag
|
||||
// on a corner one pulls out smooth handles; the next click goes on drawing the path.
|
||||
let (none, alt) = (Mods::default(), Mods { alt: true, ..Mods::default() });
|
||||
let v = view();
|
||||
let mut s = session();
|
||||
s.select_tool("pen", v).unwrap();
|
||||
gesture(&mut s, &[(100.0, 300.0)], none);
|
||||
gesture(&mut s, &[(200.0, 300.0), (240.0, 300.0)], none);
|
||||
gesture(&mut s, &[(300.0, 400.0)], none);
|
||||
gesture(&mut s, &[(400.0, 300.0)], none);
|
||||
let id = s.doc().unwrap().selection.objects[0];
|
||||
assert!(smooth(path(&s, id).subpaths[0].anchors[1]));
|
||||
assert_eq!(gesture(&mut s, &[(200.0, 300.0)], alt), 1);
|
||||
let a = path(&s, id).subpaths[0].anchors[1];
|
||||
assert!(!a.has_in() && !a.has_out(), "a corner: {a:?}");
|
||||
assert_eq!(gesture(&mut s, &[(300.0, 400.0), (320.0, 400.0), (340.0, 400.0)], alt), 1);
|
||||
let a = path(&s, id).subpaths[0].anchors[2];
|
||||
assert!(smooth(a) && a.h_out == Point::new(340.0, 400.0), "smooth: {a:?}");
|
||||
gesture(&mut s, &[(500.0, 400.0)], none);
|
||||
assert_eq!((paths(&s).len(), path(&s, id).subpaths[0].anchors.len()), (1, 5));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user