Files
arek 7874a5f7c6 feat: implement keyboard and mouse input, pattern placement, and HiDPI scaling
Add configurable key bindings (TOML), modifier-aware dispatch, mouse-driven
pattern placement with preview and rotation, cell grid storage/rendering,
and fractional/integer HiDPI scaling. Archive the input-and-placement change
and sync its specs to main specs.

Tests: Hashtable, Config, Grid, Pattern (4/4 pass).
2026-11-08 14:46:04 +01:00

2.2 KiB

Proposal

Why

wlgol currently renders an animated stripe pattern and has no Game of Life state, no input handling beyond Escape, and no HiDPI awareness. Before implementing the automaton, the application needs a usable interaction layer: configurable keyboard bindings, mouse-driven placement of patterns with a live preview, and rendering that stays crisp on scaled displays. This change establishes that layer so later GoL mechanics can build on it.

What Changes

  • Add configurable keyboard bindings loaded from ~/.config/wlgol/keys.conf (TOML), merged over built-in defaults, with modifier-aware matching (Ctrl/Shift/Alt/Super).
  • Extend keyboard handling to report active modifiers and dispatch bound actions (quit, cancel, rotate, select:<pattern>, clear, pause, step, speed_up, speed_down, toggle_grid).
  • Implement mouse tracking and click handling: selecting a tool shows a rotating preview that follows the cursor; Space rotates 90°; left click places the pattern (tool stays armed); Esc cancels.
  • Add a cell grid (8 logical px per cell, wall boundary) with storage, resize-with-preserve, and rendering of alive cells.
  • Add four built-in patterns (Glider, Blinker, Block, Toad) with rotation support.
  • Add HiDPI scaling (fractional via wp_fractional_scale + wp_viewporter, fallback to wl_output.scale) with logical/physical coordinate conversion.
  • Auto-generate a default keys.conf on first run if missing.

Capabilities

New Capabilities

  • keyboard-bindings: configurable, modifier-aware key-to-action mapping with defaults and TOML override.
  • pattern-placement: tool selection, live preview, rotation, click placement, cancellation.
  • display-scaling: fractional and integer HiDPI scaling with logical/physical conversion.
  • cell-grid: grid storage, resize handling, wall boundary, alive-cell rendering.

Modified Capabilities

None.

Impact

  • Affected code: wlgol.c, tkeyboard.c/h, tpointer.c/h; new modules config, grid, pattern, scale, render.
  • New dependency: vendored tomlc99 for TOML parsing; generated Wayland protocols viewporter and fractional-scale-v1.
  • Config I/O under ~/.config/wlgol/; no public API changes.