void mouse_callback(GLFWwindow* window, double xpos, double ypos) { int state = glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT); if (state == GLFW_PRESS) { processMouseMovement(xpos, ypos); } mousePosX = xpos; mousePosY = ypos; }
void TrackballCamera::handleEvent(Event *event) { if(event->getDispatcher() == trackballShape) { InputEvent *inputEvent = (InputEvent*) event; switch(event->getEventCode()) { case InputEvent::EVENT_MOUSEDOWN: if(isNavKeyDown() || inputEvent->mouseButton == CoreInput::MOUSE_BUTTON3) { if(coreInput->getKeyState(KEY_LSHIFT) || coreInput->getKeyState(KEY_RSHIFT)) { mouseMode = MOUSE_MODE_PANNING; trackBallMouseStart = Vector2( inputEvent->getMousePosition().x / trackballShape->getWidth(), inputEvent->getMousePosition().y / trackballShape->getHeight() ); trackBallMouseEnd = trackBallMouseStart; } else if(coreInput->getKeyState(KEY_LCTRL) || coreInput->getKeyState(KEY_RCTRL)) { mouseMode = MOUSE_MODE_ZOOMING; trackBallMouseStart = Vector2( inputEvent->getMousePosition().x / trackballShape->getWidth(), inputEvent->getMousePosition().y / trackballShape->getHeight() ); trackBallMouseEnd = trackBallMouseStart; } else { if(!rotationDisabled) { mouseMode = MOUSE_MODE_ORBITING; trackBallMouseStart = trackBallMouseEnd = Vector2( inputEvent->getMousePosition().x / trackballShape->getWidth(), inputEvent->getMousePosition().y / trackballShape->getHeight() ); } } } break; case InputEvent::EVENT_MOUSEUP: case InputEvent::EVENT_MOUSEUP_OUTSIDE: mouseMode = MOUSE_MODE_IDLE; break; case InputEvent::EVENT_MOUSEMOVE: processMouseMovement(inputEvent->getMousePosition()); break; case InputEvent::EVENT_MOUSEWHEEL_UP: cameraDistance *= 0.9; updateCamera(); break; case InputEvent::EVENT_MOUSEWHEEL_DOWN: cameraDistance *= 1.1; updateCamera(); break; } return; } }