Implemented rotation and zooming

Having done this, it has become clear that horizontal and vertical
offsets are going to be really useful.