96 Commits
Author SHA1 Message Date
754f4d70e0 Print on Windows in-process, without PowerShell
craft-print's Windows backend ran an embedded PowerShell script for the printer list and every
job. Under App Control for Business or AppLocker script enforcement that script runs in
Constrained Language Mode and every job fails (storytold/pdfcraft#1107). The backend now runs
in this process and starts no program:

- Printers come from EnumPrinters and the default from GetDefaultPrinter; Printer::two_sided
  from each driver's PrintCapabilities. The list is sorted, each name once.
- A job is drawn as vectors by the in-box Windows.Data.Pdf with Direct2D into the XPS print
  API (winprint). Copies, collation, duplex (left out for duplex: None), colour, orientation
  and the driver's own paper option go in a PrintTicket the driver validates; a ticket the
  driver changed (paper, orientation, scaling) is refused before anything is sent. The driver
  paper named like the standard size is preferred (pdfcraft#599).
- A job has one ticket, so one paper shape. A small lenient reader (sheets.rs) reads the
  print-ready PDF's sheets and, when needed, appends an incremental update: /Rotate for sheets
  of the other orientation, and for Scaling::ShrinkToFit a reframe onto the driver's matching
  or default paper (shrunk inside its widest hardware margin, never enlarged, centred).
  Exact size refuses mixed paper sizes and paper the driver lacks.
- command_preview describes the in-process job on Windows ("xps-print", key=value options).
- windows_print.ps1 and the PowerShell helpers are gone. open_printer_preferences (rundll32)
  and the CUPS path are unchanged, as is the public API.

The end-to-end test puts a paused Generic / Text Only printer on LPT1: (no port to remove
afterwards; a paused FILE: queue never takes the job) and checks a mixed-orientation exact job
and a shrink-to-fit job each land as one job with all sheets. The reader is tested on every
platform with classic and compressed cross-references and thousands of truncated and corrupted
files. Windows-only dependencies: winprint =0.2.1 (default features off), winsafe 0.0.29,
roxmltree 0.20, miniz_oxide 0.8.

Ported from PdfCraft's native printing branch (pdfcraft#1132), which carries #599's approach.

Co-authored-by: durtyrobbin <76844303+durtyrobbin@users.noreply.github.com>
Co-authored-by: Dimitar Klaturov <7221384+bulgariamitko@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:03:54 -07:00
skylar taylor-barrick 5d41e29e46 Install software Vulkan for shared UI rendering tests 2026-10-12 02:41:42 +02:00
skylar taylor-barrick 4cae45dbe8 Handle texture deltas in print control tests 2026-10-12 02:37:47 +02:00
skylar taylor-barrick d27646a5f7 Preserve accessible print control labels and narrow layout 2026-10-12 02:34:53 +02:00
skylar taylor-barrick b700ae753f Add shared printer settings and asynchronous job feedback 2026-10-12 02:32:49 +02:00
skylar taylor-barrick 1aa81a773a Expose Windows printer duplex capability (#25)
Expose Windows printer duplex capability
2026-10-11 17:20:15 -06:00
skylar taylor-barrick d991bf6792 Report Windows driver duplex capability to print callers 2026-10-12 01:04:26 +02:00
Mara JohnsonandClaude Opus 5.5 9d6610afd1 craft-quit: document calling on_close_request last in the frame
eframe calls logic before ui, so on_close_request goes after all of the
app's own close handling, at the end of ui when the app handles closes
there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:47:11 -04:00
Mara JohnsonandClaude Opus 5.5 0549f672a3 Add craft-quit: quit macOS apps through NSApplication terminate:
Closing an eframe window on macOS can crash in AppKit's Touch Bar finder
after eframe drops the window while the run loop is still running (#3).
craft-quit routes a window close through -[NSApplication terminate:],
the path Cmd+Q already takes, so the process ends before another display
cycle runs.

- quit(): schedules terminate: on the main queue on macOS, no-op elsewhere
- on_close_request() (feature "egui"): cancels the root window's close
  and quits through the platform path instead

Also commits Cargo.lock and ignores .idea/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:47:11 -04:00
skylar taylor-barrick d26682a58a Launch the print spooler through system PowerShell (#23)
Launch the print spooler through system PowerShell
2026-10-11 14:10:44 -06:00
skylar taylor-barrick 32bcac12db Launch Windows PowerShell from its system path 2026-10-11 22:09:14 +02:00
skylar taylor-barrick 876cba3527 Extract craft-print spooler with native Windows CI (#8)
Share CUPS and Windows PDF submission between PdfCraft and DesignCraft, with explicit scaling and optional duplex overrides. Native Windows CI validates rendering, settings, paused-queue submission and cleanup.
2026-10-11 14:05:47 -06:00
skylar taylor-barrick bef3211753 Target the local computer explicitly when removing the test port 2026-10-11 22:03:37 +02:00
skylar taylor-barrick c7c01aff6d Use a removable local port name for the Windows queue test 2026-10-11 22:00:25 +02:00
skylar taylor-barrick da752825c7 Verify Windows queue cleanup without removing an absent output file 2026-10-11 21:56:44 +02:00
skylar taylor-barrick cf93331318 Use PrinterName to inspect and clean the Windows test queue 2026-10-11 21:53:59 +02:00
skylar taylor-barrick 379d99f817 Compare PowerShell geometry JSON as numeric values 2026-10-11 21:51:02 +02:00
skylar taylor-barrick c30d7d4e13 Avoid interactive FILE port prompts in the Windows queue test 2026-10-11 21:50:09 +02:00
skylar taylor-barrick c15c501567 Require Windows CI to exercise the paused print queue 2026-10-11 21:46:00 +02:00
skylar taylor-barrick b71ad7c8f1 Preserve queue duplex defaults and add explicit shrink-to-fit 2026-10-11 21:44:37 +02:00
skylar taylor-barrick 711b7934c9 Enable cross-platform craft-print CI and manual runs 2026-10-11 19:48:56 +02:00
skylar taylor-barrick c22bb1b0ce Require a paused temporary queue in native Windows print regression 2026-10-11 07:13:40 +02:00
skylar taylor-barrick 9e03fd49cc Bound Windows custom paper dimensions to DEVMODE capacity 2026-10-11 07:11:07 +02:00
skylar taylor-barrick e7e12f7d0f Document cross-platform print CI setup and pending native validation 2026-10-11 07:08:48 +02:00
skylar taylor-barrick eb99775517 Extract craft-print PDF spooler with Windows size and duplex fixes 2026-10-11 07:07:56 +02:00
skylar taylor-barrick af2b0918d2 Merge pull request #6 from skylartaylor/codex/ui-suite-integration-20261010
Add shared egui UI components and transactional panel docking
2026-10-10 18:38:14 -06:00
skylar taylor-barrick 5c874d51ee UI.8: shape dock action labels with logical accessibility 2026-10-10 14:08:31 -06:00
skylar taylor-barrick b1406e3e6a UI.8: cancel renderer-owned resize gestures on workspace replacement 2026-10-10 11:48:50 -06:00
skylar taylor-barrick 34b4adfcfb UI.8: clarify creative docking audit scope 2026-10-10 11:14:22 -06:00
skylar taylor-barrick 615f0638c7 UI.8: classify renderer-owned docking keyboard focus 2026-10-10 11:00:02 -06:00
skylar taylor-barrick 7bb9c865e6 UI.8: cancel floating group gestures on workspace replacement 2026-10-10 10:53:55 -06:00
skylar taylor-barrick f23c9f9c4a UI.8: preserve application docking chrome and group gestures 2026-10-10 10:47:52 -06:00
skylar taylor-barrick fc77f4cc7f UI.7: preserve split resizing beside panel scrollbars 2026-10-10 09:40:28 -06:00
skylar taylor-barrick c4fbe220bc UI.7: resize accordion bodies with pointer and keyboard handles 2026-10-09 22:45:31 -06:00
skylar taylor-barrick efc2fc6702 UI.7: deserialize hidden locations without default panel IDs 2026-10-09 22:35:22 -06:00
skylar taylor-barrick 4558a91694 UI.7: serialize docking actions for app command dispatch 2026-10-09 22:33:22 -06:00
skylar taylor-barrick d9077e2c09 UI.7: add shared panel docking transactions and workspace renderer 2026-10-09 22:29:35 -06:00
skylar taylor-barrick 67ce2e9a82 UI.6: add precise visual regressions and toolbar overflow fitting 2026-10-09 19:15:10 -06:00
skylar taylor-barrick 5de0356334 UI.5: document suite adoption and acceptance limits 2026-10-09 15:16:54 -06:00
skylar taylor-barrick a4ea89de41 UI.5: preserve single-shape button frame rendering 2026-10-09 14:28:46 -06:00
skylar taylor-barrick 9198fae30e UI.4: share widget-state theme application 2026-10-09 13:14:03 -06:00
skylar taylor-barrick dc26460f61 UI.3: share tab strips and bounded pane controls 2026-10-09 13:04:21 -06:00
skylar taylor-barrick 9843bec261 UI.2: share styled icon buttons in craft-ui 2026-10-09 12:00:06 -06:00
skylar taylor-barrick bfbc435364 UI.1: audit suite UI components and extract SVG icon catalogs 2026-10-09 11:03:16 -06:00
Brandon ThomasandClaude Opus 5.5 3a791fdc41 Rust workspace and MIT OR Apache-2.0 license (#1)
License files match the craftrules licensing standard; empty Cargo workspace
(crates/*) with shared package fields and lints.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 12:02:40 -04:00
Brandon Thomas e10a64138a initial commit 2026-10-09 11:58:30 -04:00