Second attempt to do surface caching to avoid full redraw for scrolling in small steps.