Using JS's `getComputedStyle()` for every character is too CPU
intensive, so instead I'm experimenting with using a custom font
to take the canvas snapshot. The font is made up of only the unicode
block character, which basically fills the entire space given to a
monospace glyph. This also means that we can fairly reliably work out
the visibility (whether it's obscured or hidden with CSS) of text.
This proves that frames can be generated on Firefox using the canvas and
a Tree Walker to examine text nodes. Already with little optimisation
frames don't ever take longer than 200ms to render.
Chrome has a MediaStream of the viewport, hopefully that will prove
performant as well.
This doesn't have functioning text colour detection or text occlusion
support. But early research suggests this will possible by comparing 2
screenshots: one with and the other without rendered text.
The big problem with XFCE's zoom was that it follwed the mouse. So there was no way
to have the terminal representation of the desktop map to a smaller segment of the
real desktop without the terminal mouse position being able to exactly 'hover' over
the real mouse position.
The xzoom program is a window that displays a zoom of a portion of the desktop. So
double the width of the desktop and place the xzoom window on the right, but have
it watch only the half of the desktop on the left. What's more xzoom is small and
it's C code is easily incuded in the Golang code so they act as one, even sharing
state such as mouse coords, viewport position, current zoom level, etc.
WIP. Still contains old XFCE zoom code.