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.
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.
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.
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.
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.
* 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.
package.sh built its own Arch package with nfpm while the shared release
workflow also built one with makepkg, because has-arch defaults to true. Both
wrote designcraft-<version>-linux-<arch>.pkg.tar.zst, the draft release merges
the release-* artifacts last-writer-wins, and 0.17.0 shipped the nfpm copy,
which declared fewer dependencies than the makepkg template.
Drop arch from the formats this script builds and remove the archlinux section
from nfpm.yaml, so the shared action is the single builder. It names the
package after the .desktop bundle id, declares the same provides/conflicts
against the AUR packages, and adds the optdepends nfpm could not express.
The binaries load their windowing libraries at run time, and xkbcommon's X11
keyboard module is a separate library from the core one. Nothing declared it,
so a package installed on a system without it crashes before opening a window:
thread 'main' panicked at xkbcommon-dl-0.4.2/src/x11.rs:59:28:
Library libxkbcommon-x11.so could not be loaded.
winit's X11 backend cannot fall back, so the dependency is required for deb,
rpm and Arch rather than recommended.
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.
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.
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).
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.
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.
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.
* 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
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.
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.
* 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>