Four editors edit points, and all of them put a point down on a single
press on the line and took one away on a double-click. A stray click
added a point, and there was no way to see which point a key would hit.
All four now work the same way: the Curve tab, the Vector art tab, a
polygon collider in the scene view and a frame's collision outline in
the Texture tab.
- A double-click on a line, edge or segment puts a point there, in the
Curve tab on free space too. The point is picked and stays in place.
It can be dragged with the next press, as answered in the issue.
- A click on a point picks it, and it is drawn filled. A double-click
on a point takes nothing away any more.
- Delete or Backspace takes the picked point away. Without a picked
point the key removes the shape, the object or the outline as before.
- A right-click on a point picks it and opens a menu with Delete
point. In the Curve and Vector art tab the four point types stand
below it. Alt-click stays.
- A polygon keeps three corners and a curve keeps its ends. The entry
is greyed out then.
- The pick ends with a click beside the points, with another object,
shape or frame, and after the point is gone.
- editor/pointGestures.ts holds the rule as a pure function, and
editor/pointMenu.ts builds the menu for all four.
Decided here:
- A single click on a line no longer adds anything. In Vector art it
drags the shape, on a polygon it drops the pick, and in the Texture
tab it makes that outline the active one and drops the pick.
- In the Texture tab a click inside the frame still appends a corner,
and that corner is picked. Delete takes the last corner first. To
remove the whole outline, click one of its edges before.
- The point the Pen put down last is picked, so Delete takes it and
not the shape.
- Delete hits the picked point also when the tab has lost the keyboard
focus, after a click in the shape list or after the menu.
- A vector shape that loses its last point is removed whole. Before,
an empty shape stayed in the list.
Findings:
- Fixed: the new hint line in the Texture tab was cut off at the edge.
The shorter text was not looked at in a picture again.
- Not fixed: in the scene view the collider's name label covers a
corner that sits near the centre. That was so before.
Tests:
- Gate: 200 files, 2967 tests (2944 + 23), exit 0
- e2e, full run: 1629 checks passed (1625 + 4), exit 0
- Smokes: 24 / 19 / 21, exit 0
- After the full run an unused parameter and a comment were tidied.
For that final state the gate and e2e 42,47,53 (105 checks) ran
again, the full run did not.
- 23 unit tests in tests/editor/point-gestures.test.ts, for the rule
and for each of the four editors
- Four e2e checks with a real mouse, two in module 42 and one each in
47 and 53. The existing checks for adding and removing a point use
the new gestures.
- 20 unit counter-probes all fail tests, run on stein2
- Two browser counter-probes fail, the build went through both times.
Without the Delete wiring the key removes the collider. Without the
right-click hook the menu is missing, and that run stops in module
42, so 47 and 53 were not reached with it.
- Three screenshots looked at, the picked point is filled. None of
the Vector art tab.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Building a curve by mouse alone was fiddly: there was no way to put a
point on an exact value, no grid, and the running preview could not be
stopped at a chosen moment. The hand cursor over points also looked
like a link instead of a drawing tool.
- Number fields t and v in the header show the selected point. Typing
or dragging on them goes through the same rules as a mouse drag, so
points never overtake and handles stay clamped. One undo step each.
t is greyed out on the two end points.
- The magnet button from Vector art snaps points and handles to a
0.05 grid in t and v, when placing on free space and when dragging.
- Points and handles keep the default arrow in the curve tab and in
Vector art. The pixel art palette dropped pointer as well, which is
beyond the issue. Collider corners never had it.
- The preview now starts off. A vertical time line with a knob under
the t axis sets t when dragged sideways. Dragging the dot on the
rail jumps to the first t where the curve reaches that value, or to
the closest one if it never does.
- The rules are pure functions in curveView.ts (withCurvePointSet,
snappedToGrid, shareAtValue, previewSecondsAt), the canvas only
calls them.
Tests:
- ./check.sh: 180 files, 2616 tests, CHECK EXIT 0
- GM_STEPS=1,47,53: ALL PASSED, 87 checks
- 4 new unit tests in curve-view.test.ts, 4 new e2e checks in 53
(53h-53k) and 1 in 47, all with real mouse and keyboard
- Counter-probes bite: without "first t" 1 unit test fails, with
pointer, no snap, no field commit, no scrub or preview on 5 browser
checks fail, pointer in Vector art fails the new 47 check
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
debugHook.ts had grown to 1097 lines of unrelated test hooks. They
now live in seven files under src/editor/debug/, grouped by topic.
debugHook.ts only assembles them and is down to 86 lines.
- The shape of window.__gm is unchanged for tools/. Measured in the
browser before and after: 120 top-level keys and 313 leaves with
their arity, byte-identical JSON.
- The Text import is explicit in the helpers. Without it the name
fell back to the DOM type and instanceof would never have matched.
Findings:
- The comment for vectorArt sat above pixelArt. It is back in place.
- An orphaned duplicate comment on assetRow is gone.
Tests:
- ./check.sh: 145 files, 2192 tests, CHECK EXIT 0 (unchanged)
- e2e 1-16,37,39-43,47,48: ALL PASSED, 734 checks
- The shape probe turns red against a deliberately misnested hook.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>