I implemented a new solution for zooming. It has two parts: a scaling relative to the canvas center, and a movement toward the mouse position. The latter is not ready yet.