| 348 | } |
| 349 | |
| 350 | void GLFWOSPRayWindow::motion(const vec2f &position) |
| 351 | { |
| 352 | const vec2f mouse(position.x, position.y); |
| 353 | if (previousMouse != vec2f(-1)) { |
| 354 | const bool leftDown = |
| 355 | glfwGetMouseButton(glfwWindow, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS; |
| 356 | const bool rightDown = |
| 357 | glfwGetMouseButton(glfwWindow, GLFW_MOUSE_BUTTON_RIGHT) == GLFW_PRESS; |
| 358 | const bool middleDown = |
| 359 | glfwGetMouseButton(glfwWindow, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS; |
| 360 | const vec2f prev = previousMouse; |
| 361 | |
| 362 | bool cameraChanged = leftDown || rightDown || middleDown; |
| 363 | |
| 364 | if (leftDown) { |
| 365 | const vec2f mouseFrom(clamp(prev.x * 2.f / windowSize.x - 1.f, -1.f, 1.f), |
| 366 | clamp(prev.y * 2.f / windowSize.y - 1.f, -1.f, 1.f)); |
| 367 | const vec2f mouseTo(clamp(mouse.x * 2.f / windowSize.x - 1.f, -1.f, 1.f), |
| 368 | clamp(mouse.y * 2.f / windowSize.y - 1.f, -1.f, 1.f)); |
| 369 | arcballCamera->rotate(mouseFrom, mouseTo); |
| 370 | } else if (rightDown) { |
| 371 | arcballCamera->zoom(mouse.y - prev.y); |
| 372 | } else if (middleDown) { |
| 373 | arcballCamera->pan(vec2f(mouse.x - prev.x, prev.y - mouse.y)); |
| 374 | } |
| 375 | |
| 376 | if (cameraChanged) { |
| 377 | if (cancelFrameOnInteraction) { |
| 378 | currentFrame.cancel(); |
| 379 | waitOnOSPRayFrame(); |
| 380 | } |
| 381 | updateCamera(); |
| 382 | } |
| 383 | } |
| 384 | |
| 385 | previousMouse = mouse; |
| 386 | } |
| 387 | |
| 388 | void GLFWOSPRayWindow::display() |
| 389 | { |
no test coverage detected