feat(presenteren): geef de publieksweergave een bedieningsbalk (#607) #691

Merged
brenno merged 3 commits from feat/presentatiebalk-607 into main 2026-07-22 21:21:02 +00:00
Owner

Werkt aan #607. Het eerste en grootste deel; het issue blijft open voor de twee andere, want dat zijn keuzes en geen gebreken.

De bedieningsbalk

Beweeg de muis en er verschijnt drie seconden een smalle balk onderin: waar je bent (Slide 3 / 18), een pijl elke kant op, en een sluitknop die Escape bij naam noemt. Daarna verdwijnt hij vanzelf.

Verborgen tenzij je hem zoekt is hier geen zuinigheid maar het punt: een projectiebeeld hoort geen permanente knoppen te dragen, want die staan straks op elke foto van de zaal. Vandaar precies jouw tussenweg — zichtbaar op het moment dat je hem nodig hebt (je pakt de muis) en weg zodra dat voorbij is.

De knoppen dragen hun naam via IconButton(tooltip:) en niet via een Tooltip eromheen. Dat verschil is #586: het tweede geeft een schermlezer geen naam, en het zou hier extra pijnlijk zijn — dit ís de uitknop.

De test dekt alle drie de toestanden

Onzichtbaar bij een stilstaande muis, zichtbaar na muisbeweging, en weer weg na drie seconden. Die laatste is de belangrijkste: een balk die blijft staan is precies de fout die dit ontwerp vermijdt, en zonder die assertie zou hij ongemerkt kunnen terugkomen.

Eén bestaande test moest mee. starts in audience view without presenter chrome toetste dat er géén sluitknop in de boom zat. Die zit er nu wél, alleen volledig doorzichtig — dus toetst hij nu dat er niets te zien is, wat hij eigenlijk al bedoelde.

De klasseratchet, en waar hij toe leidde

De balk duwde _FullscreenPresenterState over zijn plafond. Niet de basislijn verhoogd maar verplaatst, en dat leverde een beter ontwerp op: AudienceSurface is een widget om het diabeeld heen die de muisbeweging opvangt, de klok bijhoudt en de balk toont. De zichtbaarheid woont daar omdat dat het enige is wat er te regelen valt en het nergens anders toe doet. De presenter houdt alleen wat hij als enige weet: waar we zijn, of er een volgende is, en hoe je stopt. 3510 → 3412 regels, basislijn mee omlaag.

Wat er niet in zit

  • "Zet de repetitiesamenvatting achter een knop of een instelling." Die instelling bestaat al — Presentatie-eigenschappen → toon tijdsoverzicht, per deck, en een play-only deck toont hem sowieso nooit. Wat je voorstelt is dus feitelijk: zet de standaard op uit. Dat is een productkeuze en verandert gedrag voor iedereen; die leg ik niet onderweg vast.
  • "Begin bij dia 1 tenzij de gebruiker 'presenteer vanaf hier' koos." Ook een keuze, en er is een reëel tegenargument: wie tijdens het maken op dia 12 werkt en op play drukt, wil vaak juist dáár beginnen. Dit vraagt om twee ingangen, en dat is ontwerpwerk.

Poort

make check groen (niet door tail gepijpt). USER_GUIDE, SOURCE_MAP en CHANGELOG bijgewerkt. Geen nieuwe zichtbare tekst — Vorige, Volgende, Slide en Afsluiten (Escape) bestonden al in alle 32 talen.

Werkt aan #607. Het eerste en grootste deel; **het issue blijft open** voor de twee andere, want dat zijn keuzes en geen gebreken. ## De bedieningsbalk Beweeg de muis en er verschijnt drie seconden een smalle balk onderin: waar je bent (`Slide 3 / 18`), een pijl elke kant op, en een sluitknop die Escape bij naam noemt. Daarna verdwijnt hij vanzelf. Verborgen tenzij je hem zoekt is hier geen zuinigheid maar het punt: **een projectiebeeld hoort geen permanente knoppen te dragen**, want die staan straks op elke foto van de zaal. Vandaar precies jouw tussenweg — zichtbaar op het moment dat je hem nodig hebt (je pakt de muis) en weg zodra dat voorbij is. De knoppen dragen hun naam via `IconButton(tooltip:)` en niet via een `Tooltip` eromheen. Dat verschil is #586: het tweede geeft een schermlezer geen naam, en het zou hier extra pijnlijk zijn — dit ís de uitknop. ## De test dekt alle drie de toestanden Onzichtbaar bij een stilstaande muis, zichtbaar na muisbeweging, en **weer weg na drie seconden**. Die laatste is de belangrijkste: een balk die blijft staan is precies de fout die dit ontwerp vermijdt, en zonder die assertie zou hij ongemerkt kunnen terugkomen. Eén bestaande test moest mee. `starts in audience view without presenter chrome` toetste dat er géén sluitknop in de boom zat. Die zit er nu wél, alleen volledig doorzichtig — dus toetst hij nu dat er niets te *zien* is, wat hij eigenlijk al bedoelde. ## De klasseratchet, en waar hij toe leidde De balk duwde `_FullscreenPresenterState` over zijn plafond. Niet de basislijn verhoogd maar verplaatst, en dat leverde een beter ontwerp op: `AudienceSurface` is een widget om het diabeeld heen die de muisbeweging opvangt, de klok bijhoudt en de balk toont. De zichtbaarheid woont daar omdat dat het enige is wat er te regelen valt en het nergens anders toe doet. De presenter houdt alleen wat hij als enige weet: waar we zijn, of er een volgende is, en hoe je stopt. 3510 → 3412 regels, basislijn mee omlaag. ## Wat er niet in zit - **"Zet de repetitiesamenvatting achter een knop of een instelling."** Die instelling *bestaat* al — *Presentatie-eigenschappen → toon tijdsoverzicht*, per deck, en een play-only deck toont hem sowieso nooit. Wat je voorstelt is dus feitelijk: zet de standaard op uit. Dat is een productkeuze en verandert gedrag voor iedereen; die leg ik niet onderweg vast. - **"Begin bij dia 1 tenzij de gebruiker 'presenteer vanaf hier' koos."** Ook een keuze, en er is een reëel tegenargument: wie tijdens het maken op dia 12 werkt en op play drukt, wil vaak juist dáár beginnen. Dit vraagt om twee ingangen, en dat is ontwerpwerk. ## Poort `make check` groen (niet door `tail` gepijpt). USER_GUIDE, SOURCE_MAP en CHANGELOG bijgewerkt. Geen nieuwe zichtbare tekst — `Vorige`, `Volgende`, `Slide` en `Afsluiten (Escape)` bestonden al in alle 32 talen.
Volledig scherm, geen dianummer, geen pijlen, geen sluitknop, en nergens
stond dat Esc werkt. Wie voor het eerst presenteerde moest raden hoe hij
eruit kwam — voor een zaal, op het moment van de grootste spanning. Dat is
precies waar mensen teruggaan naar Keynote.

Beweeg de muis en er verschijnt drie seconden een smalle balk onderin:
waar je bent, een pijl elke kant op, en een sluitknop die Escape bij naam
noemt. Daarna verdwijnt hij vanzelf.

Verborgen tenzij je hem zoekt is hier geen zuinigheid maar het punt: een
projectiebeeld hoort geen permanente knoppen te dragen, want die staan
straks op elke foto van de zaal. Vandaar de tussenweg — zichtbaar op het
moment dat je hem nodig hebt (je pakt de muis) en weg zodra dat voorbij is.

De knoppen dragen hun naam via `IconButton(tooltip:)`, niet via een
Tooltip eromheen. Dat verschil is #586: het tweede geeft een schermlezer
geen naam, en het zou hier extra pijnlijk zijn geweest — dit ís de uitknop.

De test dekt alle drie de toestanden: onzichtbaar bij een stilstaande muis,
zichtbaar na muisbeweging, en weer weg na drie seconden. Die laatste is de
belangrijkste, want een balk die blijft staan is de fout die dit ontwerp
juist vermijdt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
De bedieningsbalk duwde `_FullscreenPresenterState` over zijn plafond.
Niet de basislijn verhoogd maar verplaatst: `AudienceSurface` is een
widget om het diabeeld heen die de muisbeweging opvangt, de klok bijhoudt
en de balk toont. De zichtbaarheid woont daar omdat dat het enige is wat
er te regelen valt en het nergens anders toe doet.

De presenter houdt alleen wat hij als enige weet: waar we zijn, of er een
volgende is, en hoe je stopt. De klasse zakt van 3510 naar 3412 regels en
de basislijn gaat mee omlaag.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
test(presenteren): 'geen sluitknop' klopt niet meer, 'niets te zien' wel
Some checks failed
CI / Gate (Linux) · Format · Analyze · Coverage (pull_request) Failing after 25s
CI / Web hardening (pull_request) Failing after 21s
CI / Docs links (pull_request) Failing after 27s
CI / Supply-chain (Trivy · advisory) (pull_request) Failing after 27s
CI / Gate (Linux) · Format · Analyze · Coverage (push) Failing after 27s
CI / Web hardening (push) Failing after 25s
CI / Docs links (push) Failing after 24s
CI / Supply-chain (Trivy · advisory) (push) Failing after 23s
CI / Test (macos-latest) (pull_request) Has been cancelled
CI / Test (windows-latest) (pull_request) Has been cancelled
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
b69b936a4c
`starts in audience view without presenter chrome` toetste dat er geen
sluitknop in de boom zat. Sinds de bedieningsbalk zit die er wél — alleen
volledig doorzichtig tot je de muis beweegt. Wat de test hoort te bewaken
is niet de afwezigheid van het widget maar de afwezigheid van iets
zichtbaars, en dat staat er nu.

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