From 3d7b7107d4c435fc8bc4add573c26b0203088825 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Wed, 16 Jan 2019 11:04:03 +0100 Subject: [PATCH] implement zoom shortcut with ctrl+rmb, update nanort with merged size_t pull request --- libs/nanort | 2 +- src/canvas_modes.cpp | 17 +++++++++++++---- src/canvas_modes.h | 2 ++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/libs/nanort b/libs/nanort index 4f0df84..44a4290 160000 --- a/libs/nanort +++ b/libs/nanort @@ -1 +1 @@ -Subproject commit 4f0df84625c5f8a03751157a17c624bbce80cd24 +Subproject commit 44a429067cab38617f0a716ffb80cc4e09547c49 diff --git a/src/canvas_modes.cpp b/src/canvas_modes.cpp index 7afc7d6..aca50ee 100644 --- a/src/canvas_modes.cpp +++ b/src/canvas_modes.cpp @@ -34,9 +34,11 @@ void CanvasModeBasicCamera::on_MouseEvent(MouseEvent* me, glm::vec2& loc) case kEventType::MouseDownR: if (App::I.keys[(int)kKey::KeyAlt]) break; + m_zooming = App::I.keys[(int)kKey::KeyCtrl]; m_draggingR = true; m_dragR_start = me->m_pos; m_pan_start = canvas->m_pan; + m_fov_start = canvas->m_cam_fov; node->mouse_capture(); break; case kEventType::MouseUpR: @@ -46,10 +48,17 @@ void CanvasModeBasicCamera::on_MouseEvent(MouseEvent* me, glm::vec2& loc) case kEventType::MouseMove: if (m_draggingR) { - auto dir = (App::I.has_vr && App::I.vr_active) ? glm::vec2(1, 1) : glm::vec2(-1, -1); - canvas->m_pan = m_pan_start + (me->m_pos - m_dragR_start) * dir * (canvas->m_cam_fov / 85.f); - auto angle = canvas->m_pan * 0.003f; - canvas->m_cam_rot = glm::eulerAngleXY(angle.y, angle.x); + if (m_zooming) + { + canvas->m_cam_fov = m_fov_start - (me->m_pos.x - m_dragR_start.x) * 0.05f; + } + else + { + auto dir = (App::I.has_vr && App::I.vr_active) ? glm::vec2(1, 1) : glm::vec2(-1, -1); + canvas->m_pan = m_pan_start + (me->m_pos - m_dragR_start) * dir * (canvas->m_cam_fov / 85.f); + auto angle = canvas->m_pan * 0.003f; + canvas->m_cam_rot = glm::eulerAngleXY(angle.y, angle.x); + } } break; case kEventType::MouseScroll: diff --git a/src/canvas_modes.h b/src/canvas_modes.h index f5077c9..c48bb89 100644 --- a/src/canvas_modes.h +++ b/src/canvas_modes.h @@ -38,8 +38,10 @@ class CanvasModeBasicCamera : public CanvasMode { bool m_draggingR = false; bool m_draggingT = false; // touch drag + bool m_zooming = false; glm::vec2 m_dragR_start; glm::vec2 m_pan_start; + float m_fov_start; float m_camera_fov; float m_zoom_canvas = 1.f; float m_zoom_start;