M3.9: swatches in colour groups are first-class — Document Color Mode converts them, they can be spot colours with their own plate and PDF Separation, and Document Info counts them

Document::swatches_iter/_mut, swatch_mut, swatch_group_of, remove_swatch and a copy-on-write
walk over linked solid paints (map_solid_paints) cover every colour group.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bflatastic
2026-10-04 12:15:10 +07:00
co-authored by Claude Opus 5.5
parent fb8c41d8e3
commit 00a0874d4d
9 changed files with 366 additions and 13 deletions
+2 -2
View File
@@ -58,7 +58,7 @@ pub fn plates(doc: &Document) -> Vec<Plate> {
Plate { name: (*n).into(), spot: false, rgb: c.cmyk_to_srgb(ink, false) }
})
.collect();
for sw in &doc.swatches {
for sw in doc.swatches_iter() {
if let (true, Paint::Solid { color, .. }) = (sw.spot, &sw.paint)
&& !v.iter().any(|p| p.name == sw.name)
{
@@ -69,7 +69,7 @@ pub fn plates(doc: &Document) -> Vec<Plate> {
}
fn spot_swatch<'a>(doc: &'a Document, name: &str) -> Option<&'a Color> {
doc.swatches.iter().find(|s| s.spot && s.name == name).and_then(|s| match &s.paint {
doc.swatch(name).filter(|s| s.spot).and_then(|s| match &s.paint {
Paint::Solid { color, .. } => Some(color),
_ => None,
})