Quartz print module (folded TargetPrint) [v2.1] #16

Open
opened 2026-09-08 17:41:36 +01:00 by gronod · 0 comments
Owner

Summary

Separable Swift package ICCeryPrintKit. NOT a v2.0 / M3 / M6 exit gate. Create this issue as Gitea #16 so numbering matches the plan.

Spec refs

docs/14-iccery-cpu-targetprint.md.

Scope

In: package, TargetJob JSON + --job, in-process NSPrintOperation, AirPrint warning, seam test.
Out: wizard types, AP_ApplicationColorMatching (that is the lp path).

Implementation notes

  • Zero deps on wizard / ProcessManager / settings.
  • Public API: TargetJob v1 JSON + --job CLI (fire-and-forget) AND in-process NSPrintOperation. Preserve extractability to a standalone app.
  • ColorSync vocabulary MUST stay distinct from issue 14/15:
    PMColorMatchingMode=APCustomColorMatching
    PMCustomColorMatchingProfile=""
    legacy com.apple.print.PrintSettings.PMColorMatchingMode
    nested com.apple.print.printSettings
  • Vendor keys (separate table): Epson ColorModel=RGB + EPSONColorControls=Off; Canon CNColorMatching=None; HP ColorModel=RGB + HPColorControl=Off.
  • Geometry: 72pt = 1in; no backingScaleFactor; interpolation .none; antialias off; margins 0; pagination .clip; scalingFactor 1.0.
  • SPEC contradiction: job JSON "centered": true vs draw “no centering”. Lock: no centering, scale 1.0 for profiling targets.
  • AirPrint detection (apple-airprint://, *APAirPrint: True, Apple+AirPrint model, ipps:// + airprint PPD text) → persistent warning.
  • ImageIO TIFF decode cached, no float, DPI from properties default 72.

Rewrite invariants

Never mix ColorSync dictionaries. No interpolation. Module extracts cleanly.

Dependencies

Blocks-on: 13, 17 (UI hook later). Not required for M3 or M6.
Unblocks: standalone TargetPrint extraction.

Test

  • CI/mock: seam-integrity; module compiles standalone.
  • Hardware: 1:1 on paper vs TIFF dims.

CI/CD Steps

  • Build of Target print as a separate app (standalone .smg) to be included as additional artifact

Acceptance criteria

  • Package builds with no ICCeryCore import.
  • v2.0 M6 can ship without this module linked.
## Summary Separable Swift package `ICCeryPrintKit`. NOT a v2.0 / M3 / M6 exit gate. Create this issue as Gitea #16 so numbering matches the plan. ## Spec refs docs/14-iccery-cpu-targetprint.md. ## Scope In: package, TargetJob JSON + `--job`, in-process NSPrintOperation, AirPrint warning, seam test. Out: wizard types, `AP_ApplicationColorMatching` (that is the lp path). ## Implementation notes - Zero deps on wizard / ProcessManager / settings. - Public API: `TargetJob` v1 JSON + `--job` CLI (fire-and-forget) AND in-process `NSPrintOperation`. Preserve extractability to a standalone app. - ColorSync vocabulary MUST stay distinct from issue 14/15: `PMColorMatchingMode=APCustomColorMatching` `PMCustomColorMatchingProfile=""` legacy `com.apple.print.PrintSettings.PMColorMatchingMode` nested `com.apple.print.printSettings` - Vendor keys (separate table): Epson `ColorModel=RGB` + `EPSONColorControls=Off`; Canon `CNColorMatching=None`; HP `ColorModel=RGB` + `HPColorControl=Off`. - Geometry: 72pt = 1in; no `backingScaleFactor`; interpolation `.none`; antialias off; margins 0; pagination `.clip`; scalingFactor 1.0. - SPEC contradiction: job JSON `"centered": true` vs draw “no centering”. **Lock: no centering, scale 1.0** for profiling targets. - AirPrint detection (`apple-airprint://`, `*APAirPrint: True`, Apple+AirPrint model, `ipps://` + airprint PPD text) → persistent warning. - ImageIO TIFF decode cached, no float, DPI from properties default 72. ## Rewrite invariants Never mix ColorSync dictionaries. No interpolation. Module extracts cleanly. ## Dependencies Blocks-on: 13, 17 (UI hook later). Not required for M3 or M6. Unblocks: standalone TargetPrint extraction. ## Test - CI/mock: seam-integrity; module compiles standalone. - Hardware: 1:1 on paper vs TIFF dims. ## CI/CD Steps - Build of Target print as a separate app (standalone .smg) to be included as additional artifact ## Acceptance criteria - [ ] Package builds with no ICCeryCore import. - [ ] v2.0 M6 can ship without this module linked.
gronod added this to the Later — Quartz / TargetPrint (v2.1) milestone 2026-09-08 17:41:36 +01:00
gronod added the
Priority
High
2
Project/ICCery-v2Feature/BackendFeature/UI
labels 2026-09-08 17:41:36 +01:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gronod/iccery-v2-mac#16