zoom works better and more intuitive, but perhaps at some speed cost (zoom the image to be very large before clipping it is wasteful).  Also app seems to be slower in general to create the first window and display the first image.

There are some glitches with zooming that must be the fault of renderImage()
this works as expected but is super slow at high zooms, go back to clipZoom.
zoom is doing the right thing when the image is smaller than screen dimensions, now fix the clipping part.
The roi.x is being set wrong, but the clipping and offsets are right.
This is right for x, now do for y.