mirror of
https://github.com/ddeverill/SteamlessController.git
synced 2026-10-22 14:42:16 -05:00
Phase 1 of the v1.20 trackpad work: the settings a Directional Pad and a Single Button pad need, and reading and writing them. Nothing resolves a direction yet and neither mode is selectable, so behaviour is unchanged. TrackpadMode gains DirectionalPad and SingleButton, appended so a build that predates them reads a profile naming one as None through the guard that was already there rather than as some other mode. TrackpadSettings gains four direction bindings, a touch binding and a DiagonalMode. Directions default to the gamepad d-pad so choosing the mode does the obvious thing before anything is rebound. Touch is a binding on every mode but None and DS4Touchpad, not just the two new ones: it cannot collide with a direction because directions resolve from the click, and a thumb crosses zones constantly while sliding, so zoning it would only make it flicker. kPadRingRadius carries the centre/ring boundary at 12000 raw units. Not a fraction of the pad: the coordinate space is square, both axes saturate at 32767, so the corner sits 1.41x further out than an edge and no single fraction describes one circle. The value comes from TrackpadZoneProbe against real presses — centre presses reached at most 6035 and the loosest direction press was 17731, eyes-free. Both registry sites read and write per pad through one prefixed helper rather than two copies of twelve names, which is where a left-pad name ends up reading a right-pad value. The six settings that already existed keep their exact names, so 1.19 profiles load untouched, and the six new ones per pad default to the struct's own values. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>