Movement fixes

Pause on collisions (zero-length lines cause problems for the arrows),
guarantee that we can’t go outside canvas boundaries