static void setCursorMode(_GLFWwindow* window, int mode) { int centerPosX, centerPosY; if (mode != GLFW_CURSOR_NORMAL && mode != GLFW_CURSOR_HIDDEN && mode != GLFW_CURSOR_CAPTURED) { _glfwSetError(GLFW_INVALID_ENUM, NULL); return; } if (window->cursorMode == mode) return; centerPosX = window->width / 2; centerPosY = window->height / 2; if (mode == GLFW_CURSOR_CAPTURED) _glfwPlatformSetMouseCursorPos(window, centerPosX, centerPosY); else if (window->cursorMode == GLFW_CURSOR_CAPTURED) { _glfwPlatformSetMouseCursorPos(window, centerPosX, centerPosY); _glfwInputCursorMotion(window, centerPosX - window->cursorPosX, centerPosY - window->cursorPosY); } _glfwPlatformSetCursorMode(window, mode); window->cursorMode = mode; }
static void enableMouseCursor( void ) { int centerPosX, centerPosY; if( !_glfwWin.opened || !_glfwWin.mouseLock ) { return; } // Show mouse cursor _glfwPlatformShowMouseCursor(); centerPosX = _glfwWin.width / 2; centerPosY = _glfwWin.height / 2; if( centerPosX != _glfwInput.MousePosX || centerPosY != _glfwInput.MousePosY ) { _glfwPlatformSetMouseCursorPos( centerPosX, centerPosY ); _glfwInput.MousePosX = centerPosX; _glfwInput.MousePosY = centerPosY; if( _glfwWin.mousePosCallback ) { _glfwWin.mousePosCallback( _glfwInput.MousePosX, _glfwInput.MousePosY ); } } // From now on the mouse is unlocked _glfwWin.mouseLock = GL_FALSE; }
GLFWAPI void glfwSetMousePos(GLFWwindow handle, int xpos, int ypos) { _GLFWwindow* window = (_GLFWwindow*) handle; if (!_glfwInitialized) { _glfwSetError(GLFW_NOT_INITIALIZED, NULL); return; } if (_glfwLibrary.activeWindow != window) { _glfwSetError(GLFW_WINDOW_NOT_ACTIVE, NULL); return; } // Don't do anything if the mouse position did not change if (xpos == window->cursorPosX && ypos == window->cursorPosY) return; // Set GLFW mouse position window->cursorPosX = xpos; window->cursorPosY = ypos; // Do not move physical cursor in locked cursor mode if (window->cursorMode == GLFW_CURSOR_CAPTURED) return; // Update physical cursor position _glfwPlatformSetMouseCursorPos(window, xpos, ypos); }
GLFWAPI void GLFWAPIENTRY glfwSetMousePos( int xpos, int ypos ) { if( !_glfwInitialized || !_glfwWin.opened ) { return; } // Don't do anything if the mouse position did not change if( xpos == _glfwInput.MousePosX && ypos == _glfwInput.MousePosY ) { return; } // Set GLFW mouse position _glfwInput.MousePosX = xpos; _glfwInput.MousePosY = ypos; // If we have a locked mouse, do not change cursor position if( _glfwWin.mouseLock ) { return; } // Update physical cursor position _glfwPlatformSetMouseCursorPos( xpos, ypos ); }
static void enableMouseCursor( void ) { int centerPosX, centerPosY; if( !_glfwWin.opened || !_glfwWin.mouseLock ) { return; } // Show mouse cursor _glfwPlatformShowMouseCursor(); centerPosX = _glfwWin.width / 2; centerPosY = _glfwWin.height / 2; if( centerPosX != _glfwInput.MousePosX || centerPosY != _glfwInput.MousePosY ) { _glfwPlatformSetMouseCursorPos( centerPosX, centerPosY ); _glfwInput.MousePosX = centerPosX; _glfwInput.MousePosY = centerPosY; if( _glfwWin.mousePosCallback ) { #ifdef MMDAGENT _glfwWin.mousePosCallback( _glfwInput.MousePosX, _glfwInput.MousePosY, ( _glfwInput.Key[GLFW_KEY_LSHIFT] == GLFW_PRESS || _glfwInput.Key[GLFW_KEY_RSHIFT] == GLFW_PRESS ) ? GLFW_PRESS : GLFW_RELEASE, ( _glfwInput.Key[GLFW_KEY_LCTRL] == GLFW_PRESS || _glfwInput.Key[GLFW_KEY_RCTRL] == GLFW_PRESS ) ? GLFW_PRESS : GLFW_RELEASE ); #else _glfwWin.mousePosCallback( _glfwInput.MousePosX, _glfwInput.MousePosY ); #endif /* MMDAGENT */ } } // From now on the mouse is unlocked _glfwWin.mouseLock = GL_FALSE; }