Skip to content

Artboard tool: Shift-drag draws an artboard inside another or marquee-selects artboards - #2497

Merged
bflatastic merged 2 commits into
storytold:mainfrom
dotCooCoo:feat/artboard-tool-shift
Oct 21, 2026
Merged

bflatastic merged 2 commits into
storytold:mainfrom
dotCooCoo:feat/artboard-tool-shift

Conversation

@dotCooCoo

@dotCooCoo dotCooCoo commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

What and why

With the Artboard tool on main, a Shift-drag inside Artboard 1 moves it, and Shift keeps the move at 45° steps. A
Shift-drag on the pasteboard draws a square artboard. The default keyboard shortcuts
list "Create artboard inside another artboard | Shift-drag", and Using multiple artboards
(archived copy) says "Shift-click the canvas and drag the cursor to select multiple artboards using a marquee".

A Shift-click still adds an artboard to the selection or takes it out (#1139), now when the button comes up. A
Shift-drag inside an artboard draws a new artboard (artboard.new), and a Shift-drag on the pasteboard toggles every
artboard it touches, the last one added becoming active. This changes what Shift does with the tool: it no longer
constrains an artboard move or keeps a new artboard square, and no other modifier does. Shift on the active
artboard's handles still resizes it proportionally. The hint bar names the Shift gestures in every complete catalog,
and the cursor is a crosshair over an artboard while Shift is held.

On main, Escape while a new artboard is being drawn leaves the tool. Escape during any drag, the new marquee included,
now cancels the drag and keeps the Artboard tool, as it already did during a move or a resize.

How it was tested

New tests in crates/tools/src/xform/artboard.rs:

  • a_shift_click_toggles_its_artboard_on_release: the release adds the artboard, and a second click takes it out.
  • a_shift_drag_inside_an_artboard_draws_a_new_one: the release runs artboard.new with the dragged rectangle, and the drag sends no move.
  • a_shift_drag_on_the_pasteboard_selects_the_artboards_it_touches: marquees toggle the artboards they touch.
  • a_plain_drag_still_moves_and_shift_no_longer_constrains_it: a move and a draw follow the pointer with Shift held.
  • escape_cancels_a_marquee_or_a_new_artboard_and_keeps_the_tool: the next Escape leaves the tool.

The first four failed with main's Shift handling put back into the tool, and the last failed with main's Escape
handling. Targeted checks: clippy on vectorcraft-tools and vectorcraft-ui-egui, cargo fmt --all -- --check,
the tools tests for xform::artboard (17 passed) and guides (36 passed), the ui-egui i18n tests (51 passed) and
the three that Shift-click or press Escape with the Artboard tool (3 passed), and cargo xtask brands, layers and
assets.

On Windows 11 (x86-64) with rustc 1.99.0, on top of main at e78116e:

  • CRAFT_FONTS_DIR=<craft-fonts checkout> cargo xtask ci passes its 10 steps: 7,854 tests passed, 0 failed, 11 ignored.

git merge-tree reports no conflicts with main at e78116e.

Checklist

  • cargo xtask ci passes (fmt, clippy, tests, assets, brands, layers, wasm).
  • No panics in shipped code: no unwrap(), expect(), panic!, unreachable!, todo! or
    unimplemented! outside tests, and no unchecked indexing on data from files, parameters or
    messages. Errors are returned as Result and shown to the user
    (why and how).
  • Clean-room: nothing copied from Adobe products or GPL/AGPL code (AGENTS.md).
  • Every new asset has a row in ASSETS.md.

@dotCooCoo

Copy link
Copy Markdown
Contributor Author

Three commits were added today. Two merge main (at 49bdc5c, then at e78116e) into the branch, and one adds the Dutch, Danish and Indonesian rows that main now requires for the two Artboard tool hint fragments. In the second merge the Artboard tool's cursor keeps the branch's Shift check and takes main's artboard_at test, so it shows Move on an artboard's right and bottom edges and the crosshair while Shift is held. The branch merges cleanly with main at e78116e, and cargo xtask ci on it passes its 10 steps: 7,854 tests passed, 0 failed, 11 ignored.

@FredApps FredApps left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Read the full diff at this head. With the Artboard tool, a Shift-drag inside an artboard now draws a new artboard there, a Shift-click on an artboard toggles it on release, and a Shift-drag on the pasteboard is a marquee whose touched artboards toggle (the last one added becomes active and one always stays selected). Move no longer constrains with Shift, and drawing passes no Shift to the diagonal constraint. The FreeBSD build and test job passed at this head. Approving.

@Messhias Messhias left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Artboard tool: Shift-drag draws an artboard inside another or marquee-selects artboards. Checklist cargo xtask ci is ticked.

…-selects artboards

With the Artboard tool, a Shift-press on an artboard toggled it in the
selection and started a move, which Shift kept at 45° steps. A
Shift-drag on the pasteboard drew a square artboard. The reference
app's documentation gives Shift-drag inside an artboard as the way to
draw an artboard there, and Shift-drag on the canvas as a marquee that
selects artboards.

A Shift-click now toggles its artboard when the button comes up. A
Shift-drag inside an artboard draws a new artboard (artboard.new), and
a Shift-drag on the pasteboard toggles every artboard it touches, the
last one added becoming active. Shift no longer constrains an artboard
move or keeps a new artboard square, and no other modifier does. Shift
on the active artboard's handles still resizes it proportionally. The
hint bar names the Shift gestures in every complete catalog, and the
cursor is a crosshair over an artboard while Shift is held.

Escape while a new artboard was being drawn left the tool. Escape
during any drag, the new marquee included, now cancels the drag and
keeps the Artboard tool, as it already did during a move or a resize.

Docs: docs/target-app-parity.md.
… hint

main now lists nl, da and id as complete-menu catalogs, so the two hint
fragments this branch adds need rows there too. Each row replaces the
old " on the canvas to create one" row, as in the other catalogs.
@bflatastic
bflatastic force-pushed the feat/artboard-tool-shift branch from 568a007 to 6f95f1c Compare October 21, 2026 10:33
@bflatastic
bflatastic merged commit 06be77c into storytold:main Oct 21, 2026
3 checks passed
@coderabbitai

coderabbitai Bot commented Oct 21, 2026

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: Repository: storytold/vectorcraft/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: ca916478-f8fe-4d8d-a58c-cb27f0b38a9b
📥 Commits

Reviewing files that changed from the base of the PR and between 44370f9 and 6f95f1c.

⛔ Files ignored due to path filters: 23
  • crates/ui-egui/src/i18n/bg.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/cs.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/da.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/de.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/el.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/es.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/fi.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/fr.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/hu.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/id.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/it.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/ja.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/ka.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/ko.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/nl.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/pl.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/pt-br.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/ru.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/sv.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/uk.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/vi.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/zh-hans.tsv is excluded by !**/*.tsv
  • crates/ui-egui/src/i18n/zh-hant.tsv is excluded by !**/*.tsv
📒 Files selected for processing: 4
  • crates/tools/src/guides.rs
  • crates/tools/src/xform/artboard.rs
  • crates/ui-egui/src/chrome.rs
  • docs/target-app-parity.md
+--------------------------------------------------------------------------------+
| A bunny is never late, nor is he early, he reviews precisely when he means to. |
+--------------------------------------------------------------------------------+
  \
   \     /)/)
        ( '')
        /  |
      o(___)
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@bflatastic

Copy link
Copy Markdown
Member

Thanks @dotCooCoo, merged. Georgian landed in the meantime as a complete catalog, so I added its rows for the two new Artboard tool hint pieces to your last commit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants