Videos, Concepts: pointer files and the custom mouse pointer

- Videos: where the pointer SVGs live, what data-hot means, the shared
  size factor, and that the editor shows the same pointer.
- Concepts: the "Custom mouse pointer" switch in General settings.
- Development: 2046 e2e checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
adminandClaude Opus 5.5 committed 2026-10-12 17:33:58 +02:00
1 parent 34ae82ef8a
commit 1f0946c63e
3 files changed
+14 -4

No files matched your search

+3 -2
@@ -218,8 +218,9 @@ preset (see above), the **Link zoom** of the released game (see above), the **sy
of the scene view's icons (see [Scene editing](Scene-editing)), the collision layers and the
render layers in *Project settings…*. What is about the person at the screen rather than the
project is in *General settings…* (#309), kept in this browser and the same in every project: the
**zoom transition** (see below) and whether the asset panel shows **empty categories and types**
(see below). A project is deleted in *Open project…*: **Delete** asks first, and Cancel, Esc
**zoom transition** (see below), whether the asset panel shows **empty categories and types**
(see below) and the **custom mouse pointer**: on by default, the editor shows the pointer an
editor recording draws (see [Videos](Videos)) instead of the system's. A project is deleted in *Open project…*: **Delete** asks first, and Cancel, Esc
and the deletion itself all lead back to the project list. The active scene is picked where the scenes are — by double-clicking
one in the **Assets** panel. The **Assets** panel's `+` creates an asset and opens its tab; its menu lists the categories of
the panel (*Basics*, *Visuals*, *Logics*, *Physics*, *Audio*), and each opens a **submenu** beside it
+1 -1
@@ -21,7 +21,7 @@ php tests/php/releases.test.php # the release stor
php tests/php/files.test.php # uploaded files in a folder per account (#344), the same way
php tests/php/videos.test.php # the video store, its queue and the worker (#402), with the
# real ffmpeg: the CI image and game-maker-video have it
node tools/seed-e2e.mjs && node tools/e2e.mjs # 2045 editor checks, screenshots in /tmp/gm-e2e-*.png
node tools/seed-e2e.mjs && node tools/e2e.mjs # 2046 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
+10 -1
@@ -247,6 +247,15 @@ The recording is always uploaded; **Download** in the video picker saves it as i
- **The mouse pointer** is drawn in when asked: the system draws it over the page, so it is not in
the canvas; the recording draws its own in the shape the editor shows (arrow, hand, resize
arrows, I-beam, crosshair).
- **The pointer shapes are SVG files** in `src/core/recording/cursors/`, one per shape, to be
opened and edited. The `viewBox` is the picture, `data-hot="x y"` on the root is the point that
sits on the mouse. `resize.svg` is drawn turned for the other resize directions.
A unit of the `viewBox` is shown `CURSOR_SIZE` (0.8) CSS pixels large, on screen and in the
recording alike (`core/recording/cursors.ts`), so the files keep the units they were drawn in.
Each is drawn sharp at the size of the recording; an edited file takes a build.
- **The editor shows the same pointer** while you work, unless *General settings… → Custom mouse
pointer* is off: the files are the canvas's CSS `cursor` (`url(…) x y, keyword`), so the system
still draws the pointer and the canvas never does. What you see is what the recording draws.
- **The red dot is not in it.** It is an HTML element over the canvas, the one thing on the page
outside it, so the copy of the canvas never holds it; the room it needs beside the menu stays
empty in the recording. Clicks go through it.
@@ -264,7 +273,7 @@ The recording is always uploaded; **Download** in the video picker saves it as i
The code is `src/editor/EditorRecorder.ts` with its dialog `src/editor/EditorRecordingDialog.ts`;
the sizes and the options are plain functions in `src/core/recording/editorRecording.ts`, the
pointer shapes are `src/core/recording/cursors.ts`.
pointer shapes are read in `src/core/recording/cursors.ts`.
## The worker