Commit Graph
552 Commits
Author SHA1 Message Date
aiongg 988e45b0bb Merge #126: Fix composite font resolution, missing-glyph diagnostics, and document-wide font replacement
Conflict: crates/compose/src/shape.rs: #81 collects paint-only pieces and shapes them later, #126 shapes composite-font note labels inline. A footnote reference in a composite font becomes a Piece with `composite_note`, shaped alone in the piece pass with #126's per-entry label code (from the run's env, as in #126); other references stay ordinary pieces. #126's label fallback in shape_segment passes #81's StyleRuns.
Conflict: crates/fonts/src/fontdb.rs: #126's canonical_family lookup sits at the top of exact_style_traits, so #81's styles/traits_of/linked_style and #247's format-suffix fallback all use it; face() resolves canonical, then canonical without the format suffix, then #126's substitute_family, through #247's find_or_load; has_family is canonical_family as named or without the suffix
Conflict: crates/ui-egui/src/lib.rs: kept #84's system-clipboard copy match and added #126's Find Font on open and _fonts reset after it
Conflict: crates/ui-egui/src/dialogs.rs: OK label match has #146's Save and #126's Replace All; #80's alert-only OK kept, #126's Done label for findFont; find_font keeps #143's font_combo with #126's FALLBACK_FAMILY default
Conflict: crates/compose/src/tests.rs, crates/idml/src/tests.rs: tests only; kept both
Conflict: ROADMAP.md: kept both entries
2026-10-09 22:49:44 +00:00
aiongg 01799b4927 Merge #124: IDML: preserve anchored text frames and footnote artwork
Conflict: crates/compose/src/shape.rs: inline object on the baseline: #124's rule (its box alone sets the extents, not max with the font's) applied to every metric #83 tracks (ascent, typo_ascent, cap, xh); the above-line arm keeps #83's four fields
Conflict: crates/compose/src/tests.rs: tests only; kept both
Conflict: crates/engine/src/tests.rs: tests only; kept both
Conflict: crates/idml/src/tests.rs: tests only; kept both
2026-10-09 22:46:08 +00:00
aiongg 83e1b768e6 Merge #247: IDML: layers import and export in stacking order; font names with a format suffix
Conflict: crates/fonts/src/fontdb.rs: kept #81's typo_ascent/plausible and #247's without_format_suffix; the format-suffix fallback goes inside #81's style_traits() through exact_style_traits() (same as wip 57ebfb2)
Conflict: crates/idml/src/tests.rs: tests only; kept #83's drop-cap and object-style tests and #247's layer-order test
2026-10-09 22:44:34 +00:00
aiongg d268d998a9 Merge #230: Preserve text decoration color resets, geometry and paint order
Conflict: crates/idml/src/import.rs: kept #230's Underline/StrikeThru colour line (Text Color resets) and #83's tint() helper
Conflict: ROADMAP.md: kept the chain's Text engine line and added #230's FID2 line
2026-10-09 22:43:44 +00:00
aiongg 277c442814 Merge #96: Compose: an empty paragraph takes its mark's character format 2026-10-09 22:43:00 +00:00
aiongg fa8492232e Merge #106: Compose: fit horizontal text frames by the last baseline 2026-10-09 22:41:32 +00:00
aiongg caa01d063e Merge #81: Text: kerning survives a colour change (#29) 2026-10-09 22:41:29 +00:00
aiongg 71074a987b Merge #84: Text editing, snapping and text threading (#23)
Conflict: crates/ui-egui/src/control.rs: tests only; kept #118's automation_contract_tests module and #84's tests module
Conflict: crates/ui-egui/src/lib.rs: kept #119's ImportedFile Inbox type and #84's ClipboardFn
Conflict: crates/ui-egui/src/menus.rs: tests only; kept #239's two Quick Apply tests and #84's copy/paste test
2026-10-09 22:41:29 +00:00
aiongg 4b24103b24 Merge #83: Layout: first baselines, Jump Object wrap, drop caps, IDML defaults 2026-10-09 22:40:47 +00:00
aiongg e5e48d2ed1 Merge #119: Web Place/Open/swatches remember the document and purpose they started from; multipage PDF Place shows the page dialog in the browser
Conflict: crates/ui-egui/src/lib.rs: kept #119's drain_inbox, import_file and ImportRequest (and its Services.inbox doc); import_file's and confirm_pdf_import's file.place/file.openBytes go through #80's open_file, so a failure shows the alert; import_file uses #80's opens_as_document for layout files
Conflict: crates/ui-egui/src/dialogs.rs: kept #119's pdfImport arm (async confirm, target activation); its native file.place goes through #80's open_file
2026-10-09 22:38:07 +00:00
aiongg 664408e9ac Merge #80: Alert dialog when Open/Place/drop/CLI/app.open fails; one opens_as_document rule for drops
Conflict: crates/ui-egui/src/dialogs.rs: kept both: #80's max-width match gains #146's closeDocument (380), and #146's closeDocument confirm arm stays before #80's importOptions through open_file
2026-10-09 22:36:43 +00:00
aiongg 09284f721c Merge #239: A shortcut that opens Quick Apply consumes its key; Quick Apply rows are left-aligned 2026-10-09 22:36:25 +00:00
aiongg 97e0109ca6 Merge #199: Swatch menus: the whole row (chip included) is clickable; the Contextual Task Bar's fill and stroke menus show chips
Conflict: crates/ui-egui/src/panels/properties.rs: tests only; joined #145's and #199's tests into one mod tests
2026-10-09 22:36:23 +00:00
aiongg d78b562fab Merge #145: Right-click a ruler to pick its units; the vertical ruler uses the vertical units; Language in Properties › Character 2026-10-09 22:36:01 +00:00
aiongg f4f0896f85 Merge #144: Character Style Options dialog; style.character.edit renames everywhere, validates Based On, null unsets; New Character Style opens the dialog
Conflict: crates/ui-egui/src/dialogs.rs: took #144's structure (shared basic_character_formats and character_color sections); paragraph_style_options reads a clone of the document as #143 does, so the font menu can borrow the app; basic_character_formats takes &mut DesignApp and uses #143's font_combo (font_menu_rows is gone) with a × button that clears a style's family
2026-10-09 22:35:29 +00:00
aiongg 97edaf461a Merge #143: One searchable font menu for every font field; hidden .Name fonts left out; Contextual Task Bar draggable, with Pin and Reset
Conflict: crates/ui-egui/src/lib.rs: one test_window module with #112's wheel and panel_rect and #143's click_at
2026-10-09 22:34:30 +00:00
aiongg e9fa6a72e3 Merge #111: macOS menu Select All/Copy/Cut/Paste/Undo/Redo go to the focused text field 2026-10-09 22:34:17 +00:00
aiongg e80e4a656a Merge #146: File › Close, ⌘W and the tab × ask Save / Don't Save / Cancel for unsaved documents
Conflict: crates/ui-egui/src/lib.rs: kept both sides' tests in mod tests (#142/#138 and #146)
2026-10-09 22:33:55 +00:00
aiongg 9ca7d3f663 Merge #112: Tools panel uses two columns or scrolls when short; Control bar and app bar scroll sideways; tool button labels
Conflict: crates/ui-egui/src/chrome.rs: kept #112's horizontal ScrollArea in control_bar and put #142's horizontal_top inside it
2026-10-09 22:32:57 +00:00
aiongg 7ff03ade34 Merge #142: Control bar row is horizontal_top, so the second row of two-row groups shows 2026-10-09 22:32:43 +00:00
aiongg 3751d0346c UI: Quick Apply runs its first entry only on a fresh Return
Pressing Cmd+Return again while Quick Apply is open, or holding it until
it repeats, reached the palette as Enter and ran the first entry. The
palette now counts only a Return press that isn't a repeat and has no
Cmd.
2026-10-09 22:32:13 +00:00
aiongg c18912db69 Merge #128: PDF/A keeps placed images; right-to-left tables and columns
Conflict: crates/pdf/src/export.rs: took #223's side (RasterMode with #147's decode check) and dropped #128's Exporter interpolate field; #128's RTL story/table work and its PDF/A test are kept
2026-10-09 22:16:55 +00:00
aiongg 8b5e1a909d Merge #147: PDF: a damaged PNG, GIF or WebP is skipped, not fatal
Conflict: crates/pdf/src/export.rs: kept #223's lossless() (RasterMode, sRGB tagging) with #147's full-decode check at its top; the fallback reuses the decoded raster
2026-10-09 22:16:33 +00:00
aiongg 7b813d70ad Merge #223: PDF/X-4: RGB images carry sRGB, no image interpolation, pdf:Trapped in XMP 2026-10-09 22:16:16 +00:00
aiongg ff38aede13 Merge #127: CLI: export options after the last export are an error; MCP and README docs match the code 2026-10-09 22:16:13 +00:00
aiongg 7a0407f8a7 Merge #118: Honor MCP typing, story, and page contracts 2026-10-09 22:16:13 +00:00
aiongg 8cd7bdc88b Merge #117: Fix browser printing, startup flags, and document MIME 2026-10-09 22:16:13 +00:00
aiongg e46e173d90 Merge #120: Preserve typed values in generic command dialogs 2026-10-09 22:16:13 +00:00
aiongg 800b2332f6 Merge #139: Docs, About: the Illustrator-class sibling is VectorCraft (#59) 2026-10-09 22:16:13 +00:00
aiongg 40a8ba3c53 Merge #138: Web: AltGr and other named keys no longer type their names (#134) 2026-10-09 22:16:13 +00:00
aiongg 8300519bd5 Merge #249: Make menu entries selectable across the full row 2026-10-09 22:16:13 +00:00
aiongg 9b3b085770 Merge #248: Add A6 sheet preset to the welcome page 2026-10-09 22:16:13 +00:00
aiongg 8fe589586b Merge #224: Distribute selected table rows evenly and keep the edit undoable 2026-10-09 22:16:13 +00:00
aiongg 5729796705 Merge #122: Desktop: write log records to standard error and a rotating log file
Conflict: apps/designcraft/src/main.rs: kept both module declarations (#168's graphics, #122's logging)
2026-10-09 22:16:13 +00:00
aiongg 6e8f33c386 Merge #168: Fix Windows startup crash by defaulting to DirectX 12 2026-10-09 22:15:59 +00:00
aiongg de5d32c90f Merge #244: Rebind embedded image links when opening relocated packages (#235) 2026-10-09 22:15:59 +00:00
aiongg 553d017065 Merge #229: Prevent mixed gradient color spaces from aborting PDF export 2026-10-09 22:15:59 +00:00
aiongg 29e33dde3d Merge #152: Apply contextual escaping to HTML and EPUB exports 2026-10-09 22:15:59 +00:00
aiongg eedbaf6717 Merge #137: Commands: huge row and column counts can't exhaust memory 2026-10-09 22:15:59 +00:00
aiongg 997d18dcac Merge #149: Import: RTF and Tagged Text keep characters past U+FFFF 2026-10-09 22:15:59 +00:00
aiongg 69fc1c381f Merge #116: Images: set SVG text in the shared fonts when the bundled ones lack it 2026-10-09 22:15:59 +00:00
aiongg 13cc11b041 Merge #115: Compose: don't panic when a hyphenated paragraph starts with a no-break letter 2026-10-09 22:15:59 +00:00
aiongg c64e703495 Merge #136: Images: PSD decode passes clippy on Rust 1.98 2026-10-09 22:15:59 +00:00
aiongg ea4740cbc8 Control channel: a failed app.open answers with the error and opens no alert
An alert waits for a click that a control client can't give. app.open
reports the error in its response, as engine.execute does; File › Open,
drops and the command line still show the alert.
2026-10-09 22:13:15 +00:00
moppeeer 218dc42e5d Make menu entries selectable across the full row 2026-10-09 23:33:42 +02:00
moppeeer 84be68d9c2 Add A6 sheet preset to the welcome page 2026-10-09 23:28:49 +02:00
DWAA1660andCodex 658d8e1784 M5: rebind embedded image links when opening relocated packages (#235)
Reuse packaged-link candidates for embedded IDML images and native files.
Resolve missing original paths beside the opened document, retaining the
embedded image bytes and any original link that still exists. Bound path
lookup allocations and cover actual package relocation through commands.

Make existing data-merge test path assertions portable to Windows.

Co-authored-by: Codex <noreply@openai.com>
2026-10-09 15:07:20 -06:00
aiongg fd825af133 Copy and paste keys: copied objects paste with Ctrl+V on Linux and Windows
Copying or cutting objects without a native menu bar puts plain text on the
system clipboard (the copied text frames' stories, or U+FFFC), so the paste
key produces a paste event. Pasting into text ignores that placeholder and
pastes the copied objects as before.
2026-10-09 21:03:04 +00:00
aiongg 40eaaea9db Fonts: a family named with a format suffix such as (OTF) resolves to the installed family 2026-10-09 20:49:09 +00:00
aiongg 699d89c0ce IDML: layers import and export in stacking order 2026-10-09 20:44:57 +00:00