morphic: only call onCanvasChanged() when canvas extent actually changed