Paginaweergave kan een lange voetnoot onderaan de pagina afknippen #1655
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#1655
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
Een voetnoot die onderaan hetzelfde vel moet staan wordt als één los, onderaan gepositioneerd blok behandeld. Als die noot plus tussenruimte hoger is dan de beschikbare pagina, kan zij niet over pagina's worden verdeeld en raakt zij buiten het vel afgeknipt/overlapt zij de hoofdtekst.
Reproductie
Verwacht
Een te lange noot wordt veilig doorgeschoven of over pagina's verdeeld, zonder clipping of overlap.
Technische aanwijzing
lib/widgets/reader/paged_document_view.dart reserveert de volledige noothoogte bij één verwijzend blok en tekent de noot afzonderlijk onderaan één _sheet.
Gevonden bij audit van commit
d439638c6b.Triage: accepted
Bevestigd tegen
main(e93ef205c). De noot eist ruimte op bij het blok dat ernaar verwijst (_reservedRoom,lib/widgets/reader/paged_document_view.dart) en wordt daarna als éénPositioned(bottom: …)in de vel-Stackgetekend. Die stack heeft de vaste velhoogte; een noot die hoger is dan het tekstvlak groeit naar boven weg en wordt afgeknipt of legt zich over de tekst heen.documentPageOffsetsvangt dit niet af: de takheight + reservedFor(index) > pageHeight(lib/services/document_pagination.dart) verdeelt het verwijzende blok over meerdere vensters, maar de noot zelf blijft één ondeelbaar ding op één vel.Oplossingsrichting
Begrens wat een noot onderaan een vel mag opeisen. Is
noothoogte + _noteGapPxgroter dan het beschikbare tekstvlak, dan hoort die noot niet onderaan de bladzijde maar in de stroom — dat is de eindnotenweg, en die verdeelt zich al netjes over vellen. Concreet: in_notesPerPage/_reservedRoomde noten die niet passen apart houden, ze niet reserveren en niet onderaan tekenen, en ze als gewoon blok laten meelopen. Het merkteken en het nummer blijven staan, dus de lezer raakt de noot niet kwijt.Tweede keus als dat te veel schuift: de noot laten afbreken over opeenvolgende vellen. Dat vraagt een noot-in-stukken-model en is een aanzienlijk grotere ingreep — niet nu.
Regressietest (verplicht)
test/paged_document_view_test.dart:footnotePlacement=pagemet één noot van ruim een paginahoogte → geen afknipping (de getekende noot past binnen het vel op elk vel) en de noottekst is in de boom aanwezig.Kosten
Eén bestand, plus test. De lastige kant is dat noothoogtes pas ná de meetronde bekend zijn; de beslissing hoort dus in
_onMeasured/_pages, niet in_measure.Prioriteit
Middel: zeldzaam, maar de uitkomst is onleesbare of verdwenen tekst.