bool CameraTool2D::doStartMouseDrag(const InputState& inputState) { if (pan(inputState)) { m_lastMousePos = Vec2f(static_cast<float>(inputState.mouseX()), static_cast<float>(inputState.mouseY())); return true; } return false; }
bool CameraTool2D::doMouseDrag(const InputState& inputState) { if (pan(inputState)) { const Vec2f currentMousePos(static_cast<float>(inputState.mouseX()), static_cast<float>(inputState.mouseY())); const Vec3f lastWorldPos = m_camera.unproject(m_lastMousePos.x(), m_lastMousePos.y(), 0.0f); const Vec3f currentWorldPos = m_camera.unproject(currentMousePos.x(), currentMousePos.y(), 0.0f); const Vec3f delta = currentWorldPos - lastWorldPos; m_camera.moveBy(-delta); m_lastMousePos = currentMousePos; return true; } return false; }
void CameraTool2D::doMouseScroll(const InputState& inputState) { if (zoom(inputState)) { const float speed = pref(Preferences::CameraMouseWheelInvert) ? -1.0f : 1.0f; if (inputState.scrollY() != 0.0f) { const Vec2f mousePos(static_cast<float>(inputState.mouseX()), static_cast<float>(inputState.mouseY())); const Vec3f oldWorldPos = m_camera.unproject(mousePos.x(), mousePos.y(), 0.0f); const float factor = 1.0f + inputState.scrollY() / 50.0f * speed; m_camera.zoom(factor); const Vec3f newWorldPos = m_camera.unproject(mousePos.x(), mousePos.y(), 0.0f); const Vec3f delta = newWorldPos - oldWorldPos; m_camera.moveBy(-delta); } } }