Commit Graph
284 Commits
Author SHA1 Message Date
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 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 ad611c1b6f Merge remote-tracking branch 'upstream/main' into feat/place-cursor-queue
# Conflicts:
#	ROADMAP.md
2026-11-04 19:03:47 -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
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
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
Tex Jernigan e1910529a7 Frames with a nested image: hit inside the frame, take a placed graphic; replacing keeps the crop; open on a usable layer (#2226)
* Frames holding pasted-in images are hit inside the frame, take a placed graphic; documents open on a usable layer

A frame with items pasted into it (how a document from InDesign keeps a cropped photo) was hit
through its children like a group, so the whole uncropped image counted: a click on the empty
page beside such a photo selected it, and nothing could be deselected there. It is now hit by
its own area, as it is drawn clipped. Such a frame holding only graphics also takes a placed or
dropped graphic (Item::takes_graphic), which fills it as an empty or graphic frame is filled.

A document opened with new objects going to its top layer even when that layer was hidden and
locked (a dieline), so a placed graphic showed as an empty frame outline. It now opens on the
topmost layer that is shown and unlocked (Document::working_layer).

* Place: a graphic replacing the one a frame shows keeps the frame's crop and zoom

Placing or dropping into a frame that shows a graphic (in it, or as the one graphic pasted into
it) filled the frame afresh, so the crop and zoom chosen for the old picture were lost. The new
graphic now covers the old one's area, centred on it: an edited copy of the same picture lands
exactly where the old one was.

* Move the replace-keeps-crop and open-on-a-usable-layer changes to their own PRs

Review asked for them to be checked against reference app behaviour on their own. This PR keeps
the frame hit area and Item::takes_graphic. Reverts 8ea0bc16 and drops Document::working_layer.

* Move Document::working_layer and its test to #2267
2026-11-03 17:21:35 -05:00
aiongg 49e934d8ba Merge main into snap-page-centre 2026-11-03 19:11:20 +00:00
Brandon Thomas ab96d42696 Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts:
#	docs/ui-parity.md
2026-11-02 23:24:47 -05:00
Trevor BrownandClaude Fable 5.1 5b48a6fcf7 M4: the Pen's drag preview on a continued end point runs from the anchor it is joined to (#1438)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-02 04:04:42 -05:00
Trevor BrownandClaude Fable 5.1 93999750aa M4: the Pen previews the segment a dragged smooth point shapes and curves the rubber band after one (#1438)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-02 03:19:46 -05:00
makesomethingshit 5c364f9897 #1620: Port parent resizing to current layout modules 2026-11-01 15:18:55 +09:00
aiongg f3e0f614fd Integration: #1416 Clear acts on live points only; reset anchor_release on press 2026-10-31 00:13:37 +00:00
aiongg aae929eb97 Merge track 3 2026-10-30 23:56:48 +00:00
aiongg 8d55602ef1 Merge PR #1430: Properties: Anchor Point(s) with Convert Points and Delete Point(s), as in the reference app
crates/tools/src/select.rs: took the PR's later anchor_selection and moved_points use; kept main's content-mode-off corner pull
crates/ui-egui/src/canvas/frames.rs: kept the handle_shown filter from #1657
crates/ui-egui/src/panels/properties.rs: kept main's imports
crates/ui-egui/src/panels/properties/tests.rs: kept both sides' tests
crates/ui-egui/src/i18n/{ar,cs,de,it,ja,ka,pl,pt_br,ru,uk}.rs: union of both sides' keys
2026-10-30 23:15:49 +00:00
aiongg b142604cb3 Merge PR #1392: Place cursor thumbnail and proportional drag 2026-10-30 23:15:22 +00:00
aiongg 9b36f1f139 Merge PR #1657: Direct Selection: handles around the selected anchors only, and no bounding box
crates/tools/src/select.rs: dropped the doubled corner-pull block (the PR's copy of the old code and main's); kept one with main's content-mode fix and the stack's others field
crates/engine/src/tests.rs: kept main's tests and the PR's new test
crates/ui-egui/src/canvas/frames.rs: kept the PR's handle_shown filter
2026-10-30 23:15:07 +00:00
aiongg 3b79317e03 Merge PR #1416: Direct Selection: select anchor points with a marquee across paths and move them together
crates/engine/src/tests.rs: kept main's tests and the PR's new tests
crates/tools/src/tests.rs: kept main's tests and the PR's new tests
2026-10-30 23:14:41 +00:00
aiongg 978effab49 Integration: #902 Direct Selection anchor drags send a spread-space delta 2026-10-30 21:24:27 +00:00
aiongg 55fb94242e Integration: #902 Direct Selection anchor pull selects the frame, not its content 2026-10-30 21:24:27 +00:00
aiongg 09fbe280ff Integration: #1125 Direct Selection on one of several selected frames selects just that frame 2026-10-30 21:24:27 +00:00
aiongg 0a2a2039a5 Merge PR #1674: Tables: Shift+Tab goes back a cell, and Esc toggles between the text and the cell 2026-10-30 19:44:37 +00:00
aiongg bf67b94f4b Merge PR #1407: Type tool: a drag that starts in an empty frame draws a new text frame over it 2026-10-30 19:44:36 +00:00
aiongg 5599783a6c Merge PR #1418: Frame tools: the size readout shows the document units 2026-10-30 19:44:36 +00:00
aiongg 8227f29295 Merge PR #1125: Direct Selection on a selected frame selects its image, so Delete keeps the frame
crates/engine/src/tests.rs: kept both new tests (#902 corner pull, #1125 image delete)
2026-10-30 19:44:33 +00:00
moppeeerandClaude Opus 5.5 785c49a1d4 rustfmt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 15:08:12 +01:00
moppeeerandClaude Opus 5.5 11ef2cc840 rustfmt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 15:01:01 +01:00
moppeeerandClaude Opus 5.5 3b86c0ca06 rustfmt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 14:06:07 +01:00
moppeeerandClaude Opus 5.5 07a4696a9f rustfmt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 13:59:35 +01:00
moppeeerandClaude Opus 5.5 5fc7496629 rustfmt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 13:43:42 +01:00
moppeeerandClaude Opus 5.5 4a71ee5d83 rustfmt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 13:22:55 +01:00
moppeeerandClaude Opus 5.5 fd7d8dfb77 rustfmt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 12:08:10 +01:00
moppeeer 89808ec42f Merge remote-tracking branch 'origin/main' into codex/direct-select-unselected-anchor
# Conflicts:
#	crates/tools/src/select.rs
2026-10-29 11:45:00 +01:00
moppeeer 42a3637bfc Merge remote-tracking branch 'origin/main' into direct-select-delete-image
# Conflicts:
#	crates/tools/src/select.rs
2026-10-29 11:44:41 +01:00
moppeeer 8b7f17e60c Merge remote-tracking branch 'origin/main' into loaded-cursor-thumbnail
# Conflicts:
#	crates/engine/src/cmd/file.rs
#	crates/tools/src/snap.rs
#	crates/ui-egui/src/canvas.rs
2026-10-29 11:43:56 +01:00
moppeeer 740227bd18 Merge remote-tracking branch 'origin/main' into snap-page-centre
# Conflicts:
#	crates/tools/src/snap.rs
2026-10-29 11:43:39 +01:00
moppeeer 00a64e5943 Merge remote-tracking branch 'origin/main' into direct-select-anchor-points
# Conflicts:
#	crates/tools/src/select.rs
#	crates/ui-egui/src/canvas.rs
2026-10-29 11:43:21 +01:00
moppeeer 5a4012bab8 Merge remote-tracking branch 'origin/main' into properties-anchor-points
# Conflicts:
#	crates/tools/src/select.rs
#	crates/ui-egui/src/canvas.rs
#	crates/ui-egui/src/i18n.rs
#	crates/ui-egui/src/panels/properties.rs
#	docs/target-app-parity.md
2026-10-29 11:42:56 +01:00
moppeeer f0b580074d Merge remote-tracking branch 'origin/main' into direct-select-handles
# Conflicts:
#	crates/tools/src/select.rs
#	crates/ui-egui/src/canvas.rs
2026-10-29 11:38:53 +01:00
moppeeer 0d9b7c74ac Merge remote-tracking branch 'origin/main' into table-cell-keys
# Conflicts:
#	crates/engine/src/cmd/table.rs
#	crates/engine/src/cmd/text.rs
2026-10-29 11:38:49 +01:00
Dylan M. Taylor bcb9546f5d Refactor tools for strict Clippy checks 2026-10-28 11:39:26 +00:00
aiongg 6fae1b2e92 refactor(tools): move the tests module of snap.rs to snap/tests.rs 2026-10-26 18:18:13 +00:00
aiongg 073ac98694 Merge upstream main into keymap-adoption; pin craft-libs to main e3b9e239
Main's shortcut dispatch (shortcut_key, used for keys forwarded from floating panel windows)
becomes the keymap's: shortcuts and forwarded_shortcuts both take their presses through the
key dispatcher and run them once the input is released. craft-keymap comes from
storytold/craft-libs, ForeignSet is built through its constructor, and the panel shortcut test
asks the docking layout which panel shows.
2026-10-25 19:36:33 +00:00
skylar taylor-barrick bd4b9dd1d2 egui-037: reconcile shared window integration with main 2026-10-25 18:34:10 +01:00
Brandon Thomas 05a8d6ac02 Merge pull request #1777 from Silvertree2010/fix/h2047-gradient-swatch-feather-tool-dra
Convert gradient tool drag to spread space on rotated spreads
2026-10-25 12:26:00 -04:00
moppeeer 208593af17 Merge remote-tracking branch 'origin/main' into table-cell-keys 2026-10-25 17:13:33 +01:00
moppeeerandClaude Opus 5.5 2e44b19096 Table keys and cell commands: footnote text isn't a table cell
The caret in a footnote has a CellAddr too (FOOTNOTE_TABLE). Shift+Tab
and Esc there now act as outside a table, and table.nextCell,
table.prevCell and table.toggleSelection refuse it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 17:13:33 +01:00
skylartaylor 8a6ed75d41 egui037: reconcile current DesignCraft main and qualify CI 2026-10-25 03:38:13 +01:00
skylartaylor a2db858e7d egui037: Port DesignCraft to egui 0.37
Pin the final egui, winit and shared UI revisions and reconcile current main.
Preserve document-epoch input and screenshot boundaries, host action ordering,
and Windows path regression coverage. Add click/End batch characterization.

Validation: all nine Linux CI stages pass (3230 tests, zero failures); Windows
CI and bounded native editing workflows pass on the same production source.
2026-10-25 00:52:21 +02:00