Describe the turn knob and sorting a container with its parent

Two changes in the scene view need their words in the wiki.

- Scene editing: texts, tilemaps, particles and containers have the
  turn knob. A container shows it above a frame around its content
  (#242).
- Scene editing: a container has "Sort with parent". It is off by
  default and draws the whole content at the slot of its parent
  (#243).
- Development: the check total is 1452, counted in a full e2e run
  in the CI image.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
adminandClaude Opus 5.5 committed 2026-09-27 12:13:51 +02:00
1 parent 0063a7a466
commit 8024b9d1ef
2 files changed
+14 -2

No files matched your search

+1 -1
@@ -15,7 +15,7 @@ npm run build # writes dist/ and regenerates index.html
php tools/make-user.php <name> <password> [admin|user] # an account; every tool signs in (see Accounts)
php tests/php/accounts.test.php # the API's account rules, no server needed (CI's gate job)
php tests/php/snapshots.test.php # the snapshot store (#231), the same way
node tools/seed-e2e.mjs && node tools/e2e.mjs # 1447 editor checks, screenshots in /tmp/gm-e2e-*.png
node tools/seed-e2e.mjs && node tools/e2e.mjs # 1452 editor checks, screenshots in /tmp/gm-e2e-*.png
GM_STEPS=20 node tools/e2e.mjs # or 1-12, or 6,20 — a subset while working on one step
./e2e.sh start [GM_STEPS] # the same run detached, see below
./e2e.sh status # live progress, or the last run's result
+13 -1
@@ -92,6 +92,13 @@ asset, overridden per object. A parent that is not drawn itself (container, beha
collider) or is a tilemap has no single place to share, so there the switch does nothing. The rule
lives in `drawSlots` (`src/viewport/drawOrder.ts`), which the scene view, the game and picking share.
A **container** has the switch too (#243), but it works differently: the container is never drawn,
so it passes its content on. With it on, everything the container holds is drawn in the place of
the container's parent, say the figure it hangs under, as if it were the figure's own children. The
switch of the content itself has no say then. Several containers in a row pass on through as long
as each has it on. A container starts with the switch **off**, also a new one, so content placed
before draws as it did. At the top level, or under a tilemap, it does nothing.
**Transform.** Sprites, texts, colliders and containers carry four more rows next to their
position: **Scale** (one factor, default 1), **Rotation** (degrees, positive turns clockwise on
screen), **Mirror X** and **Mirror Y**. They are ordinary properties — set on the asset, overridden
@@ -105,7 +112,9 @@ the corners; dragging an object moves it in its parent's frame, so a child under
by a quarter walks down the screen when dragged along its own x. `Move` and `Set position` work
in the object's own axes as well.
**Size gizmo.** A selected sprite or collider gets handles on its outline (#223), turned with it:
**Size gizmo.** A selected sprite or collider gets handles on its outline (#223), turned with it.
Texts, tilemaps, particle sources and containers get the knob only (#242), since they have no
width and height to pull at:
- **Edges and corners** set Width and Height (a corner both). The opposite side stays where it was,
so the object's position moves by half the change. Sizes land on whole units, at least 1.
A handle reaches 7 pixels outwards but only half that into the object, so a small sprite can
@@ -116,6 +125,9 @@ in the object's own axes as well.
the drag decide which: pulled away from or towards the centre it scales, pulled sideways it
turns. That choice holds until the release, so one drag never does both. Shift snaps a turn to
15°. The turn is the angle swept round the object's centre, so it can go on past a half circle.
- A **container**'s knob stands over a thin frame round everything it holds, not over its small
icon. The frame turns and grows with the container. Turning and scaling go round the container's
origin, where its icon stands, so its content swings round that point.
- The values go into **this object's overrides**, like "Fit to sprite": a value equal to the
asset's own clears the override. One drag is one undo step.