Commit Graph
155 Commits
Author SHA1 Message Date
makesomethingshit 5c364f9897 #1620: Port parent resizing to current layout modules 2026-11-01 15:18:55 +09:00
aiongg aae929eb97 Merge track 3 2026-10-30 23:56:48 +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 92327dcc4c Merge track b: swatches, canvas, tools and tables PRs
Conflicts: engine/src/tests.rs and i18n/*.rs: adjacent additions from both sides, both kept.
2026-10-30 20:49:48 +00:00
aiongg e15fc040b5 Merge track a: properties, object and layout PRs
Conflicts: dialogs/tests.rs and i18n/{ar,cs,it,ka,pl,pt_br,ru,uk}.rs: adjacent additions from both sides, both kept.
2026-10-30 20:49:28 +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
moppeeer d4a00a207f Merge remote-tracking branch 'origin/main' into character-style-from-selection
# Conflicts:
#	crates/engine/src/cmd/style.rs
#	crates/engine/src/cmd/text.rs
#	crates/ui-egui/src/dialogs.rs
#	crates/ui-egui/src/i18n.rs
2026-10-29 11:51:59 +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 271d20ba7f Merge remote-tracking branch 'origin/main' into properties-wrap-offsets
# Conflicts:
#	crates/ui-egui/src/panels/properties.rs
2026-10-29 11:43:59 +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 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 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
aiongg b0dc1578b5 refactor(engine): move the loose tests_*.rs files to tests/ 2026-10-26 18:18:14 +00:00
moppeeerandClaude Opus 5.5 7a50e48081 Text wrap: an all-null offset array keeps a custom boundary
{"offset": [null, null, null, null]} parsed as an offset edit, so the custom
wrap boundary (from IDML) was dropped although no side changed. An array with
no number in it is no offset edit. Found by CodeRabbit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 14:35:32 +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 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 527c0d350b Merge remote-tracking branch 'origin/main' into character-style-from-selection
# Conflicts:
#	ROADMAP.md
#	crates/engine/src/tests.rs
#	crates/ui-egui/src/dialogs.rs
2026-10-24 11:29:16 +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
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
moppeeer 6a775f5986 Merge branch 'direct-select-anchor-points' into direct-select-handles 2026-10-23 22:26:50 +02:00
moppeeerandClaude Opus 5.5 3d652b3e3e Move Anchors: a points value that is not a list is an error
path.moveAnchors treated a non-list points as absent and fell back to the
id/anchors form, so a request with a malformed points and an id moved that
path. Found by CodeRabbit on #1657.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:26:47 +02:00
moppeeer d3960f90df Merge branch 'direct-select-anchor-points' into direct-select-handles 2026-10-23 19:38:36 +02:00
moppeeerandClaude Opus 5.5 8daf036a3e Add Anchor: an invalid subpath is an error, not the last subpath
path.appendAnchor read `subpath` with as_u64, so -1 or "0" counted as omitted
and the point went onto the last subpath. Only an omitted (or null) subpath
means the last one now; any other value must be a valid index.

Found by CodeRabbit on #1657.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 19:38:24 +02:00
Marco Arnulfo 85552ca0f3 Selection: a key object needs at least two selected objects 2026-10-23 19:03:26 +02:00
Marco Arnulfo 8eab33eba1 Align: no key object once the selection is down to one object (#1637) 2026-10-23 16:54:21 +02:00
moppeeer f7197e1e0b Merge branch 'direct-select-anchor-points' into direct-select-handles 2026-10-23 16:51:43 +02:00
moppeeerandClaude Opus 5.5 9442f5d9c8 Selected points follow their path: Toggle Selection and Add Anchor at the start
- selection.toggle dropping an item from the selection now drops its selected
  points too. They stayed in selection.anchors, so the arrow keys still moved
  points of a frame that was no longer selected.
- path.appendAnchor at the start moves the sub-path's selected points up one
  place, as path.reverse remaps them, so they keep naming the same anchors.

Found by CodeRabbit on #1657.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 16:51:31 +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
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 a74ea0d3c9 Styles: a non-string Based On or Next Style is refused on creation too
`style.paragraph.create` and `style.character.create` refuse a `basedOn` or
`nextStyle` that is neither a style name nor null, instead of dropping it and
creating the style without the reference, as `style.paragraph.edit` does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 09:44:13 +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 6467e0b30a Merge remote-tracking branch 'origin/main' into character-style-from-selection
# Conflicts:
#	ROADMAP.md
2026-10-22 09:11:12 +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 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
paaspaas00andClaude Opus 5.5 d0e90e71ca Place cursor: the crosshair throughout when no graphic is loaded
With nothing in the place cursor there's no thumbnail to show, so the
cursor is the crosshair before a press too, as it already was while
dragging. (Review.)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 19:01:26 +02:00
paaspaas00andClaude Opus 5.5 ff5b065faf Place cursor: the thumbnail stays until a drag starts drawing the frame
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 15:33:11 +02:00
paaspaas00andClaude Opus 5.5 098613b75d Place cursor: a drag under the threshold is a click, with no frame drawn
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 15:05:00 +02:00
paaspaas00andClaude Opus 5.5 03754e381a Paragraph styles: Based On and Next Style must name styles; the dialog resolves over the chosen Based On
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 14:58:44 +02:00
paaspaas00andClaude Opus 5.5 f972cebb96 Paragraph style edits: Reset To Base with a new Based On resolves over it, is checked against it and previewed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 13:47:05 +02:00
moppeeerandClaude Opus 5.5 061c4faaf0 Direct Selection: select anchor points with a marquee across paths and move them together
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 22:32:46 +02:00
moppeeerandClaude Opus 5.5 53b8b04141 PR-1392: the place-cursor preview follows place.drop's 2 pt drag threshold
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 21:17:37 +02:00
moppeeerandClaude Opus 5.5 e1812231a9 Place cursor: a thumbnail of the loaded graphic; a drag draws a proportional frame with its scale
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 18:52:13 +02:00