Files
DarkRoom/tools/manual
dtourolle a6ea6ba83f Let the manual's scripts find a control by its name
Every scene in tools/manual aimed at window pixels written in by hand, so
a panel that gained a row moved every slider under it and the recording
went on dragging where the slider used to be. The develop column has
already moved that way (Compose now sits above Adjust), and nothing said.

A build with the `automation` feature listens on the Unix socket named
by DR_AUTOMATION and answers where an element is: by its accessible
label, the name a screen reader reads, or by its markup id for the few
things that are not controls (the canvas, the crop rectangle). It uses
Slint's element queries, which need the compiler's debug tables, so the
feature also turns those on in build.rs. It only answers questions; the
input is still xdotool's real pointer. No default build has the feature,
and one that has it listens only when the variable is set.

drive.py gains click-on, drag-on, hold-on, wait-for, wait-gone, labels
and ids. The grid's cells are now named by their file, each rating star
by its value, the sidebar's + as "New collection", and the Adjust
heading's reset as "Reset all adjustments" - controls a screen reader
could not reach before either.
2026-09-25 07:26:36 -04:00
..

tools/manual — the pictures in docs/manual

record.sh <library> drives the desktop build on a private X server and records every scene in scenes.py into docs/manual/media/. drive.py is the puppeteer underneath — launch, click, drag, type, screenshot, record — and is usable on its own to look at a panel after changing it:

DR_HOME=/var/tmp/x tools/manual/drive.py launch /some/folder
tools/manual/drive.py click 1543 22        # Settings
tools/manual/drive.py shot /tmp/settings.png
tools/manual/drive.py stop

The demo library is the author's: seventy frames with no people in them, the fixtures/pano set among them. The scenes' cell coordinates are for that grid, at 1600×1100; the panel coordinates hold for any library.

Two things the scripts know that are not obvious: a Slint TouchArea wants a held press, not xdotool's click; and the app is driven on Xvfb rather than the desktop because under XWayland at scale 2 a pointer warp lands at twice the coordinate asked for.