canvas: implement dragging and basic zooming