25 Commits
Author SHA1 Message Date
BFlat 04c773367c Merge pull request #4051 from storytold/readme/app-icon
README: the app icon above the title
2026-10-22 18:02:14 +07:00
bflatastic faef579296 README: the app icon above the title 2026-10-22 17:58:11 +07:00
BFlat 1c78ff479c Merge pull request #122 from storytold/fix/107-windows-pdf-association
Windows: register PrintCraft as a PDF handler, so it can be the default (#107)
2026-10-07 11:38:35 +07:00
BFlat 64fc90498b Merge pull request #120 from storytold/docs/97-98-100
Docs: automation README, internal craftrules links, docs/releasing.md (#97, #98, #100)
2026-10-07 11:38:30 +07:00
BFlat 26a3e63bb9 Merge pull request #118 from storytold/fix/94-check-box-styles
Forms: check box and radio button styles (#94)
2026-10-07 11:38:22 +07:00
bflatasticandClaude Opus 5.5 91dc8718b8 Windows: register PrintCraft as a PDF handler, so it can be the default (#107)
The MSI registered no file association. The only PrintCraft entry a
user could pick in "Choose an app on your PC" was the advertised Start
Menu shortcut, which Windows can't run as a file handler ("This app
can't run on your PC").

The MSI now uses Windows' Default Programs registration: a
PrintCraft.Document ProgID (open command, icon), .pdf OpenWithProgids,
Applications\printcraft.exe (friendly name, supported types), and
Capabilities\FileAssociations listed under RegisteredApplications.
PrintCraft appears under "Open with" and in Settings > Default apps.
It never takes over an existing default: .pdf's own default value is
left alone, and the user chooses.

Checked locally with WiX 5.0.2: the MSI builds, passes ICE validation
(only the existing ICE61 note on same-version upgrades), and its
Registry table holds exactly these values.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 09:52:19 +07:00
BFlat 3751978d0e Merge pull request #116 from storytold/fix/93-95-prepare-form
Prepare a form: Detect form fields in the panel, delete several fields at once (#93, #95)
2026-10-07 09:46:48 +07:00
bflatasticandClaude Opus 5.5 032373b2a9 Docs: docs/releasing.md, which release.yml has always pointed to (#100)
release.yml's comments say "See docs/releasing.md", but the workflow came
over from PhotoCraft without its document. It now describes PrintCraft's
pipeline as it is: cutting a release and test runs, every artifact
(including Windows on ARM64), the craft-fonts pin, each platform's
packaging, signing and notarization, the release-environment secrets,
and the packaging checks.

Written from release.yml and the packaging scripts. It says plainly that
the binaries don't embed the commit yet, and packaging/env.sh no longer
points to a build_info.rs that doesn't exist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 09:46:23 +07:00
bflatasticandClaude Opus 5.5 bddc800c87 Docs: say the craftrules standards are internal, and that the rules here are the binding ones (#98)
AGENTS.md, CLAUDE.md and crates/fonts/README.md linked to storytold/craftrules, which outside contributors can't open. The links stay for team members, now labelled internal, and AGENTS.md says up front that every rule a contributor here must follow is stated in AGENTS.md and CLAUDE.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 09:44:11 +07:00
bflatasticandClaude Opus 5.5 5e74f95017 Docs: the automation README describes the tools and MCP resources that ship (#97)
Its Status line said 38 tools and listed form authoring, redaction tools and MCP page-image resources as planned; 123 tools and all three ship. It now names the areas the tools cover and points to printcraft-cli tools for the current list instead of a count that goes stale, and the MCP section lists the resources/* methods and resource templates. ROADMAP's M13 row said 91 tools.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 09:43:26 +07:00
bflatasticandClaude Opus 5.5 cdb3f3d106 Forms: check box and radio button styles (#94)
Field Properties > Options > Check Box Style (Button Style for radio
buttons): Check, Circle, Cross, Diamond, Square or Star, as Acrobat
offers. The choice is stored in each widget's /MK /CA with Acrobat's
ZapfDingbats codes (4 l 8 u n H), so other viewers draw the same mark,
and PrintCraft draws it as paths, needing no symbol font. Styles set
by other apps are read back too; the defaults stay a check for check
boxes and a circle for radio buttons.

- forms: CheckStyle, check_style(), FieldProps::check_style; set_props
  writes /MK /CA (resolving an indirect /MK so its colours survive) and
  redraws; text and choice fields refuse a style.
- engine: Document::field_check_style.
- automation: form_set_props takes check_style, form_fields reports it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 09:42:39 +07:00
bflatasticandClaude Opus 5.5 e4191e0d2c Prepare a form: Detect form fields in the panel, delete several fields at once (#93, #95)
- #93: field detection already ran when Prepare a form starts on a
  document without fields, and as the form.detect command, but nothing in
  the tool panel offered it. Prepare a form > Fields now lists Detect
  form fields; on a form that already has fields it only adds new ones.
- #95: with several fields selected (Shift/Cmd-click), Delete and the
  context menu's Delete removed only the right-clicked one. They now
  remove every selected field as one undoable step ("Delete 3 fields").
  One prepare::delete_selected serves both.

Editing the shared properties of several fields at once is still to do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 09:31:35 +07:00
BFlat 55c581760a Merge pull request #88 from storytold/docs/roadmap-session-15
ROADMAP: session 15 log
2026-10-07 02:30:45 +07:00
bflatasticandClaude Opus 5.5 de3ab3e087 ROADMAP: session 15 log
The session's log line: issues #70, #72, #73, #74 and #76 fixed, and
#79, #80 and #81 noted as open. The parity tables are refreshed from
`cargo xtask parity` (805 features, 50.2% shipped, 53.7% weighted),
with the by-area shares and the 0.2.1 release. Docs only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 02:18:04 +07:00
BFlat 376ffcd8e8 Merge pull request #86 from storytold/fix/74-add-text-keeps-boxes
Add text: clicking elsewhere keeps the text and starts a new box (#74)
2026-10-07 02:17:26 +07:00
BFlat f3e22b738d Merge pull request #82 from storytold/fix/73-macos-open-from-finder
macOS: open PDFs from Finder, Open With and the Dock (#73)
2026-10-07 02:17:21 +07:00
BFlat edaa4445e4 Merge pull request #84 from storytold/fix/76-windows-text
UI: sharper, higher-contrast text, most visible on Windows (#76)
2026-10-07 02:07:59 +07:00
bflatasticandClaude Opus 5.5 5b44162871 Add text: clicking elsewhere keeps the text and starts a new box (#74)
With the Text tool, a click on the page replaced the box being typed
with a new empty one, throwing the text away. A real mouse click
usually arrives as press and release in one frame, so the page saw the
click before the editor saw its text box lose focus.

- The page click now finishes the open box first (one finish() shared
  with the editor), then starts a new box where you clicked. Both input
  timings end the same way, so the tool no longer drops back to Select
  after one box.
- The box being typed gets Done (keep it, back to Select) and Discard
  (as Escape) buttons beside it, as the reporter suggested. Pressing
  them doesn't count as a click away.
- The box just kept is not selected while the next one is typed, so the
  Format panel styles the new text.
- content_ui::page_input returns a bool; its Outcome::done was never
  set.

Reproduced and checked in the real app on Windows with OS mouse and
keyboard input (SendInput): before, the first box vanished; now both
boxes stay and a third opens.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 02:05:02 +07:00
BFlat b26010858d Merge pull request #78 from storytold/fix/72-word-export
Export to Word: files open in Word again (#72)
2026-10-07 01:50:55 +07:00
bflatasticandClaude Opus 5.5 71fcf5be8e UI: sharper, higher-contrast text, most visible on Windows (#76)
- Glyphs are rendered on whole pixels: egui's sub-pixel binning draws
  each glyph at quarter-pixel offsets, which it notes makes text
  blurrier, most visibly at the 100-150 % scaling common on Windows.
- Light theme: a mild gamma (0.75) on glyph coverage darkens the
  antialiased edges of dark text, which egui renders linearly (thin and
  grey next to the system's text). The dark theme keeps egui's curve.
- The faintest text colour met only 3.3:1 (light) and 3.9:1 (dark).
  It is now #6B6B73 / #97979E, so every text colour meets WCAG AA
  (4.5:1) on every surface in both themes, enforced by a test.

Compared in headless renders at 1x and 2x: crisper stems at 1x, little
change at 2x.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 01:50:38 +07:00
BFlat 90c56e9ff0 Merge pull request #77 from storytold/fix/70-two-page-next
View: next page in two-page view moves a whole spread (#70)
2026-10-07 01:40:19 +07:00
bflatasticandClaude Opus 5.5 a6af3bc6c1 Packaging: describe PrintCraft, not the image editor it was copied from
The Linux package description, AppStream metadata (categories,
keywords, a screenshot that doesn't exist), the MSI's comment and the
web embedding example still described PhotoCraft. They now describe a
PDF workbench, AppStream lists application/pdf, and the screenshot is
one of ours.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 01:39:33 +07:00
bflatasticandClaude Opus 5.5 f50c5a4e88 macOS: open PDFs from Finder, Open With and the Dock (#73)
Finder hands files to an app as an Apple event, not on the command
line. winit doesn't handle it, so AppKit answered "PrintCraft cannot
open files in the PDF document format". The bundle also declared no PDF
document type: its Info.plist still carried the sibling image editor's
types.

- Info.plist declares PDF (by extension and MIME type) as a document
  type, role Editor, rank Alternate: offered under Open With and
  settable as the default, without taking over on install.
- apps/printcraft registers open-documents and quit Apple event
  handlers through fmv-macos-events (=0.1.0, the audited safe wrapper
  PhotoCraft uses, since the Objective-C interop needs unsafe), before
  the launch event arrives.
- printcraft-ui-egui gains OsEvent and PrintCraftApp::os_events, polled
  every frame: Open opens each file as File > Open does; Quit closes the
  window like its close button, so unsaved changes are asked about.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 01:39:33 +07:00
bflatasticandClaude Opus 5.5 8b25d88450 Export to Word: files open in Word again (#72)
Text extracted from a PDF can hold C0 control characters (fonts without
a usable /ToUnicode), which XML forbids, and Word refuses the whole
document over one ("Word experienced an error trying to open the
file"). The Word, HTML and RTF writers now drop the characters XML
forbids. Also:
- the page size stays within Word's 22 in (a till receipt is taller,
  and Word read it as a negative height), and margins shrink on small
  pages so text keeps room; images fit the real text width;
- a non-finite font size falls back to 12 pt;
- zip entries get a valid DOS date (1980-01-01) instead of zero.

Checked by opening the exports in Microsoft Word: control characters,
U+FFFE/U+FFFF, a 33 in receipt with a 40-row table, narrow, tiny and
wide pages all open.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 01:31:37 +07:00
bflatasticandClaude Opus 5.5 c341a5c929 View: next page in two-page view moves a whole spread (#70)
Next page went to the right-hand page of the spread already on screen,
so the view didn't scroll and the current page snapped back to the
left-hand one. Next and previous page (Ctrl/Cmd+arrows, the rail's
buttons and the NextPage/PrevPage actions) now step a spread at a time
in two-page view, with or without a cover page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 01:21:42 +07:00