It is not possible to precisely calculate actual window size before the rendering, so I added a safety margin.
It would be nicer to let the window autoscale and only use the inflated dimension for possible moving the window upward to prevent collision with the bottom panel, but...
ImGui autoscaling does not work properly for some reason (the window size autoscales only after a mouse move), so this is a workaround.
1) All camera related OpenGL calls moved into class
2) The Camera class now stores the view matrix, the projection matrix and the viewport
3) The Camera class now exposes methods to get the camera orientation vectors, the camera position, the view matrix, the projection matrix and the viewport
4) All the code operating on the camera or requiring camera data has been modified to use the new methods
Otherwise there is a possibility that the object gets out of bed when the gizmo is active (supports are generated with object close to the edge), which the gizmo does not expect