Override the LETTERBOX logical presentation while the scroller is
active so it renders into the full physical window. On a 1920x6480
rotated display the scroller now scrolls through all 6480 pixels of
vertical space instead of being confined to the 1920x1080 letterbox
region. Text scale is unchanged (same font size, same pixel
rasterization); more lines are simply visible at once.
- onPush: save current logical presentation, switch to DISABLED with
real window dimensions
- onPop: restore the saved LETTERBOX presentation
- resize handler in main.cpp: skip re-apply while scroller is active
(it owns its own presentation and restores on pop)
The scroller recycled at most one line per frame while movement was
continuous (velocity * dt), so whenever a frame's displacement exceeded
one line height the text block drifted toward the boundary and the
screen drained with nothing replacing it. This surfaced on slower
hardware / 60Hz panels (|move| > lineHeight) but not on fast machines.
Recycle in a loop until every line that scrolled fully off-screen has a
replacement, for both scroll directions. addLineAt() now returns whether
a line was produced so the loop stops cleanly instead of losing lines.