optimization : start of double buffer (second canvas)
double buffering optimization : it works but I still have to refresh the buffer canvas and deal with the zoom when I copy the buffer into the main canvas