bflatastic
00a0874d4d
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>
2026-10-04 12:15:10 +07:00
bflatastic
fb8c41d8e3
Merge wp/M1: one engine loader/encoder for every frontend and export correctness (M4.12, M4.13)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:58:07 +07:00
bflatastic
115255a7e4
Merge wp/WP-00: neutral labels, packaging metadata and vendor-name CI gate (M3.7, M4.10, M4.11)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:57:34 +07:00
bflatastic
29d43d2a84
Merge wp/WP-01: split paint/panel command modules and dialogs into per-area files (M3.8)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:57:28 +07:00
bflatastic
879295dd1a
M4.10: shortcut-set alias test reads the legacy name from the alias table
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:56:39 +07:00
bflatastic
7b410ecf2c
M3.7: proof setup looks profiles up through the alias table; alias tests read the legacy name from it
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:56:39 +07:00
bflatastic
7bc50901e4
M4.13: review fixes — template sublayers are left out of raster exports too (the check moves into draw_arc), Export Selection skips art under a template layer at any depth, Export for Screens drops @Nx suffixes on SVG/PDF rows, names files without case clashes and calls an unnamed artboard Artboard-N, oversized raster exports are refused instead of writing empty files, a named MCP artboard/range replaces the option picks, and control app.export without a path returns dataBase64 instead of opening a save dialog
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:49:45 +07:00
bflatastic
5d9b97c3bd
M4.10: neutral file, preference and MCP wording; vendor-name CI gate
...
Edit -> "PDF Presets…"; the clipboard preferences read "Legacy vector
clipboard (no transparency)" / "Legacy vector clipboard" (keys copyAicb and
aicbMode unchanged); the second keyboard shortcut set is "Classic Defaults",
and the old set name is still accepted from saved UI preferences, imported
sets and shortcuts.preset. The MCP server instructions, the apply_effect and
create_graph tool descriptions, the text.createInPath params doc,
docs/mcp.md, the ui-egui crate description and the PDF compatibility docs
no longer name another vendor.
New `cargo xtask brands` (run by `cargo xtask ci`) fails on vendor product
or company names in Rust string literals (labels, params docs, menus,
panels, MCP definitions; comments and test code skipped), Cargo.toml
descriptions and text under docs/ and packaging/; a required legacy alias
is marked `brand-ok`. xtask shares one git file listing between the asset
and brand checks. docs/development.md describes the gate.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:47:28 +07:00
bflatastic
dd0bb0eefb
M3.7: colour tests share the settings lock
...
Every colour-management test reads or changes the process-wide colour
settings or proof view, so all of them now hold the file's lock; the
legacy-profile-name test switching the RGB working space could otherwise
shift a parallel RGB/CMYK round-trip.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:45:32 +07:00
bflatastic
45a7302601
M4.13: export correctness and MCP export parity — document.export/serialize honour artboard, artboards or range ("1-3, 5") for PDF (one page per artboard) and return dataBase64 without a path; Export for Screens writes one page per PDF, ignores scale and @Nx suffixes for vector formats, names duplicate artboards -2/-3 and returns bytes without a folder; raster exports, thumbnails and Export Selection leave template layers out (RenderOptions.skip_templates); file.exportForScreens with params runs the engine; the MCP export tool takes artboard/range/options, lists formats from the engine and never retargets the document; CLI convert --range
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:38:23 +07:00
bflatastic
4d503c0327
M4.12: one loader and encoder for every frontend — engine fileio (load/encode/export/save, append-only FORMATS table, OPEN_EXTS, document.formats query, typed per-format options, parse_range); document.open reads native/legacy, SVG/SVGZ, PDF/.ai, .ait (opens untitled like native templates) and PNG/JPEG/GIF/WebP/TIFF/BMP; desktop, web, control channel, headless MCP and the CLI open and encode through it; open dialogs list "All readable files" plus one filter per format
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:36:51 +07:00
bflatastic
9cabeea68b
M3.8: register the split paint modules next to paint so the command palette keeps listing them (Stroke Options for "stroke")
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:32:11 +07:00
bflatastic
b7969a6a5d
M3.8: split the paint/panel command modules and the dialogs into per-area files
...
No behaviour change: every command keeps its id, label, menu, shortcut and
params doc.
- Engine: swatch.* -> cmd/swatch.rs, graphicStyle.* -> cmd/style.rs,
appearance.* (incl. copyFrom) -> cmd/appearance.rs, stroke.set/setAdvanced
-> cmd/stroke.rs, paint.editGradient/setGradientGeom -> cmd/gradient.rs.
Shared helpers in cmd/mod.rs: leaf_targets/paint_targets (replacing three
copies) and unique_name (swatch and graphic style naming).
- UI: dialogs.rs -> dialogs/ with one file per dialog and a DialogSpec
registry (one DialogKind row per dialog); shared field widgets in
dialogs/form.rs. Headless frame tests draw and confirm every dialog.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:22:23 +07:00
bflatastic
0af38a31fd
M4.11: packaging metadata describes a vector illustration app
...
Drop the file types and wording carried over from the sibling raster
editor: the macOS exported type now declares .vectorcraft/.drawcraft
(was .pcraft) and the raster imported types (large raster documents, QOI)
are gone; the dev bundle's PDF type is "PDF Document"; Linux categories and
keywords say vector graphics (no trademark keyword), the AppStream
description and screenshot show VectorCraft, and the deb/rpm, MSI and web
embedding descriptions say vector illustration app. File associations stay
as they are. An xtask test rejects raster-editor wording in packaging/.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:19:13 +07:00
bflatastic
016fcbf34e
M3.7: neutral paint, effect and stroke labels
...
The wide-gamut RGB working space is now "Wide Gamut RGB (1998 primaries)";
its old name still resolves everywhere (cms::profile / canonical_name,
Color Settings, Assign Profile, documents and settings saved earlier).
The Effect menu section is "Vector Effects", stroke width profiles are
Lens / Taper Start / Taper End, dash, arrowhead-tip and gradient-on-stroke
tooltips are reworded, the Window library submenus hold neutral disabled
placeholders until the generated libraries land, and the Swatches menu
offers "Save Swatch Library…" (disabled).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:17:50 +07:00
bflatastic
d99853ed2a
M4.10: neutral New Document preset name
...
Rename the 'iPhone' New Document preset to 'Phone 390×844'.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 11:01:59 +07:00
bflatastic
5fab94753c
CI: cargo fmt xtask/src/version.rs (the fmt gate failed on main)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 10:23:06 +07:00
BFlat
604c20ed90
Merge pull request #3 from storytold/revert-readme-habits
...
Docs: revert the README habits sentence
2026-10-04 01:16:35 +07:00
bflatastic
e08ced735e
Docs: drop the README's list of specific Illustrator habits (too detailed for the overview); the control-protocol note on the save prompt stays
2026-10-04 01:16:12 +07:00
BFlat
b538b0a84a
Merge pull request #2 from storytold/docs-workflow-updates
...
Docs: workflow fixes from #1 (README, control protocol)
2026-10-04 00:57:41 +07:00
bflatastic
62681d2b80
Docs: README names the Illustrator habits that now work (corner widget dragging, Alt-click pivot on an anchor, middle-mouse pan, save prompt before closing); control protocol: file.close / closeAll / app.quit open a saveChanges dialog per modified document and how agents answer it
2026-10-04 00:55:55 +07:00
Brandon Thomas
4ddc422e51
Release 0.1.1
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 09:55:30 -04:00
Brandon Thomas
f188863b10
README: tagline names the Adobe app it reimplements; standard Adobe trademark and non-affiliation notice
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 12:24:12 -04:00
Brandon Thomas
e608d5a26b
README: Crafting Apps table in five columns (icon, app, purpose, GitHub, Website)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 12:19:01 -04:00
Brandon Thomas
065d095597
README: drop the old DrawCraft name; VectorCraft links to /apps/vectorcraft
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 12:18:12 -04:00
Brandon Thomas
4af5e80a41
README: app icons in the Crafting Apps table
...
Drop the app icon from the top of the README, matching PhotoCraft, and
show each app's icon next to its name in the Crafting Apps table in place
of the coloured name badges. The table is now identical across all seven
apps apart from the "you are here" row.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 12:17:13 -04:00
Brandon Thomas
2d0b055c7e
Make ported packaging scripts executable (fixes exit 126)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 12:03:30 -04:00
BFlat
1531cb0d11
Merge pull request #1 from storytold/live-corners-pan-close-prompt
...
Live Corners dragging, transform pivot snapping, middle-mouse pan, save prompt on close
2026-10-02 23:00:22 +07:00
bflatastic
b8701977d4
M4.9: Save / Don't Save / Cancel before closing modified documents — File → Close, Close All, a tab's ×, Quit and the window's close button ask once per modified document (shown first); Cancel stops the whole close/quit, a cancelled Save As keeps the document open; closing keeps per-document views aligned; agents answer the saveChanges dialog with ui.dialog.confirm (discard: true for Don't Save)
2026-10-02 22:42:50 +07:00
bflatastic
3f1f3383d3
M11.6: middle-button drag pans the view with any tool (no tool events, grabbing cursor while panning; a left press during the pan is ignored); headless canvas test
2026-10-02 22:42:50 +07:00
bflatastic
cf775072be
M1.10: Rotate/Reflect/Scale/Shear reference point snaps — a click or Alt-click within 5 px of an anchor or object centre (of the selection or the object under the pointer) pivots exactly there, so Alt-clicking a corner flips/rotates from that corner; hovering shows the anchor/center label first; follows View → Snap to Point or Smart Guides (snap_to_point now reaches the tools)
2026-10-02 22:42:50 +07:00
bflatastic
8276d0a303
M2.10: Live Corners — drag a live rectangle's corner widget (Selection or Direct Selection) to round or sharpen all four corners as one undo step (object.setLiveShape preview, radius readout, follows rotated/scaled shapes, square to fully round); widgets drawn from the same geometry the tools hit-test, hidden on tiny shapes and with View → Hide Corner Widget; corner-radius cursor
2026-10-02 22:42:49 +07:00
Brandon Thomas
0e24110259
Fix macOS Info.plist: remove document-types block cleanly (route B)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 11:36:23 -04:00
Brandon Thomas
da8a14dd04
Signed release pipeline (macOS/Windows/Linux/Web); README community note
...
Ports photocraft's release workflow + packaging (signing, notarization,
MSI/DMG/deb/rpm/AppImage/web), adds `cargo xtask version`. File-type
associations omitted for now (route B); app keeps its own .desktop. Fresh
WiX UpgradeCode. README 'about' note updated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-02 11:35:29 -04:00
Brandon Thomas
7b37dd1da5
M7.6: tab stops and the Tabs panel — left/center/right/decimal stops (align-on character), default stops every ½ inch, text.tabs.set/get/clear, ruler (click adds, drag moves, drag off deletes), Repeat Tab / Delete Tab / Clear All Tabs; control characters no longer draw .notdef boxes
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 10:13:24 -04:00
Brandon Thomas
437320509d
app icon: regal engraved dragon (owner's ArtCraft drawing), Dock/taskbar/launcher wiring, palette docs
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 09:45:30 -04:00
Brandon Thomas
dabd179d5a
M7.4: Text Wrap flows on both sides of an object (lines split into every free span, left to right, sharing the baseline; exact interval intersection across the line band)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 09:28:04 -04:00
Brandon Thomas
fa2d901a7e
M2.9: Shaper tool — rough rectangles, ellipses, triangles/polygons/diamonds and lines become clean live shapes (geom::recognize), squares/circles snap; a scribble deletes the objects it crosses
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 09:10:44 -04:00
Brandon Thomas
55e24d6622
M11.4: text-thread connectors on selected threaded frames + View → Hide/Show Text Threads, Hide/Show Gradient Annotator, Type → Show Hidden Characters (spaces, ¶, #), Effect → Last Effect… (reopens the last effect's dialog)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 08:51:33 -04:00
Brandon Thomas
dcc5a006a2
M3.6: opacity-mask editing mode — click the mask thumbnail to edit the mask art on a temporary isolated layer with any tool; the mask updates live after every edit; the object thumbnail (or transparency.stopEditingOpacityMask) leaves the mode
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 08:40:18 -04:00
Brandon Thomas
5026dad446
M11.5: View → New View… / Edit Views… (saved views in the document, up to 25, listed at the bottom of the View menu; view.saved.* commands)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 08:16:36 -04:00
Brandon Thomas
8e735f1de9
M11.3: View → Snap to Pixel (drawing points and moved selections land on whole pixels)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 08:16:36 -04:00
Brandon Thomas
16a73dc02a
M12.7: Object → Create Object Mosaic… (trace::mosaic tile averages; columns/rows, new size, spacing, gray, delete raster; follows the image transform)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 08:16:36 -04:00
Brandon Thomas
5a36fa1a9b
M6.1: a panic inside the curve sweep (rare near-degenerate input) becomes PathOpsError::Degenerate instead of crashing (found by the randomized export test)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 08:16:35 -04:00
Brandon Thomas
bfa46e6cb4
M9.4: raster effects in PDF export — shadows/outer glows as images under the untouched vector object, inner glow/feather/blur as images, at the document's resolution; Effect → Document Raster Effects Settings… (document.rasterEffectsSettings: screen/medium/high/ppi); engine::export_pdf used by app, CLI and MCP
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 07:58:10 -04:00
Brandon Thomas
9f20c36f33
Roadmap: parity estimate — ~65% feature parity (weighted over 22 areas), ~50% including fidelity and hardening; ~330–500 h of Opus 5.5 to feature parity and ~440–670 h to full parity for one agent (~85–140 h / ~115–190 h with 4–6 agents); inventories and milestone estimates reconciled
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 07:51:36 -04:00
Brandon Thomas
9b0fe0ca5d
M1.9: agent integrations — MCP tools add_text, apply_effect, pathfinder, transform, create_graph, text_wrap, export {selection, outlineText}; CLI convert (IN → OUT, effects kept) and info; SVG export Convert to Outlines (text as glyph paths); TextObject pathEffect key camelCase
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 07:50:20 -04:00
Brandon Thomas
1d493c7f06
M12.6: Graphs — the nine graph tools (Column, Stacked Column, Bar, Stacked Bar, Line, Area, Scatter, Pie, Radar), Object → Graph → Type… and Data… (CSV), series groups with legend, regenerate in place keeping moves/scales
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 00:16:23 -04:00
Brandon Thomas
13d0aef57f
M1.5: commands that default to the current layer validate the remembered id (reused after undo it could name a compound path: Send to Current Layer moved art into it, Delete Layer could delete it)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 00:16:23 -04:00
Brandon Thomas
1e7b4308ec
M0.2: hit-test distance exact on cusp-like cubics (nearest-point accuracy 1e-9; proptest regression)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 00:16:23 -04:00