mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-11-11 16:33:22 -06:00
Plug-ins: color parameters, and filters that make guides and lock
A `color` parameter shows a color button that opens the color picker in plug-in dialogs and the Appearance panel's effect editor; its default and values may be a color object or a hex string, and the plug-in gets a color object. A filter's returned objects may set `guide` and `locked`; objects it locked or made guides are left out of the selection after the run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
committed by
bflatastic
co-authored by
Claude Opus 5.5
parent
9b8561b225
commit
b9594b233c
@@ -151,6 +151,33 @@ fn geometry_type_and_strokes_change() {
|
||||
assert!(n.appearance.stroke().is_none());
|
||||
}
|
||||
|
||||
/// `guide` and `locked` make objects guides (a compound path's members too) and lock them, or undo
|
||||
/// both; locked objects and guides are not [`selectable`]. Other values are refused.
|
||||
#[test]
|
||||
fn objects_become_guides_and_lock() {
|
||||
let (mut d, ids, layer) = doc();
|
||||
let two = PathData::new(square(0.0).subpaths.into_iter().chain(square(2.0).subpaths).collect());
|
||||
let out = json!({"objects": [
|
||||
{"id": ids[0].0, "guide": true},
|
||||
{"id": ids[1].0, "locked": true},
|
||||
{"name": "G", "type": "compound", "path": two, "guide": true, "locked": true}]});
|
||||
let made = apply_output(&mut d, &ids[..2], decode_json(out).unwrap(), Some(layer), &keep).unwrap();
|
||||
let a = d.node(ids[0]).unwrap();
|
||||
assert!(matches!(a.kind, NodeKind::Path { guide: true, .. }) && !a.locked && !selectable(a));
|
||||
let b = d.node(ids[1]).unwrap();
|
||||
assert!(b.locked && matches!(b.kind, NodeKind::Path { guide: false, .. }) && !selectable(b));
|
||||
let g = d.node(made[2]).unwrap();
|
||||
let NodeKind::Compound { children, .. } = &g.kind else { panic!("not a compound: {:?}", g.kind) };
|
||||
assert!(g.locked && children.iter().all(|c| matches!(c.kind, NodeKind::Path { guide: true, .. })));
|
||||
// And back: a plain, unlocked, selectable path.
|
||||
let out = json!({"objects": [{"id": ids[0].0, "guide": false, "locked": false}]});
|
||||
apply_output(&mut d, &ids[..1], decode_json(out).unwrap(), None, &keep).unwrap();
|
||||
assert!(selectable(d.node(ids[0]).unwrap()));
|
||||
for bad in [json!({"guide": 1}), json!({"locked": "yes"})] {
|
||||
assert!(decode_json(json!({"objects": [bad]})).is_err(), "{bad}");
|
||||
}
|
||||
}
|
||||
|
||||
/// A paint handed back as it was keeps its swatch link and any other is unlinked; a pattern paint
|
||||
/// must name a pattern the document has.
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user