Paginaweergave bouwt het volledige document opnieuw op voor iedere pagina #1654
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1654
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Probleem
Voor elk berekend vel wordt opnieuw een complete DocumentMarkdownView in de widgetboom geplaatst en vervolgens alleen met clip/translate tot het paginavenster beperkt. Een document van N pagina's wordt daardoor ruwweg N keer volledig opgebouwd en gelayout, inclusief beelden en diagrammen. Kosten groeien ongeveer kwadratisch en dezelfde semantische inhoud kan meerdere keren in de toegankelijkheidsboom belanden.
Reproductie
Verwacht
Elk inhoudsblok wordt één keer gerenderd of per pagina daadwerkelijk gesegmenteerd, zonder volledige documentkopie per vel.
Technische aanwijzing
lib/widgets/reader/paged_document_view.dart:_pages maakt één DocumentMarkdownView-configuratie en geeft die aan iedere _sheet; elk gebruik krijgt een eigen Element en volledige layout.
Gevonden bij audit van commit
d439638c6b.Triage: accepted — maar niet de voorgestelde oplossing
Bevestigd tegen
main(e93ef205c)._pagesbouwt éénDocumentMarkdownView(lib/widgets/reader/paged_document_view.dart) en geeft dezelfde widget aan elke_sheet. Elk vel monteert hem opnieuw inClipRect→OverflowBox→Transform.translate. Eén widgetconfiguratie, N elementen, N volledige layouts van het hele document — inclusief beelden en diagrammen — plus dezelfde tekst N keer in de semantics-boom.Wat ik níét wil bouwen
De "Verwacht" van dit issue — per pagina echt segmenteren — wijs ik af. Dat het vel een venster is op één doorlopende stroom is juist de reden dat de paginaweergave hetzelfde breekt als de druk. Een tweede opmaakweg naast de doorlopende weergave laat scherm en papier stil uit elkaar lopen, en dat is precies wat deze stand hoort te voorkomen.
Oplossingsrichting
De kosten zitten niet in het ontwerp maar in het feit dat álle vellen tegelijk gemonteerd staan. Dus:
ListView.builderoveroffsets, zodat alleen de vellen rond het kijkvenster gebouwd en opgemaakt worden. De horizontale zoomrol eromheen blijft.RepaintBoundaryper vel.Semantics-label per vel enExcludeSemanticsop het documentvenster erbinnen, zodat dezelfde tekst niet N keer in de toegankelijkheidsboom staat.De meetboom blijft ongemoeid: die rendert het document precies één keer, en dat was al goed.
Aandachtspunt: de bestaande boom nest twee
SingleChildScrollViews met eenCenter/ConstrainedBoxertussen; de verticale wordt de builder en de breedteberekening (fit) moet daarbuiten blijven staan.Regressietest (verplicht)
test/paged_document_view_test.dart: lang document → het aantal gebouwde vellen (find.byKey(const Key('document-sheet'))) blijft begrensd ten opzichte van het aantal pagina's, en de semantics-boom bevat elke tekst één keer. Toets bij het gedocumenteerde maximum, niet bij drie pagina's (zieToets het gedocumenteerde maximum).Kosten
Eén bestand, maar de rolstructuur is het lastige deel. Halve dag tot een dag inclusief tests.
Prioriteit
Middel. Merkbaar vanaf enkele tientallen pagina's, en het raakt ook de toegankelijkheid.