feat(present): zoom een groot diagram met de - / + toetsen tijdens presenteren (#930) #945

Merged
brenno merged 3 commits from fix/930-mermaid-keyboard-zoom into main 2026-07-28 02:05:55 +00:00
Owner

Tijdens het presenteren op een groot mermaid-diagram (#930) werkte inzoomen (de +-knop), maar de --toets deed niets: het toetsenbord was nooit aan de diagram-zoom gekoppeld.

Fix

  • MermaidViewController krijgt zoomBy(factor), dat rond het midden van het venster zoomt met de laatst bekende layout-maten (setMetrics, gevoed vanuit het zoombare venster). Zo kan ook een aanroeper die die maten zelf niet kent — de toetsenbord-zoom in de presentator — hetzelfde midden-vasthoudende zoomen als de knoppen.
  • De presentator routeert nu -, =/+ en de numpad-varianten naar zoomBy, met dezelfde factoren als de knoppen (1.25 / 0.8). Op een dia zonder zoombaar diagram doen de toetsen niets en vallen ze door, dus ze kapen de navigatie nooit.
  • De toets→factor-mapping staat in een top-level _handleZoomKey, niet in de _handleNavKey-switch, zodat de class-size-ratchet op _FullscreenPresenterState niet wordt geraakt.

Tests

  • zoomBy unit (zonder maten → niets; met maten → in én weer uit, klemt bij passend) + een widgettest die bewijst dat de layout de maten doorgeeft.
  • Een presentatortest dat de zoom-toetsen niet bladeren en de navigatie niet breken.

Meegenomen

  • chore: dart format op test/native_git_mirror_test.dart — bestaande format-drift die via #942 op main belandde en make check (format-check) voor iedereen rood zette. Pure formattering, geen gedrag.

Lokaal make check volledig groen.

Tijdens het presenteren op een groot mermaid-diagram (#930) werkte inzoomen (de `+`-knop), maar de `-`-toets deed niets: het toetsenbord was nooit aan de diagram-zoom gekoppeld. ## Fix - `MermaidViewController` krijgt `zoomBy(factor)`, dat rond het midden van het venster zoomt met de laatst bekende layout-maten (`setMetrics`, gevoed vanuit het zoombare venster). Zo kan ook een aanroeper die die maten zelf niet kent — de toetsenbord-zoom in de presentator — hetzelfde midden-vasthoudende zoomen als de knoppen. - De presentator routeert nu `-`, `=`/`+` en de numpad-varianten naar `zoomBy`, met dezelfde factoren als de knoppen (1.25 / 0.8). Op een dia zonder zoombaar diagram doen de toetsen niets en vallen ze door, dus ze kapen de navigatie nooit. - De toets→factor-mapping staat in een top-level `_handleZoomKey`, niet in de `_handleNavKey`-switch, zodat de class-size-ratchet op `_FullscreenPresenterState` niet wordt geraakt. ## Tests - `zoomBy` unit (zonder maten → niets; met maten → in én weer uit, klemt bij passend) + een widgettest die bewijst dat de layout de maten doorgeeft. - Een presentatortest dat de zoom-toetsen niet bladeren en de navigatie niet breken. ## Meegenomen - `chore`: `dart format` op `test/native_git_mirror_test.dart` — bestaande format-drift die via #942 op main belandde en `make check` (format-check) voor iedereen rood zette. Pure formattering, geen gedrag. Lokaal `make check` volledig groen.
The large-diagram zoom (#930) could only be driven from the on-screen +/−
buttons, which know the viewport/child size from their own layout. Give the
controller a `zoomBy(factor)` that zooms around the viewport centre using the
last layout metrics (`setMetrics`, fed from the zoomable window's build), so a
caller that doesn't know those sizes — the keyboard zoom in the presenter — can
drive the same centre-preserving zoom as the buttons.

`zoomBy` returns whether a zoomable diagram was on screen: with no metrics
(nothing to zoom) it does nothing and reports false, so the caller can let the
key fall through instead of swallowing it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Zooming in "worked" (the on-screen + button) but pressing - did nothing: the
keyboard was never wired to the diagram zoom. Route -, =/+ and the numpad
variants to MermaidViewController.zoomBy, same factors as the buttons
(1.25 / 0.8). On a slide without a zoomable diagram the keys do nothing and fall
through, so they never hijack navigation.

The mapping lives in a top-level `_handleZoomKey`, not in the _handleNavKey
switch, so it stays clear of the class-size ratchet on _FullscreenPresenterState.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
chore: apply dart format to native_git_mirror_test.dart
All checks were successful
scans / scans (pull_request) Successful in 3m20s
b000d8251b
Pre-existing format drift landed via #942 (eb2ca311) — `make check`'s
format-check is red on current main for everyone. Pure `dart format` output,
no behaviour change; unblocks the gate here and fixes main on merge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit d8d068db9d into main 2026-07-28 02:05:55 +00:00
Sign in to join this conversation.
No description provided.