separate viewport logic to ViewportManager