refactor CanvasView