Add pinch-to-zoom to the week and day timeline (#56)

The issue asked for a pinch gesture; part A only shipped the settings
presets, so this adds the gesture itself. Two fingers on the timeline
rescale the hour height continuously, and the moment under the fingers
stays under them while it zooms, so you keep your place in the day.

The scale preference grows a Custom case to hold what a pinch settles
on — a direct manipulation should be able to land between the named
steps rather than snapping to one. It is stored as "custom:<dp>"; the
preset names are unchanged, so an existing choice reads back as it was.
The picker lists Custom alongside the presets while it is in force, so
it is visible and one tap gets you back to a named step.

Three gestures share the timeline, so the pinch only claims it once a
second finger is down and the spread has passed a slop threshold —
one-finger scrolling, the week swipe and a two-finger scroll are all
untouched. It watches the initial pointer pass, since the vertical
scroll it has to outrank is a descendant.

The presets stay the accessible route to the same setting; a pinch is
not reachable without two-finger input.
This commit is contained in:
2026-07-31 20:00:31 +02:00
parent c1dc725b2c
commit f84164bb0c
12 changed files with 454 additions and 27 deletions

View File

@@ -15,6 +15,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
could sit below the fold all week. Compact and Comfortable are fixed steps
either side of the previous spacing, which stays the default. Both views share
the setting ([#56]).
- Week and day view can be **pinched** with two fingers to set the hour height
directly, anywhere between and beyond the named steps. The time under your
fingers stays put as it zooms, so you keep your place in the day. A pinched
height is remembered and appears as **Custom** in the Hour height setting, so
tapping a named step there takes you back to it ([#56]).
### Changed
- Event blocks now only draw text they can draw whole. One too short for a full