scrolling with zoom
heavy refactoring