scenario: zoom out a couple of times pan until a tall node's bottom margin is visible position cursor near top of viewport within it hit up arrow a few times
Before this commit scrolling the node caused its bounding box to go out of alignment.
2N4JZKVTSJJJIXM2VVCU5INC4IGY7J6FF4JD3TAFK5THD2QWSQPQC
RDJRBEAYKVIC2BB4YXRAVM5LOTN2ULXF7VB2WYBS7NF45M5HCXNAC
LIWKX2BUGJ2S3JBILVBQ23FBBGKGOIWPILVZSFESSDSHAPYA5POQC
O6D22PJBXFE5XGW27UD7NDIMQYL4NXH4C4T2E73F2NXUSEB4W7QQC
DTBFNHJDOFMUXRAFVN3NYK2IJYH75EITUIPJIS3CNP7RS6OY5LVQC
JQ6BQZBLU3OUANQMZML2FWWIE4QI2GDLOYL6GJTXFKONQDQLKDMAC
BJ5X5O4ACBBJ56LRBBSTCW6IBQP4HAEOOOPNH3SKTA4F66YTOIDAC
3KHXY6NWG7UVRPTY4YA64WT76TWNI2OIJJHAZ7BXIJ2YBCPULWLQC
XRAQBRS4CZ6T6TSQLCMTS4OENCCGWYEBZ52RK42PV6NMMNZZPKUAC
BF7TW3EKRIDYC6J2Q2J4YOBAVQF55Y3H6KGZIHNXMH4N72MR6GXQC
Panning (test these at multiple zoom levels):
* When no node has cursor, arrow keys and pageup/pagedown pan surface around, preserving relative positions of nodes
* When a node has cursor in viewport, arrow keys move the cursor within the node, keeping cursor visible, panning surface if scrolling is needed
* Pageup/pagedown scroll a whole viewport height at a time if possible, but keep cursor visible if not possible.
* When a node has cursor, pageup/pagedown pan surface around
* Position a node with some of its area above (outside) viewport. Position cursor at topmost row on screen. Hit up arrow. Surface pans.
* Increase/decrease zoom, pan around using cursor inside node. The box for the editor surrounds the entire editor.
* Increase/decrease zoom, pan around using cursor outside node. The box for the editor surrounds the entire editor. (not perfect yet)
Panning:
* {Zoom > 1, Zoom = 1, Zoom < 1} x tall node extends {above, below, both} viewport x {up arrow, down arrow, pageup, pagedown, mouse drag}
- cursor remains within viewport
- relative positions of nodes preserved
- box and editor align