mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-11-12 08:52:26 +00:00
Symbols: an instance fill with no opacity keeps the art's swatch links
A symbol instance whose fill has an opacity of 0 no longer counts as stained. Expand Appearance and the other places that build an instance's art used to rebuild every solid paint as an unlinked color even though the tint changed nothing, so the art lost its global and spot swatch links.
This commit is contained in:
@@ -75,6 +75,34 @@ fn symbol_instance_tint_survives_expanding_an_object_effect() {
|
||||
assert!(differing(&before, &after, 8) < 200, "expanding changed {} pixels", differing(&before, &after, 8));
|
||||
}
|
||||
|
||||
/// An instance fill with an opacity of 0 does not tint the symbol's art, so expanding keeps the
|
||||
/// art's global swatch link.
|
||||
#[test]
|
||||
fn a_symbol_instance_fill_with_no_opacity_keeps_swatch_links_when_expanded() {
|
||||
let mut s = session();
|
||||
let sq = square(&mut s);
|
||||
run(&mut s, "swatch.new", json!({"name": "Brand", "color": "#2a6fb0", "global": true}));
|
||||
run(&mut s, "paint.setFill", json!({"ids": [sq.0], "swatch": "Brand"}));
|
||||
let id = NodeId(run(&mut s, "symbol.new", json!({"name": "Linked Square"}))["id"].as_u64().unwrap());
|
||||
run(&mut s, "appearance.addFill", json!({"ids": [id.0]}));
|
||||
let fill = node(&s, id).appearance.items.len() - 1;
|
||||
run(&mut s, "appearance.setItem", json!({"ids": [id.0], "index": fill, "color": "#00ff00", "opacity": 0}));
|
||||
run(&mut s, "effect.apply", json!({"ids": [id.0], "item": null, "effect": "path.offsetPath", "params": {"offset": 6}}));
|
||||
assert!(expandable(&s));
|
||||
|
||||
run(&mut s, "effect.expandAppearance", json!({}));
|
||||
let n = node(&s, id);
|
||||
assert!(!matches!(n.kind, NodeKind::SymbolInstance { .. }));
|
||||
let mut linked = 0;
|
||||
n.walk(&mut |part| {
|
||||
if let vectorcraft_color::Paint::Solid { swatch: Some(name), .. } = part.appearance.fill_paint() {
|
||||
assert_eq!(name, "Brand");
|
||||
linked += 1;
|
||||
}
|
||||
});
|
||||
assert!(linked > 0, "the expanded art keeps the Brand swatch link");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn two_fills_and_an_offset_stroke_become_three_paths_that_look_the_same() {
|
||||
let mut s = session();
|
||||
|
||||
Reference in New Issue
Block a user