Commit Graph
282 Commits
Author SHA1 Message Date
andeecollard 7074dc8a85 M6: preserve per-placement graphic layer options 2026-10-24 13:22:08 +01:00
moppeeer 5ea8bef42d Merge remote-tracking branch 'origin/main' into codex/direct-select-unselected-anchor
# Conflicts:
#	ROADMAP.md
2026-10-24 14:19:49 +02:00
moppeeer 2a972a01c1 Merge remote-tracking branch 'origin/main' into direct-select-delete-image
# Conflicts:
#	ROADMAP.md
2026-10-24 14:19:46 +02:00
moppeeer f5788a27a1 Merge remote-tracking branch 'origin/main' into loaded-cursor-thumbnail
# Conflicts:
#	ROADMAP.md
2026-10-24 14:19:34 +02:00
moppeeer 6ac4a609fb Merge remote-tracking branch 'origin/main' into snap-page-centre
# Conflicts:
#	ROADMAP.md
2026-10-24 14:19:27 +02:00
moppeeer 2a748ed828 Merge remote-tracking branch 'origin/main' into type-drag-new-frame
# Conflicts:
#	ROADMAP.md
2026-10-24 14:19:21 +02:00
moppeeer a2ed2364f6 Merge remote-tracking branch 'origin/main' into direct-select-anchor-points
# Conflicts:
#	ROADMAP.md
2026-10-24 14:19:13 +02:00
moppeeer f435140443 Merge remote-tracking branch 'origin/main' into frame-readout-document-units
# Conflicts:
#	ROADMAP.md
2026-10-24 14:19:11 +02:00
moppeeer 49a5971175 Merge remote-tracking branch 'origin/main' into properties-anchor-points
# Conflicts:
#	ROADMAP.md
#	crates/ui-egui/src/i18n/ar.rs
#	crates/ui-egui/src/i18n/cs.rs
#	crates/ui-egui/src/i18n/de.rs
#	crates/ui-egui/src/i18n/it.rs
#	crates/ui-egui/src/i18n/ja.rs
#	crates/ui-egui/src/i18n/ka.rs
#	crates/ui-egui/src/i18n/pl.rs
#	crates/ui-egui/src/i18n/pt_br.rs
#	crates/ui-egui/src/i18n/ru.rs
#	crates/ui-egui/src/i18n/uk.rs
2026-10-24 14:19:01 +02:00
moppeeer aa003865d7 Merge remote-tracking branch 'origin/main' into direct-select-handles
# Conflicts:
#	ROADMAP.md
2026-10-24 14:17:48 +02:00
moppeeer 0014243ac2 Merge remote-tracking branch 'origin/main' into table-cell-keys
# Conflicts:
#	ROADMAP.md
2026-10-24 14:17:47 +02:00
aiongg d4c1322d97 Merge pull request #1709 from aiongg/w65-batch
Integration batch: book-chapter IDML baseline grids, hyphenation, and the Paragraph panel stack
2026-10-24 08:14:29 -04:00
moppeeer 9a51698cb9 Merge branch 'direct-select-anchor-points' into properties-anchor-points 2026-10-24 12:38:24 +02:00
moppeeer 14a0fe12d6 Merge branch 'direct-select-anchor-points' into direct-select-handles 2026-10-24 12:38:21 +02:00
moppeeerandClaude Opus 5.5 4b281bd20b Format the merge of main
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 12:38:20 +02:00
moppeeer 77b69bc693 Merge branch 'direct-select-anchor-points' into properties-anchor-points 2026-10-24 11:46:24 +02:00
moppeeer 9d7911b822 Merge branch 'direct-select-anchor-points' into direct-select-handles 2026-10-24 11:46:16 +02:00
moppeeer 1038ec1b3c Merge remote-tracking branch 'origin/main' into direct-select-anchor-points
# Conflicts:
#	crates/engine/src/cmd/edit.rs
#	crates/engine/src/tests.rs
#	crates/tools/src/select.rs
2026-10-24 11:46:16 +02:00
moppeeer 91d71af75f Merge remote-tracking branch 'origin/main' into type-drag-new-frame
# Conflicts:
#	crates/tools/src/text.rs
2026-10-24 11:45:50 +02:00
moppeeer 80b449d81f Merge remote-tracking branch 'origin/main' into snap-page-centre
# Conflicts:
#	crates/tools/src/snap.rs
2026-10-24 11:21:24 +02:00
moppeeer 589d3d7c1a Merge remote-tracking branch 'origin/main' into codex/direct-select-unselected-anchor
# Conflicts:
#	crates/engine/src/tests.rs
2026-10-24 11:18:56 +02:00
Dylan M. TaylorandClaude Sonnet 5.5 4c5ea73d98 refactor(tools): fewer parameters and simpler pointer handling (Sonar S107, S3776) (#1725)
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-24 04:51:35 -04:00
aiongg 14da000a35 Baseline grid: Relative To Top Margin starts the grid at each page's top margin
The setting was imported and editable but never read: the composer, the
canvas grid and baseline snapping measured the grid from the page top.
BaselineGrid::origin gives the first line on a page (start, plus the
page's top margin for Top Margin), and all three use it. The composition
cache tracks the setting and the pages' top margins.

Also adds a left-to-right facing-pages guard test for mirrored margins
and the right parent page's guides and running head.
2026-10-24 04:28:34 +00:00
moppeeer 5217392d50 Merge remote-tracking branch 'origin/main' into table-cell-keys 2026-10-24 00:24:55 +02:00
moppeeer 245fb99a8d Merge remote-tracking branch 'origin/main' into direct-select-delete-image
# Conflicts:
#	crates/engine/src/tests.rs
2026-10-23 23:42:19 +02:00
moppeeerandClaude Opus 5.5 3886ad2fd1 Tables: Shift+Tab goes back a cell and Esc toggles text and cell selection
As in InDesign (Learn Skills Daily / Adobe "How to make a table" lesson):
- With the Type tool in a table cell, Shift+Tab goes to the previous cell.
  It went on to the next one: the tool sent a plain Tab whatever the
  modifiers.
- Esc in a cell toggles between the text and the cell: the insertion point
  or text in a cell selects that cell, and selected cells select the text of
  the first one. Esc left the table and selected the frame.

New engine command table.toggleSelection does the toggle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 20:33:44 +02:00
moppeeer db1e7b182c Merge branch 'direct-select-anchor-points' into properties-anchor-points
# Conflicts:
#	ROADMAP.md
2026-10-23 17:00:40 +02:00
Marco Arnulfo c764454ed3 Align: a click on one of several selected objects makes it the key object (fixes #1637) 2026-10-23 16:22:52 +02:00
moppeeerandClaude Opus 5.5 3fbaf8dfb9 Direct Selection: handles around the selected anchors only, and no bounding box
As InDesign: a selected anchor shows both its direction handles, and its
neighbours the handle that shapes the segment to it; with no anchor
selected no handle shows. Handles that don't show can't be grabbed (one
rule, select::handle_shown, for drawing and hit testing). The pen and the
anchor tools still show every handle. Under the anchor tools the selection
is drawn as its path and points, without the bounding box.

Found in the Learn Skills Daily course, chapter 43.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 14:28:48 +02:00
moppeeerandClaude Opus 5.5 a1d4b1bc27 Merge #902 (Direct Selection pulls a corner of an unselected object) into direct-select-anchor-points
Both change the Direct Selection tool: #902's corner pull now builds the
anchor drag with this branch's list of other selected anchors (none), so the
two build together; both sets of tests are kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 14:13:33 +02:00
makesomethingshit 4f45a0127a #1620: Resize selected parent pages from page controls 2026-10-23 20:58:19 +09:00
aiongg 3c38c84438 Merge remote-tracking branch 'upstream/main' into keymap-adoption
# Conflicts:
#	Cargo.toml
#	crates/ui-egui/src/menus.rs
#	crates/ui-egui/src/shortcut_import.rs
#	docs/target-app-parity.md
#	docs/ui-parity.md
2026-10-23 05:10:57 +00:00
moppeeer db8b14eacc Merge branch 'direct-select-anchor-points' into properties-anchor-points 2026-10-22 12:38:24 +02:00
moppeeerandClaude Opus 5.5 fed464d9da Direct Selection: a Shift-click on a selected point previews no move
While the press is still a click (inside the drag tolerance), a drag event
moves nothing, so the release takes the point away without moving it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 12:38:20 +02:00
moppeeerandClaude Opus 5.5 d744b760fe Direct Selection points: each moves in its own spread; Delete deletes them; Transform measures them
`path.moveAnchors` points may carry their own spread-space movement
(`[id, subpath, index, dx, dy]`). Dragging and the arrow keys send each
selected point's movement converted for its spread, so on a spread turned on
screen a point moves the way the pointer or arrow does. Delete and Backspace
with points selected run `path.deletePoints`. Properties › Transform for
selected points shows the points' bounds; X/Y move them and W/H spread or
gather them about the reference point, in one step (`transform_anchors`).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 12:20:44 +02:00
moppeeerandClaude Opus 5.5 66b51ee15f Merge fix: a Shift-click release keeps the other selected objects
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 12:11:55 +02:00
moppeeer 250825e5b7 Merge branch 'direct-select-anchor-points' into properties-anchor-points
# Conflicts:
#	ROADMAP.md
#	crates/tools/src/tests.rs
2026-10-22 12:11:30 +02:00
moppeeerandClaude Opus 5.5 1dc1dbf31a Direct Selection: a Shift-drag keeps a selected point; snapping keeps the 45° constraint
Shift pressed on a selected anchor point keeps it selected, so the press can
become a constrained drag of all the selected points; a Shift-click still
takes it away, on release. With Shift, a snap moves the points only along
the constrained direction. The canvas looks selected points up in a set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 12:10:36 +02:00
moppeeer 5f623e0cba Merge remote-tracking branch 'origin/main' into properties-anchor-points
# Conflicts:
#	ROADMAP.md
#	crates/tools/src/select.rs
#	crates/ui-egui/src/panels/properties.rs
2026-10-22 10:46:35 +02:00
moppeeer d2001f2597 Merge remote-tracking branch 'origin/main' into direct-select-anchor-points
# Conflicts:
#	ROADMAP.md
#	crates/tools/src/select.rs
2026-10-22 10:41:07 +02:00
moppeeerandClaude Opus 5.5 6388244132 Line tool: the readout measures the line as drawn
The Line tool keeps the line it previews (in spread space, Shift and
snapping included) for the readout, instead of measuring from the press to
the pointer in canvas coordinates. Nothing shows before the first drag step.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 10:00:12 +02:00
moppeeerandClaude Opus 5.5 0182b3e532 Snap test: the request names no excluded guides (a field from main)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 09:35:01 +02:00
moppeeer 1cea46de42 Merge remote-tracking branch 'origin/main' into snap-page-centre
# Conflicts:
#	ROADMAP.md
2026-10-22 09:30:20 +02:00
moppeeer 07a4981d02 Merge remote-tracking branch 'origin/main' into loaded-cursor-thumbnail
# Conflicts:
#	ROADMAP.md
2026-10-22 09:27:40 +02:00
moppeeer a1a7742b0c Merge remote-tracking branch 'origin/main' into direct-select-delete-image
# Conflicts:
#	ROADMAP.md
2026-10-22 09:24:58 +02:00
moppeeer 4479d9c782 Merge remote-tracking branch 'origin/main' into frame-readout-document-units
# Conflicts:
#	ROADMAP.md
2026-10-22 08:48:39 +02:00
moppeeer 2d742dc57f Merge remote-tracking branch 'origin/main' into type-drag-new-frame
# Conflicts:
#	ROADMAP.md
2026-10-22 08:44:21 +02:00
moppeeer 48303d7d46 Merge remote-tracking branch 'origin/main' into codex/direct-select-unselected-anchor
# Conflicts:
#	ROADMAP.md
2026-10-22 08:39:27 +02:00
aionggandSBaksa c3382b422c Guides: a dragged ruler guide snaps to guides, margins, columns and objects (#1542)
* Guides: a dragged guide shows where it is (#1282)

While a guide is dragged out of a ruler or moved, a label beside the
pointer reads X: or Y: and the guide's place, in the ruler units and
measured the way the rulers measure (from the zero point, and from the
page origin when rulers restart per page).

* Guides: keep the drag readout inside the canvas

Near the canvas's right or bottom edge the readout flips to the other
side of the pointer, and it is kept inside the canvas in every case
(readout_at).

* Guides: the drag readout measures the spread under the pointer

The readout measured from the spread in the middle of the view (where the
rulers measure), but a guide is dropped on the spread under the pointer,
so with spreads above one another the number shown could differ from the
guide's place. It now measures that spread (ruler_pieces_of).

* Guides: no readout for an existing guide over another spread

An existing guide moves only on its own spread (guide_drag), so dropped
over another it stays where it was: the readout no longer shows a place
there it won't go.

* #1282: guide selection commands (guide.select, guide.selectAll, guide.deselect, guide.moveBy)

* #1282: select ruler guides on the canvas, X/Y in the Control bar and Properties

* #1282: guides take clicks over objects, a new guide is selected, group drag preview

* Guides: a dragged ruler guide snaps to guides, margins, columns and objects (#1221)

---------

Co-authored-by: SBaksa <sabaksa11@gmail.com>
2026-10-22 02:26:52 -04:00
aionggandSBaksa 3be2736d0a Guides: select ruler guides and set their position (#1282) (#1445)
* Guides: a dragged guide shows where it is (#1282)

While a guide is dragged out of a ruler or moved, a label beside the
pointer reads X: or Y: and the guide's place, in the ruler units and
measured the way the rulers measure (from the zero point, and from the
page origin when rulers restart per page).

* Guides: keep the drag readout inside the canvas

Near the canvas's right or bottom edge the readout flips to the other
side of the pointer, and it is kept inside the canvas in every case
(readout_at).

* Guides: the drag readout measures the spread under the pointer

The readout measured from the spread in the middle of the view (where the
rulers measure), but a guide is dropped on the spread under the pointer,
so with spreads above one another the number shown could differ from the
guide's place. It now measures that spread (ruler_pieces_of).

* Guides: no readout for an existing guide over another spread

An existing guide moves only on its own spread (guide_drag), so dropped
over another it stays where it was: the readout no longer shows a place
there it won't go.

* #1282: guide selection commands (guide.select, guide.selectAll, guide.deselect, guide.moveBy)

* #1282: select ruler guides on the canvas, X/Y in the Control bar and Properties

* #1282: guides take clicks over objects, a new guide is selected, group drag preview

* ROADMAP: the progress line lands in one commit after the guide PRs

---------

Co-authored-by: SBaksa <sabaksa11@gmail.com>
2026-10-22 01:47:49 -04:00