Brandon Thomas
d899a63286
Merge pull request #208 from imachus/pr/ja-vertical
...
Type: kinsoku, tate-chu-yoko and upright placement for vertical type
2026-10-06 15:49:07 -04:00
Brandon Thomas and Claude Opus 5.5
f95b032c82
Merge main into #208 (after #207 and #209 ): keep both IME and vertical-arrow tests
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-06 15:44:50 -04:00
Brandon Thomas
ce9f3aa7c6
Merge pull request #207 from imachus/pr/ja-ime
...
Type: input method composition (Japanese IME) in the Type tool
2026-10-06 15:44:32 -04:00
Brandon Thomas
ef3fa1689f
Merge pull request #209 from imachus/pr/ja-fonts
...
Type: find fonts by any of their names; say how each one resolved
2026-10-06 15:44:17 -04:00
Brandon Thomas and Claude Opus 5.5
68352dab02
fmt: the font fallback path list fits on one line
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-06 15:37:22 -04:00
Brandon Thomas and Claude Opus 5.5
51a9b899c1
Merge main into #209 ; leave other apps' private font folders alone
...
Conflicts with #214 (fonts by PostScript name): this branch's name index (FaceKeys,
aliases) stays, and #214 's `by_postscript_name` (used by PDF import) reads a PostScript
map filled from it, keyed by the same normalized names.
Removed: scanning ~/Library/Application Support/Adobe (CoreSync/plugins/livetype and
Fonts), and the preference that switched it (Type › Include Fonts of Other Design Apps'
Folders). Fonts activated through another vendor's subscription are licensed for use
through that vendor's own sync; reading their files from VectorCraft would go around that
licence, and the project's clean-room rules keep VectorCraft out of other vendors' files.
Fonts the user has installed in the system or user font folders are still found by every
name, as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-06 15:36:09 -04:00
Brandon Thomas
377204f90e
Merge pull request #225 from theironchef/fix/shift-drag-selected
...
Selection tool: Shift+drag on a selected object moves it, constrained
2026-10-06 15:30:18 -04:00
Brandon Thomas
0306d51592
Merge pull request #214 from p0lyg0n/fix/pdf-font-postscript-names
...
PDF/.ai import: fonts are found by their PostScript name, whatever hyphens the family holds
2026-10-06 15:30:14 -04:00
Brandon Thomas
ebc6d1af7b
Merge pull request #181 from japbcoelho/fix/cli-closed-stdout
...
CLI: a closed stdout ends vectorcraft-cli quietly
2026-10-06 15:30:09 -04:00
Brandon Thomas
856e36c694
Merge pull request #220 from storytold/pr/craft-fonts
...
Fonts: use craft-fonts as an optional build input; move the Japanese fonts out
2026-10-06 14:37:41 -04:00
Brandon Thomas and Claude Opus 5.5
721d1118f3
Fonts: docs use an absolute CRAFT_FONTS_DIR; note the web size
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-06 14:19:24 -04:00
Brandon Thomas and Claude Opus 5.5
3491b99321
Fonts: the Japanese-menu glyph test skips without craft-fonts
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-06 11:09:46 -04:00
Brandon Thomas and Claude Opus 5.5
546a65f77a
Fonts: use craft-fonts as an optional build input; move the Japanese fonts out
...
Shippori Mincho (assets/fonts, from #145 ) moves to storytold/craft-fonts. crates/text/build.rs
embeds the fonts of a craft-fonts checkout when CRAFT_FONTS_DIR is set (web: BIZ UDPGothic
Regular only) as vectorcraft_text::CRAFT_FONTS; unset, it is empty and Japanese falls back to the
installed fonts. Document text gets the Japanese faces after the bundled fonts (Mincho first); the
UI adds them at the end of every egui family (BIZ UDPGothic first), before ui_fonts' system-font
discovery. Release and FreeBSD CI builds check craft-fonts out at a pinned commit; packages carry
the fonts' OFL texts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-06 10:42:21 -04:00
Brandon Thomas
77708ad8de
Merge pull request #215 from storytold/pr/windows-arm64
...
Windows on ARM64: release builds, PE header check, install test on ARM64 hardware
2026-10-06 10:13:23 -04:00
Brandon Thomas and Claude Opus 5.5
129c9ca61e
Windows ARM64 workflow: pin third-party actions by commit
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-06 09:51:04 -04:00
Brandon Thomas and Claude Opus 5.5
ceb6defcf3
Windows on ARM64: release builds, PE header check, install test on ARM64 hardware
...
Release builds add an arm64 MSI and portable zip, cross-compiled on the x64
runner (signing and WiX as for x64). package.ps1 checks each binary's PE
header before packaging: Machine must match -Arch, the app must be a GUI
program and the CLI a console program. It skips the CLI smoke run when an
ARM64 build can't run on the host. A new Windows ARM64 workflow packages the
ARM64 MSI, installs it on a Windows 11 ARM64 runner, checks both installed
exes are ARM64, runs the CLI, and uninstalls. Ported from printcraft#66.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-06 09:38:29 -04:00
Brandon Thomas
7a39cb7b89
Merge pull request #212 from storytold/pr/release-0.3.1
...
Release: VectorCraft v0.3.1
2026-10-06 08:03:26 -04:00
Brandon Thomas and Claude Opus 5.5
15ab25426e
Release: VectorCraft v0.3.1
...
Fixes the Windows installer: the Start Menu shortcut and Add/Remove Programs icon were blank. Release builds no longer open a console window behind the app.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-06 08:03:13 -04:00
Brandon Thomas
899a82d31d
Merge pull request #211 from storytold/pr/windows-packaging
...
Windows packaging: Start Menu/Add-Remove icon, no console window, correct description
2026-10-06 07:53:56 -04:00
Brandon Thomas and Claude Opus 5.5
7bca89dd15
Windows packaging: Start Menu/Add-Remove icon, no console window, correct description
...
The MSI Icon id had no .ico/.exe extension, which Windows Installer needs for
advertised shortcuts and ARPPRODUCTICON, so both showed a blank icon. Release
builds of the desktop app are now GUI-subsystem (no console window; the CLI stays
a console program), the shortcut/summary description names what VectorCraft does, and
packaging-lint rejects an Icon id without an extension. Found in printcraft#57.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-06 07:50:24 -04:00
Brandon Thomas
7f5344a60c
Merge pull request #145 from midasdf/feat/japanese-interface-language
...
Add Japanese menus and initial vertical type tools
2026-10-06 07:43:47 -04:00
Brandon Thomas and Claude Opus 5.5
691a54e7fd
Roadmap and README: Japanese interface and initial vertical type
...
The appended Interface localization section moves into the roadmap's structure: a
Shipped so far entry, the Type advanced row (45%, CJK composition left), the gap list,
the inventories (16 stubbed menu items; Touch Type the only missing tool) and totals
recomputed from the parity table (75.3%, 211–332 h to feature parity); README Status
follows.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-06 07:43:25 -04:00
Brandon Thomas and Claude Opus 5.5
1733fa5fdb
i18n: keep only VectorCraft's own menu labels, and test that
...
47 of the 83 entries were labels from other apps ("New blank PDF", "Comments panel",
"Read mode"…) that never appear here. A test now walks the menu tree and fails on any
entry that isn't one of VectorCraft's labels.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-06 07:43:25 -04:00
Brandon Thomas
7715dcd285
Merge remote-tracking branch 'origin/main' into pr145-v2
2026-10-06 07:43:14 -04:00
Brandon Thomas
025315f4bf
Merge pull request #210 from storytold/fix/clippy-byte-str
...
clippy: byte string in the envelope test (main's clippy step is red on Rust 1.99)
2026-10-06 07:09:43 -04:00
Brandon Thomas and Claude Opus 5.5
4c6ac00e72
clippy: a byte string for the envelope test's newline (byte_char_slices, red on main with Rust 1.99)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-06 07:09:35 -04:00
Brandon Thomas
2c02502f43
Merge pull request #176 from theironchef/fix/dxf-hatch-spline-edge
...
DXF import: a hatch spline edge without fit data keeps its loop
2026-10-05 21:51:30 -04:00
Brandon Thomas
e35f75f733
Merge pull request #174 from theironchef/fix/regions-one-pass
...
Pathfinder: find all regions in a few contour passes, not one per mask
2026-10-05 21:51:26 -04:00
Brandon Thomas
3f0bce6a88
Merge pull request #138 from theironchef/fix/clippy-1.99
...
Lint: as_chunks for constant chunk sizes, as clippy 1.99 asks
2026-10-05 21:51:22 -04:00
Brandon Thomas
36a6a8ae49
Merge pull request #129 from storytold/pr/freebsd-ci-sync
...
FreeBSD CI: match the shared template
2026-10-05 10:04:50 -04:00
Brandon Thomas and Claude Opus 5.5
2b15d3234f
FreeBSD CI: match the shared template (git + safe.directory, 4 vCPUs, pinned vmactions/freebsd-vm)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-05 09:45:18 -04:00
Brandon Thomas
a867c1e020
Merge pull request #126 from storytold/pr/freebsd
...
FreeBSD: build and test the workspace in a FreeBSD VM
2026-10-05 08:50:50 -04:00
Brandon Thomas and Claude Opus 5.5
7c0a253b50
docs: point agents to the shared test corpora ( #125 )
...
Real-file test oracles live in storytold/photocraft-corpus, explained in
craftrules standards/test-corpora.md. Never commit large binary fixtures
here; fetch them pinned and sha256-verified.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-05 08:24:28 -04:00
Brandon Thomas and Claude Opus 5.5
466f863d00
FreeBSD: build and test the workspace in a FreeBSD VM
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-05 08:23:19 -04:00
Brandon Thomas
4e72f8c0ec
Merge pull request #118 from storytold/docs/honest-assessment
...
Roadmap: honest assessment, the gap list and where we're going
2026-10-05 06:11:31 -04:00
Brandon Thomas and Claude Opus 5.5
2b48392c36
Roadmap: honest assessment, the gap list and where we're going
...
- ROADMAP: a new "Honest assessment (2026-10-05)" section with:
- scores by dimension (breadth, depth, large missing subsystems, interaction
fidelity, look and feel, file interop, bundled content, performance,
robustness, platforms, automation) and how far to trust the self-graded scores;
- the prioritized gap list with one-agent hour sizes;
- the direction (next, then, alongside, 1.0).
- ROADMAP: the parity rows for files, export, print, links and UI chrome are
re-derived after M4 (feature parity ~74% on the rubric, 68–74% honest range;
~230–350 h to feature parity, ~335–520 h to full parity, one agent), the M4 and
M11 milestone rows and the inventories are updated, and "Shipped so far" lists M4
and the robustness work.
- README Status: where we are, what's missing, where we're going.
- AGENTS.md / CLAUDE.md: sessions start from the gap list; landing a task updates
the assessment, the parity row and the README status in the same PR.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-05 06:11:03 -04:00
Brandon Thomas
90e022b0c0
Merge pull request #102 from storytold/pr/release-0.2.0
...
Release: VectorCraft v0.2.0
2026-10-05 02:41:45 -04:00
Brandon Thomas and Claude Opus 5.5
8b50a2604d
Release: VectorCraft v0.2.0
...
Bump the workspace version 0.1.1 -> 0.2.0 (cargo xtask version set 0.2.0).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-05 02:41:32 -04:00
Brandon Thomas and Claude Opus 5.5
3e323bfa2a
Robustness: VectorCraft never crashes — no panics in shipped code
...
Shipped code no longer unwraps, expects or panics: every one of the 124
unwrap()/expect()/panic!/unreachable! sites outside tests now handles the
failure (Result/Option, ?, let-else, defaults) and reports errors to the user.
- Lints: workspace clippy denies unwrap_used, expect_used, panic, todo,
unimplemented and unreachable; clippy.toml allows them in tests, and
integration tests, examples and testkit opt out explicitly.
- Safety net (vectorcraft_engine::guard): a panic in a top-level command rolls
the document back and returns EngineError::Internal; a panicking tool is
reset; the MCP server answers with an internal error and keeps serving; the
UI frame and each control request are guarded.
- APIs that hid failures now return them: Rendered::to_png/to_jpeg/to_webp
return Result (JPEG/WebP errors used to write empty files),
FontDb::face returns Option, Region::top returns Option.
- Fuzzing: engine/tests/import_fuzz.rs feeds garbage, hostile and mutated SVG
and PDF through import → render → export (30k cases locally, no panics).
- Docs: AGENTS.md/CLAUDE.md rule, docs/development.md "Robustness" section,
README pointer and a PR template checklist.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-05 06:28:59 +07:00
Brandon Thomas and Claude Opus 5.5
0f241aac9f
clippy: as_chunks for fixed-size pixel and pair chunks (Rust 1.99 lint was red on main)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-05 06:24:06 +07:00
Brandon Thomas
ead8f72208
Merge pull request #11 from storybored379/pr/svg-import-physical-units
...
SVG import: root sizes in mm/cm/in/pt open at their physical size
2026-10-04 10:16:45 -04:00
Brandon Thomas
3326b1aaac
Merge pull request #10 from storybored379/pr/svg-export-area-type-lines
...
SVG export: area type keeps its wrapped lines and alignment
2026-10-04 10:16:42 -04:00
Brandon Thomas
6b93a3dded
Merge pull request #9 from storybored379/pr/raster-export-size-limit
...
Raster export: refuse sizes the renderer can't produce instead of crashing
2026-10-04 10:16:39 -04:00
Brandon Thomas
4be1e009ec
Merge pull request #8 from storybored379/pr/svg-import-tspan-line-gap
...
SVG import: tspan line breaks follow the baseline gap (none on the same baseline, bounded far gaps)
2026-10-04 10:16:35 -04:00
Brandon Thomas
a4696edbe8
Merge pull request #7 from storybored379/pr/invalid-dash-pattern
...
Stroke dashes: an invalid dash pattern draws a solid stroke instead of hanging the renderer
2026-10-04 10:16:32 -04:00
Brandon Thomas
cbf5dc99bb
Merge pull request #6 from storybored379/pr/svg-import-text-on-path
...
SVG import: <textPath> comes back as type on a path
2026-10-04 10:16:28 -04:00
Brandon Thomas
8164d7c3fb
Merge pull request #5 from storybored379/pr/mcp-headless-open-pdf-ai
...
MCP: headless open_file reads .pdf and PDF-compatible .ai, as File ▸ Open does
2026-10-04 10:16:24 -04:00
Brandon Thomas and Claude Opus 5.5
439f99e491
xtask: rustfmt version.rs (fmt gate was red on main)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 10:16:06 -04:00
Brandon Thomas
a1430cfc1e
Merge pull request #12 from storytold/pr/license-standard
...
Licensing: MIT OR Apache-2.0 files, NOTICE, ArtCraft brand terms
2026-10-04 10:08:55 -04:00
Brandon Thomas and Claude Opus 5.5
ef5beece81
Licensing: MIT OR Apache-2.0 files, NOTICE, ArtCraft brand terms
...
Adds LICENSE-MIT, LICENSE-APACHE and docs/brand/LICENSE-brand.txt from the Crafting Apps
licensing standard. NOTICE follows the standard template (copyright, licence, brand carve-out)
and keeps the third-party list, now noting the Feather-derived Lucide icons (also MIT) and the
egui default fonts compiled into the app. ASSETS.md gives the docs/brand/ files their trademark
terms and marks the 21 Feather-derived Lucide icons. README uses the standard License and credits
section; AGENTS.md/CLAUDE.md point to the licence and brand files.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 10:05:13 -04:00
Brandon Thomas and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 4.8
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
Brandon Thomas and Claude Opus 4.8
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 and Claude Opus 4.8
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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 and Claude Opus 5.5
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
Brandon Thomas and Claude Opus 5.5
c878ac994c
M11.4: View → Hide/Show Corner Widget; Type → Recent Fonts (last 10 applied fonts, persisted)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 23:46:20 -04:00
Brandon Thomas and Claude Opus 5.5
69be79bbf1
M4.4: File → Export Selection… (selected art cropped to its bounds as PNG/JPG/WebP/SVG/PDF), Save as Template… and New from Template… (templates open as untitled documents)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 23:46:20 -04:00
Brandon Thomas and Claude Opus 5.5
3b48776607
M5.2: render perf — drop shadows/outer glows from a cached CPU-blurred raster composited per draw (600 shadows: ~300–1500 ms → 17–70 ms/frame); object blend modes on single plain fills applied per draw instead of a full-viewport layer; effect catalogue indexed once (lookups 300× faster)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 23:31:22 -04:00
Brandon Thomas and Claude Opus 5.5
4745f39c6c
M7.4: Object → Text Wrap (Make, Release, Text Wrap Options: offset, invert): area type flows around wrap objects above it in the same layer, re-resolved after every edit
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 22:48:49 -04:00
Brandon Thomas and Claude Opus 5.5
0ae572be93
M7.3: Type → Type on a Path effects (Rainbow, Skew, 3D Ribbon, Stair Step, Gravity): TextObject::path_effect, type.pathOptions {effect}, checked menu items
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 22:21:58 -04:00
Brandon Thomas and Claude Opus 5.5
8434ef4404
M2.6: Flare tool ↑/↓ add or remove rays while drawing
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 22:21:58 -04:00
Brandon Thomas and Claude Opus 5.5
09fc2eedd9
M4.3: live effects survive SVG, PDF and clipboard export (vectorcraft_effects::bake_document evaluates object, per-fill/stroke and Pathfinder effects on a copy; SVG raster effects become filters: drop shadow, outer/inner glow, Gaussian blur, feather)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 21:39:20 -04:00
Brandon Thomas and Claude Opus 5.5
1c1fd0f139
M9.3: Effect → Pathfinder (Add, Intersect, Exclude, Subtract, Minus Back, Divide, Trim, Merge, Crop, Outline) as live effects on groups/layers; rendered via the live cache, baked by Expand Appearance
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 20:57:14 -04:00
Brandon Thomas and Claude Opus 5.5
e20fe0a200
M0.9: attribute the ArtCraft brand marks in docs/brand (cargo xtask assets)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 20:57:14 -04:00
Brandon Thomas and Claude Opus 5.5
71d43421f5
M2.6: Flare tool (centre drag, then click for the rings; click → Flare Tool Options; shape.flare builds centre/halo/rays/rings from radial gradients in Screen mode) and Reshape tool (path.reshape: grab a point of a selected path, neighbourhood follows with a smooth falloff)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 20:57:02 -04:00
Brandon Thomas and Claude Opus 5.5
7d95f146ce
M11.4: View → Trim View (artwork clipped to the artboards; RenderOptions::trim)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 20:56:45 -04:00
Brandon Thomas and Claude Opus 5.5
f5ff9317d4
M6.7: Object → Clipping Mask → Edit Contents / Edit Clipping Path (select the clipped art or the mask of the selected clip groups, also from inside one)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 20:56:22 -04:00
Brandon Thomas
a5a02f43c0
readme
2026-10-01 14:51:05 -04:00
Brandon Thomas and Claude Opus 5.5
7d393add4a
Community links: Help menu (Discord, ArtCraft website, app page, GitHub), Discord button in the header, links on the About and Home screens; engine help.* commands return the URLs (menu clicks open them via the host's browser service)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 14:37:29 -04:00
Brandon Thomas and Claude Opus 5.5
4878f1c5dd
Rename DrawCraft → VectorCraft: crates (vectorcraft-*), apps, binaries, types, env vars, docs, examples (.vectorcraft); old .drawcraft files and preferences still load. Fix: text bounds exact after opening a file; selection no longer marks a document modified (dirty = content differs from the saved document). Screenshots and renders regenerated.
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 14:30:09 -04:00
Brandon Thomas and Claude Opus 5.5
deb9df299c
M7.7: Type → Find Font… (fonts in document with missing ones flagged, Find, Change, Change All; engine: text.fonts, text.replaceFont, select.font)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 13:16:26 -04:00
Brandon Thomas and Claude Opus 5.5
d5aa387367
M7.5: OpenType as character attributes — per-run features (ligatures, contextual alternates, discretionary ligatures, swash, small caps, ordinals, fractions, figure styles) drive shaping; OpenType panel; SVG font-feature-settings
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 12:02:13 -04:00
Brandon Thomas and Claude Opus 5.5
d9df5b0135
M7.3/M7.7: threaded text (Type → Threaded Text: Create/Release Selection/Remove Threading; story re-flows after any edit touching its frames, deleted frames' text flows on), Fit Headline; roadmap
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 11:00:17 -04:00
Brandon Thomas and Claude Opus 5.5
f522e6bd3d
M7.3: Area Type Options — rows, columns, gutter, inset, first baseline stored on area type, laid out by the text engine; Type → Area Type Options… dialog prefilled from the selection
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 10:32:58 -04:00
Brandon Thomas and Claude Opus 5.5
4d1eb16424
M1: fix paste into a compound path when undo made a new object reuse the active layer's id (active layer / isolation must still be a layer / group); regression test
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 10:32:58 -04:00
Brandon Thomas and Claude Opus 5.5
6a6e3d4bb1
M4.1/M11: File → Open Recent Files (persisted, native menu too), Document Info panel (document.info), Object → Make Pixel Perfect; agent guide: control-port clashes
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 10:09:19 -04:00
Brandon Thomas and Claude Opus 5.5
48a4720ece
M7.6: Character and Paragraph Styles — partial named styles in the document, apply to objects or a Type tool range, Clear Overrides, override-preserving redefine, duplicate/rename/delete; panels with override markers
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 09:55:01 -04:00
Brandon Thomas and Claude Opus 5.5
2dafc7634b
M5: cache expanded stroke outlines across frames (pans reuse them), skip per-frame bounds for solid paints, pointer hasher for render caches (~7% less CPU per frame on the 20k bench); perf suite budgets reflect reprojection + background refresh
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 09:32:43 -04:00
Brandon Thomas and Claude Opus 5.5
c8f157cc87
M12.5: Image Trace objects remember their preset and parameters (saved in the file); the panel shows the selected trace's settings; Expand clears them
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 09:14:17 -04:00
Brandon Thomas and Claude Opus 5.5
e5959de6cc
M1.6/M12.5: Magic Wand panel (fill/stroke colour, stroke weight, opacity, blending mode with tolerances; settings in the engine, select.magicWand), Image Trace panel (presets, mode, threshold/colours, advanced, live re-trace), Glyphs reachable from the menus
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 09:01:56 -04:00
Brandon Thomas
f673491bd2
progress
2026-10-01 08:56:21 -04:00