feat(mermaid): groot diagram scrollbaar op de presentatie, publiek volgt mee (#872) #885

Merged
brenno merged 3 commits from feat/872-mermaid-scroll into main 2026-07-26 12:04:06 +00:00
Owner

Vervolg op #868. Een mermaid-diagram dat te groot is om leesbaar binnen de slide te passen werd tot een postzegel verkleind. Nu:

  • MermaidDiagram kiest passend-vs-scrollen: past het diagram op volle breedte binnen het kader, dan gewoon passend (zoals #868); is het te hoog, dan op leesbare volle breedte in een vast-hoog verticaal scrollvenster. Opt-in via een MermaidRenderScope (standaard passend), zodat thumbnails, dialogen, de slidelijst en de export ongemoeid blijven.
  • Presentatie: de presentatie-dia zet scrollen aan met een gedeelde ScrollController. De presentator deelt zijn scrollpositie als fractie (0..1) met het publieksvenster via het bestaande presentator→publiek-kanaal (mermaidScroll); het publiek zet dezelfde fractie op zijn eigen scrollrange — fractie i.p.v. pixels omdat presentatiescherm en beamer verschillende afmetingen hebben. Bij een dia-wissel gaat de scroll terug naar boven.
  • Export/statisch (slide_rasterizer.dart, PDF/PPTX): expliciet passend — een vaste pagina kan niet scrollen, dus het hele diagram wordt geschaald getoond.

Verificatie: make check groen. Vier nieuwe/aangepaste widgettests, inclusief een échte drag-scroll die bevestigt dat het venster scrolt, plus tests dat een statisch oppervlak passend blijft en een breed/laag diagram zijn natuurlijke maat houdt. De scroll-logica is platform-agnostisch en zichtbaar op web (waar mermaid via JS-interop rendert); de desktop-visuele keuring is geblokkeerd door een los, bestaand macOS-render-probleem (#882), niet door deze wijziging.

fixes #872

Vervolg op #868. Een mermaid-diagram dat te groot is om leesbaar binnen de slide te passen werd tot een postzegel verkleind. Nu: - **`MermaidDiagram`** kiest passend-vs-scrollen: past het diagram op volle breedte binnen het kader, dan gewoon passend (zoals #868); is het te hoog, dan op **leesbare volle breedte in een vast-hoog verticaal scrollvenster**. Opt-in via een `MermaidRenderScope` (standaard passend), zodat thumbnails, dialogen, de slidelijst en de export ongemoeid blijven. - **Presentatie:** de presentatie-dia zet scrollen aan met een gedeelde `ScrollController`. De presentator deelt zijn scrollpositie **als fractie** (0..1) met het publieksvenster via het bestaande presentator→publiek-kanaal (`mermaidScroll`); het publiek zet dezelfde fractie op zijn eigen scrollrange — fractie i.p.v. pixels omdat presentatiescherm en beamer verschillende afmetingen hebben. Bij een dia-wissel gaat de scroll terug naar boven. - **Export/statisch** (`slide_rasterizer.dart`, PDF/PPTX): expliciet **passend** — een vaste pagina kan niet scrollen, dus het hele diagram wordt geschaald getoond. **Verificatie:** `make check` groen. Vier nieuwe/aangepaste widgettests, inclusief een échte drag-scroll die bevestigt dat het venster scrolt, plus tests dat een statisch oppervlak passend blijft en een breed/laag diagram zijn natuurlijke maat houdt. De scroll-logica is platform-agnostisch en zichtbaar op web (waar mermaid via JS-interop rendert); de desktop-visuele keuring is geblokkeerd door een los, bestaand macOS-render-probleem (#882), niet door deze wijziging. fixes #872
Voegt de render-keuze passend-vs-scrollen toe aan MermaidDiagram, gestuurd door
een MermaidRenderScope (opt-in; standaard passend). Een te hoog diagram komt op
een scroll-oppervlak leesbaar op volle breedte in een vast-hoog scrollvenster
i.p.v. tot een postzegel verkleind; op een statisch oppervlak (export) blijft
het passend. De rasteraar zet scrollen expliciet uit (een pagina kan niet
scrollen). Nog geen oppervlak zet scroll aan — dat volgt met de presentatie-sync.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
De presentatie-dia zet scrollen aan voor een te groot diagram (op leesbare
volle breedte). Een gedeelde ScrollController via MermaidRenderScope laat de
presentator zijn scrollpositie als fractie naar het publieksvenster sturen
(audienceChannel 'mermaidScroll'), dat dezelfde fractie op zijn eigen
scrollrange toepast. Fractie i.p.v. pixels omdat presentatiescherm en beamer
verschillende afmetingen hebben. Bij een dia-wissel gaat de scroll terug naar
boven. Export/thumbnails/dialogen blijven passend.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fix(mermaid): opmaak recht + houd presenter onder klasseplafond (#872)
All checks were successful
scans / scans (pull_request) Successful in 3m23s
2379ea68bc
De format-check viel op drie bestanden waar de nieuwe MermaidRenderScope-
wrapper de subboom niet mee had ingesprongen; `dart format` recht getrokken.

De convention-ratchet viel omdat _FullscreenPresenterState 7 regels boven
zijn plafond kwam door het scroll-broadcastgedrag (#872). De rekenkundige
throttle-logica is naar de top-level helper _broadcastMermaidScrollFraction
verhuisd; de listener in de state blijft een dunne delegator. Basislijn
onaangeroerd.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 98c45613dd into main 2026-07-26 12:04:06 +00:00
Sign in to join this conversation.
No description provided.