Commit Graph
4047 Commits
Author SHA1 Message Date
texjer 7dbfbb9e68 Merge branch 'feat/place-cursor-queue' into feat/drop-loads-place-cursor 2026-11-04 19:56:44 -05:00
texjer 391e0881b4 Place: the grid tool sends the gutter it previews
The preview's 6 pt duplicated place.grid's default, so changing one would leave the preview out of step with what lands. The tool now sends its gutter with the command.
2026-11-04 19:56:42 -05:00
texjer 267917b8de Place: drops that arrive before one UI pass stay separate
All pending drops went into one batch, so two single images counted as several: both queued and neither filled the frame it was dropped on. Files of one raw input now share a batch, and each batch is opened on its own.
2026-11-04 19:56:22 -05:00
texjer b458bec4c5 Merge branch 'feat/place-cursor-queue' into feat/drop-loads-place-cursor
# Conflicts:
#	ROADMAP.md
#	crates/ui-egui/src/app/files.rs
2026-11-04 19:56:22 -05:00
texjer 92d3e74a39 Place: a multi-page PDF in a batch keeps the images loaded before it
Confirming the PDF's Import Options placed it without append, so in a batch such as [a.png, b.png, multi.pdf] it replaced the images already in the cursor. The dialog now carries append, on both the native and the delivered-file paths. A single multi-page PDF still replaces what the cursor holds.
2026-11-04 19:36:38 -05:00
texjer d721ef9f62 Place: a grid previews the cells it places on a rotated spread
The preview divided the dragged rectangle on the canvas and the release divided it on the spread, so on a rotated spread two columns previewed across the canvas and landed down it. The preview now takes the release's cells and shows each where it lands on the canvas.
2026-11-04 19:36:38 -05:00
texjer e4f82e243e Place: switching, opening or closing a document leaves the place cursor's tool
Review fix for #2309: set_active, add_document and close_document emptied the place cursor but
kept the placeGun tool, so the next canvas click failed with 'nothing loaded in the place
cursor'. One helper, Session::unload_place_cursor, empties the cursor and its queue and goes back
to the Selection tool when the place cursor's tool is active; validate_place_cursor uses it too.
Test: changing_documents_unloads_the_place_cursor_and_its_tool.
2026-11-04 19:03:59 -05:00
texjer ad611c1b6f Merge remote-tracking branch 'upstream/main' into feat/place-cursor-queue
# Conflicts:
#	ROADMAP.md
2026-11-04 19:03:47 -05:00
Mex b98687c3e1 M5: keep out-and-back cubic segments in striped strokes (#2323)
* M5: preserve out-and-back cubics in striped strokes

A cubic can travel out and back when its endpoints and first control point coincide. Include the second control point in the zero-length guard and cover its offset extent and both stripe bands.

* M5: record striped cubic regression coverage

Record the scoped cubic stroke correction without changing readiness estimates or other progress entries.
2026-11-04 15:36:05 -05:00
texjer 93f18aa086 Merge branch 'feat/finder-drop-pointer' into feat/drop-loads-place-cursor
# Conflicts:
#	crates/ui-egui/src/app/input.rs
2026-11-04 13:20:02 -05:00
texjer f02e13318b Place: a drop without pointer events keeps the system pointer of its own input
Review fixes for #2304:
- Each pointer-less drop asks the system where the pointer is when its raw input arrives, and
  converts it with that input's window rect and the UI scale, instead of one sample taken at the
  later UI pass for the whole batch. Drops with pointer events keep their own pointer, and the
  system is still only asked when a drop brought none.
- system_pointer is cfg'd off on wasm with its only caller; Services::pointer's docs say a drop
  without a pointer lands in the middle of the view.
- pointer.rs: the AppKit flip is a pure function with a test, documenting why it flips against
  the main display only (winit's window positions use the same origin).
- Test: a filled compound path takes a dropped image through its ring, not its hole.
2026-11-04 12:06:17 -05:00
aiongg fb630909c4 Merge pull request #2304 from texjer/feat/finder-drop-pointer
Place: a file dragged in from the Finder fills the frame it was dropped on
2026-11-04 11:19:45 -05:00
texjer 0ea2a72a09 Place: switching, opening or closing a document leaves the place cursor's tool
Review fix for #2309: set_active, add_document and close_document emptied the place cursor but
kept the placeGun tool, so the next canvas click failed with 'nothing loaded in the place
cursor'. One helper, Session::unload_place_cursor, empties the cursor and its queue and goes back
to the Selection tool when the place cursor's tool is active; validate_place_cursor uses it too.
Test: changing_documents_unloads_the_place_cursor_and_its_tool.
2026-11-04 11:05:45 -05:00
aiongg 8b1e20fd8f Apply review fixes
- crates/ui-egui/src/app/input.rs
- crates/ui-egui/src/services.rs
2026-11-04 15:40:44 +00:00
Tex Jernigan 632df6178a Place: a graphic dropped on a frame holding a nested image replaces it (#2303)
Split out of #2073. A frame holding its image as an item pasted into it (how a
document from InDesign keeps a photo) takes a dropped graphic as a graphic
frame does: `canvas::drop_frame` uses `Item::takes_graphic` (#2226).
2026-11-04 10:40:17 -05:00
Hamza Naveed b48a9507b1 Swatches: renaming a swatch renames it on the images it colours (#2306) (#2311)
rename_swatch_refs visited every page item's fill and stroke but not the swatch applied to a placed greyscale or bitmap image (Graphic::fill), framed or in a table cell. Those images kept the old name, found no swatch, and drew in black.
2026-11-04 10:39:14 -05:00
texjer cb97fcb0bd Place: a grid drag too small for its cells previews and places one frame
The place cursor's grid preview fell back to the raw drag rectangle when the
cells had no positive size, while the release still sent `place.grid`, which
rejected the area. Both now use the same cell calculation (`grid_cells`), and
a grid with no room for its cells shows and places the single proportional
frame of an ordinary drag.
2026-11-04 10:31:22 -05:00
MarekSpodBiedry df9f0656ca Master pages: skip hidden and locked layers when picking items (#2221) (#2292) 2026-11-04 07:09:20 -05:00
aiongg dffef02773 Merge pull request #1755 from Hamza0101/fix/korean-sans-fallback
Fonts: a missing Korean sans face falls back to a sans one (#1692)
2026-11-04 07:07:31 -05:00
MarekSpodBiedry 7215a559e5 Hyphenation: enable the Danish hypher patterns (#2282) (#2293) 2026-11-04 07:01:31 -05:00
Hamza 39ea3513a4 Korean fallback: spell 바탕 right, and choose the label's fallback style once 2026-11-04 12:55:57 +05:00
Dylan M. Taylor a4017a3cda Fonts: bound named instances per file, index axis settings in style strings (#2215)
* fix(fonts): bound named-instance listing and index variable-style settings

* address review: bound inspected named-instance records file-wide
2026-11-03 23:26:17 -05:00
aiongg c3ea317837 Merge pull request #2250 2026-11-04 04:14:12 +00:00
aiongg b1f67ee4e4 Merge pull request #2211 2026-11-04 04:14:12 +00:00
aiongg 6c2ab93b03 Merge pull request #2231 2026-11-04 04:14:12 +00:00
Dylan M. Taylor b46ee47982 pdf: placements of one media asset share one embedded file (#2266) 2026-11-03 23:07:05 -05:00
texjer a10e288a58 Place: dropped images load the place cursor, in the order they came
Split out of #2073. Port of #1307's drops and #1666.

- Several images dropped together load the place cursor in the order they
  came, each run of them where it comes among the other files, after the
  images it already holds; click to place them one by one.
- One image dropped off a frame that takes it loads the place cursor instead
  of being placed at once; on such a frame it still fills it.
- A drop is handled in its order, each file at its own pointer, and a dialog
  (a multi-page PDF's Import Options, an alert) cancels the rest.
- On the web, files dropped together are read as one batch (none if one
  can't be read), and a single dropped image loads the place cursor.
2026-11-03 23:05:47 -05:00
aiongg a2cc32a8d1 Apply review fixes
- crates/epub/src/tests.rs
2026-11-04 03:50:09 +00:00
aiongg 3326d919bb Apply review fixes
- crates/compose/src/tests.rs
2026-11-04 03:49:15 +00:00
Dylan M. Taylor e2c2266087 warichu: split long runs in one pass instead of trying every length (#2184)
* warichu: split long runs in one pass instead of trying every length

The exact split tries every line length for every start, so its work grew with
the square of the run's length, and a document can set warichu on a run of any
length. Runs longer than 512 glyphs are now split where the running advance
reaches each line's share, keeping the break minimums. The glyphs drawn with the
run find their anchor by binary search instead of a scan per glyph.

* address review: warichu split picks the break closest to the target
2026-11-03 22:32:31 -05:00
Dylan M. Taylor 7faf7029fb fix(pdf): indexed membership in page ranges, optional content and PDF/X scans (#2207) 2026-11-03 22:32:10 -05:00
Dylan M. Taylor 36da81e03b fix(textimport): bound xlsx data sources and make docx and hyphenation parsing linear (#2213) 2026-11-03 22:23:32 -05:00
Dylan M. Taylor 64c956f09e fix(render): index line style groups, stop futile glyph-cache eviction, read PDF page sizes once (#2217) 2026-11-03 22:23:11 -05:00
Dylan M. Taylor c4ed9b2210 fix: write screenshots, signing certificates and benchmark files in private temp folders (#2219) 2026-11-03 22:16:28 -05:00
texjer 4d34f83926 Merge branch 'feat/finder-drop-pointer' into feat/drop-loads-place-cursor
# Conflicts:
#	ROADMAP.md
2026-11-03 21:50:19 -05:00
texjer 8815ef7350 Place: a file dragged in from the Finder fills the frame it was dropped on
Split out of #2073. winit sends no pointer events during a drag from another
application on macOS, so a Finder drop had no pointer and never found the frame
under it. The host now gives the pointer's place on the screen
(`Services::pointer`, `PointerFn`: the system's points before the UI scale,
from `NSEvent.mouseLocation`), and `take_pending_drops` uses it for the files
that came without a pointer, divided by egui's zoom factor and made relative
to the window.
2026-11-03 21:50:08 -05:00
texjer d890289a92 Place: several images load the place cursor, with a thumbnail, count and grid
Split out of #2073. Port of #1307, #1392 (grid) and #1432 (thumbnail and count).

- File › Place takes several files; images load the place cursor in the
  order chosen (`place.load` `files`, `append`), after the ones it holds.
  A multi-page PDF or an alert stops the batch, and a file that can't be
  placed returns its error to `app.placeDialog`.
- Each click places the next image; arrow keys while dragging lay out a
  grid (`place.grid`) and are handled even at a limit; Escape unloads the
  rest (`place.cancel`). Undo of a loaded image's asset cancels the queue.
- The cursor shows how many images are loaded.
- On the web, Place picks several files and the inbox loads consecutive
  images for the same document as one batch.
2026-11-03 21:43:44 -05:00
Dylan M. Taylor cf0c6971d6 doc: repair parent based_on links in one graph walk (#2244) 2026-11-03 21:29:58 -05:00
Dylan M. Taylorandaiongg 9437553fd4 Images: one budget for the nested SVG data images of a parse (#2254)
* images: one nested-SVG byte budget per parse

* Apply review fixes

- crates/images/src/lib.rs

---------

Co-authored-by: aiongg <67543387+aiongg@users.noreply.github.com>
2026-11-03 21:29:36 -05:00
Dylan M. Taylorandaiongg 1a059304f9 PPTX export: table border and paragraph lookups by index, direct charmap lookups (#2256)
* pptx: table border lookups by position, paragraph lines grouped once

* pptx: look a character up in the face's map, don't expand it

* Apply review fixes

- crates/pptx/src/table.rs

---------

Co-authored-by: aiongg <67543387+aiongg@users.noreply.github.com>
2026-11-03 21:29:14 -05:00
Dylan M. Taylorandaiongg 1d752d2f1f Text import: cap style names read from Tagged Text and DOCX files (#2258)
* textimport: cap style names read from files

* Apply review fixes

- crates/textimport/src/tagged.rs

---------

Co-authored-by: aiongg <67543387+aiongg@users.noreply.github.com>
2026-11-03 21:28:52 -05:00
aiongg b18ed2e7ad Merge pull request #1294 from KnottyDyes/squad/place-never-into-line-v2
Place: implicit image placement preserves lines and open paths
2026-11-03 21:17:15 -05:00
KnottyDyesandClaude Opus 5.5 5e8571d11e Geom: test that stray end handles leave a line without area
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 18:58:37 -07:00
Dylan M. Taylor ae93ea5115 table: refuse to split more than 1024 merged-cell owners at once (#2273) 2026-11-03 20:55:20 -05:00
aiongg c05afc6b44 Apply review fixes
- crates/geom/src/path.rs
2026-11-04 01:54:40 +00:00
KnottyDyesandClaude Opus 5.5 b032aa26e8 PDF: test that link stand-ins add only the link to tagged PDF
The nonprinting stand-in for a rasterized linked frame keeps the frame's
story, alt text and effects for link bounds and text composition. A test
now checks that a tagged PDF of a linked frame differs from the same frame
without the link only by the link annotation: no extra structure elements
or alt text. Note why the stand-in keeps the frame's ItemId.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 18:20:58 -07:00
KnottyDyesandClaude Opus 5.5 5cd8d99db7 Package: report PDF warnings and keep hyperlinks on rasterized frames
Include the PDF export warnings in the package result and report. Cover
shadow and feather output in packaged PDFs with a synthetic regression test.

Preserve frame and text-range hyperlinks on rasterized frames, including
inside groups, at their original source bounds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 18:20:58 -07:00
KnottyDyesandClaude Opus 5.5 5bd8ada171 Place: lines don't become frames when content is placed
Placing an image or media with no placement parameters used the selected
item as the frame, and so did a click of the loaded place cursor. On a
line that made a zero-height frame that kept its stroke. All three now
skip items that enclose no area (PathData::encloses_area): lines and
paths whose points all lie on one line get a new frame instead. Frames,
and open paths that enclose an area, take the content as before.

An explicit frame, x, y, spread or width behave as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 17:52:04 -07:00
Dylan M. Taylor 4071bd40e6 address review: skip a graphic whose PDF crop is too large to trace 2026-11-04 00:39:05 +00:00
con3codeandClaude Opus 5.5 3894566812 Mojikumi: test consecutive punctuation under the one-em line-end set too
The close-up test checked the half-em line-end set only; the other Japanese
base set closes up the same pairs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 09:01:20 +09:00