summaryrefslogtreecommitdiffstats
path: root/Project/Camera.cpp
diff options
context:
space:
mode:
authorThales Lima Oliveira <thaleslima.ufu@gmail.com>2017-04-24 17:39:03 -0300
committerGitHub <noreply@github.com>2017-04-24 17:39:03 -0300
commit7804c1bd2c0bd2a5f135c30b20991e8187581cc6 (patch)
tree725e524253d6fd714460402194b408cb33b80b3f /Project/Camera.cpp
parent69131a727782090ffd7cb467f449e8f26d3d2949 (diff)
parent9529a6ed44645842adc6f938478acc1dfa17a284 (diff)
downloadPSP.git-7804c1bd2c0bd2a5f135c30b20991e8187581cc6.tar.gz
PSP.git-7804c1bd2c0bd2a5f135c30b20991e8187581cc6.tar.xz
PSP.git-7804c1bd2c0bd2a5f135c30b20991e8187581cc6.zip
Merge pull request #28 from Thales1330/wip/generic-controllers
Wip generic controllers. Chart view implementation required, creating new branch....
Diffstat (limited to 'Project/Camera.cpp')
-rw-r--r--Project/Camera.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/Project/Camera.cpp b/Project/Camera.cpp
new file mode 100644
index 0000000..248a835
--- /dev/null
+++ b/Project/Camera.cpp
@@ -0,0 +1,38 @@
+#include "Camera.h"
+
+Camera::Camera()
+{
+ m_translation = wxPoint2DDouble(0, 0);
+ m_scale = 1.0;
+}
+
+Camera::~Camera() {}
+wxPoint2DDouble Camera::ScreenToWorld(wxPoint2DDouble screenCoords) const
+{
+ return wxPoint2DDouble(
+ screenCoords.m_x / m_scale - m_translation.m_x, screenCoords.m_y / m_scale - m_translation.m_y);
+}
+
+void Camera::SetTranslation(wxPoint2DDouble screenPoint)
+{
+ m_translation = screenPoint / m_scale - m_translationStartPt;
+}
+
+void Camera::SetScale(wxPoint2DDouble screenPoint, double delta)
+{
+ m_translation -= screenPoint * (1.0 - m_scale) / m_scale;
+
+ m_scale += delta;
+
+ // Limits: 5% - 300%
+ if(m_scale < m_zoomMin) m_scale = m_zoomMin;
+ if(m_scale > m_zoomMax) m_scale = m_zoomMax;
+
+ m_translation += screenPoint * (1.0 - m_scale) / m_scale;
+}
+
+wxPoint2DDouble Camera::GetMousePosition(bool worldCoords) const
+{
+ if(worldCoords) return ScreenToWorld(m_mousePosition);
+ return m_mousePosition;
+} \ No newline at end of file