mirror of
https://github.com/glfw/glfw.git
synced 2024-11-22 13:04:35 +00:00
Changed cursor pos to double.
This commit is contained in:
parent
4c0e946da3
commit
129e94da2e
@ -308,6 +308,7 @@ GLFW.
|
|||||||
* Changed `glfwGetProcAddress` to return a (generic) function pointer
|
* Changed `glfwGetProcAddress` to return a (generic) function pointer
|
||||||
* Changed `glfwGetVideoModes` to return a dynamic, unlimited number of video
|
* Changed `glfwGetVideoModes` to return a dynamic, unlimited number of video
|
||||||
modes for the specified monitor
|
modes for the specified monitor
|
||||||
|
* Changed cursor position to double-precision floating-point
|
||||||
* Renamed `glfw.h` to `glfw3.h` to avoid conflicts with 2.x series
|
* Renamed `glfw.h` to `glfw3.h` to avoid conflicts with 2.x series
|
||||||
* Renamed `glfwOpenWindowHint` to `glfwWindowHint`
|
* Renamed `glfwOpenWindowHint` to `glfwWindowHint`
|
||||||
* Renamed `GLFW_ACTIVE` to `GLFW_FOCUSED`
|
* Renamed `GLFW_ACTIVE` to `GLFW_FOCUSED`
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
//========================================================================
|
//========================================================================
|
||||||
|
|
||||||
// Mouse position
|
// Mouse position
|
||||||
static int xpos = 0, ypos = 0;
|
static double xpos = 0, ypos = 0;
|
||||||
|
|
||||||
// Window size
|
// Window size
|
||||||
static int width, height;
|
static int width, height;
|
||||||
@ -379,24 +379,24 @@ static void windowRefreshFun(GLFWwindow* window)
|
|||||||
// Mouse position callback function
|
// Mouse position callback function
|
||||||
//========================================================================
|
//========================================================================
|
||||||
|
|
||||||
static void cursorPosFun(GLFWwindow* window, int x, int y)
|
static void cursorPosFun(GLFWwindow* window, double x, double y)
|
||||||
{
|
{
|
||||||
// Depending on which view was selected, rotate around different axes
|
// Depending on which view was selected, rotate around different axes
|
||||||
switch (active_view)
|
switch (active_view)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
rot_x += y - ypos;
|
rot_x += (int) y - ypos;
|
||||||
rot_z += x - xpos;
|
rot_z += (int) x - xpos;
|
||||||
do_redraw = 1;
|
do_redraw = 1;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
rot_x += y - ypos;
|
rot_x += (int) y - ypos;
|
||||||
rot_y += x - xpos;
|
rot_y += (int) x - xpos;
|
||||||
do_redraw = 1;
|
do_redraw = 1;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
rot_y += x - xpos;
|
rot_y += (int) x - xpos;
|
||||||
rot_z += y - ypos;
|
rot_z += (int) y - ypos;
|
||||||
do_redraw = 1;
|
do_redraw = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -335,7 +335,7 @@ void mouse_button_callback(GLFWwindow* window, int button, int action)
|
|||||||
// Callback function for cursor motion events
|
// Callback function for cursor motion events
|
||||||
//========================================================================
|
//========================================================================
|
||||||
|
|
||||||
void cursor_position_callback(GLFWwindow* window, int x, int y)
|
void cursor_position_callback(GLFWwindow* window, double x, double y)
|
||||||
{
|
{
|
||||||
if (locked)
|
if (locked)
|
||||||
{
|
{
|
||||||
|
@ -641,7 +641,7 @@ typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int);
|
|||||||
*
|
*
|
||||||
* @sa glfwSetCursorPosCallback
|
* @sa glfwSetCursorPosCallback
|
||||||
*/
|
*/
|
||||||
typedef void (* GLFWcursorposfun)(GLFWwindow*,int,int);
|
typedef void (* GLFWcursorposfun)(GLFWwindow*,double,double);
|
||||||
|
|
||||||
/*! @brief The function signature for cursor enter/exit callbacks.
|
/*! @brief The function signature for cursor enter/exit callbacks.
|
||||||
* @param[in] window The window that received the event.
|
* @param[in] window The window that received the event.
|
||||||
@ -1730,7 +1730,7 @@ GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button);
|
|||||||
*
|
*
|
||||||
* @ingroup input
|
* @ingroup input
|
||||||
*/
|
*/
|
||||||
GLFWAPI void glfwGetCursorPos(GLFWwindow* window, int* xpos, int* ypos);
|
GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos);
|
||||||
|
|
||||||
/*! @brief Sets the position of the cursor, relative to the client area of the window.
|
/*! @brief Sets the position of the cursor, relative to the client area of the window.
|
||||||
*
|
*
|
||||||
@ -1748,7 +1748,7 @@ GLFWAPI void glfwGetCursorPos(GLFWwindow* window, int* xpos, int* ypos);
|
|||||||
*
|
*
|
||||||
* @ingroup input
|
* @ingroup input
|
||||||
*/
|
*/
|
||||||
GLFWAPI void glfwSetCursorPos(GLFWwindow* window, int xpos, int ypos);
|
GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos);
|
||||||
|
|
||||||
/*! @brief Sets the key callback.
|
/*! @brief Sets the key callback.
|
||||||
*
|
*
|
||||||
|
@ -365,11 +365,7 @@ static int convertMacKeyCode(unsigned int macKeyCode)
|
|||||||
[window->ns.object contentRectForFrameRect:[window->ns.object frame]];
|
[window->ns.object contentRectForFrameRect:[window->ns.object frame]];
|
||||||
const NSPoint p = [event locationInWindow];
|
const NSPoint p = [event locationInWindow];
|
||||||
|
|
||||||
// Cocoa coordinate system has origin at lower left
|
_glfwInputCursorMotion(window, p.x, contentRect.size.height - p.y);
|
||||||
const int x = lround(floor(p.x));
|
|
||||||
const int y = contentRect.size.height - lround(ceil(p.y));
|
|
||||||
|
|
||||||
_glfwInputCursorMotion(window, x, y);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
15
src/input.c
15
src/input.c
@ -38,7 +38,8 @@
|
|||||||
//
|
//
|
||||||
static void setCursorMode(_GLFWwindow* window, int newMode)
|
static void setCursorMode(_GLFWwindow* window, int newMode)
|
||||||
{
|
{
|
||||||
int width, height, oldMode, centerPosX, centerPosY;
|
int width, height, oldMode;
|
||||||
|
double centerPosX, centerPosY;
|
||||||
|
|
||||||
if (newMode != GLFW_CURSOR_NORMAL &&
|
if (newMode != GLFW_CURSOR_NORMAL &&
|
||||||
newMode != GLFW_CURSOR_HIDDEN &&
|
newMode != GLFW_CURSOR_HIDDEN &&
|
||||||
@ -54,8 +55,8 @@ static void setCursorMode(_GLFWwindow* window, int newMode)
|
|||||||
|
|
||||||
_glfwPlatformGetWindowSize(window, &width, &height);
|
_glfwPlatformGetWindowSize(window, &width, &height);
|
||||||
|
|
||||||
centerPosX = width / 2;
|
centerPosX = width / 2.0;
|
||||||
centerPosY = height / 2;
|
centerPosY = height / 2.0;
|
||||||
|
|
||||||
if (oldMode == GLFW_CURSOR_CAPTURED || newMode == GLFW_CURSOR_CAPTURED)
|
if (oldMode == GLFW_CURSOR_CAPTURED || newMode == GLFW_CURSOR_CAPTURED)
|
||||||
_glfwPlatformSetCursorPos(window, centerPosX, centerPosY);
|
_glfwPlatformSetCursorPos(window, centerPosX, centerPosY);
|
||||||
@ -171,11 +172,11 @@ void _glfwInputMouseClick(_GLFWwindow* window, int button, int action)
|
|||||||
window->callbacks.mouseButton((GLFWwindow*) window, button, action);
|
window->callbacks.mouseButton((GLFWwindow*) window, button, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _glfwInputCursorMotion(_GLFWwindow* window, int x, int y)
|
void _glfwInputCursorMotion(_GLFWwindow* window, double x, double y)
|
||||||
{
|
{
|
||||||
if (window->cursorMode == GLFW_CURSOR_CAPTURED)
|
if (window->cursorMode == GLFW_CURSOR_CAPTURED)
|
||||||
{
|
{
|
||||||
if (!x && !y)
|
if (x == 0.0 && y == 0.0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
window->cursorPosX += x;
|
window->cursorPosX += x;
|
||||||
@ -297,7 +298,7 @@ GLFWAPI int glfwGetMouseButton(GLFWwindow* handle, int button)
|
|||||||
return (int) window->mouseButton[button];
|
return (int) window->mouseButton[button];
|
||||||
}
|
}
|
||||||
|
|
||||||
GLFWAPI void glfwGetCursorPos(GLFWwindow* handle, int* xpos, int* ypos)
|
GLFWAPI void glfwGetCursorPos(GLFWwindow* handle, double* xpos, double* ypos)
|
||||||
{
|
{
|
||||||
_GLFWwindow* window = (_GLFWwindow*) handle;
|
_GLFWwindow* window = (_GLFWwindow*) handle;
|
||||||
|
|
||||||
@ -310,7 +311,7 @@ GLFWAPI void glfwGetCursorPos(GLFWwindow* handle, int* xpos, int* ypos)
|
|||||||
*ypos = window->cursorPosY;
|
*ypos = window->cursorPosY;
|
||||||
}
|
}
|
||||||
|
|
||||||
GLFWAPI void glfwSetCursorPos(GLFWwindow* handle, int xpos, int ypos)
|
GLFWAPI void glfwSetCursorPos(GLFWwindow* handle, double xpos, double ypos)
|
||||||
{
|
{
|
||||||
_GLFWwindow* window = (_GLFWwindow*) handle;
|
_GLFWwindow* window = (_GLFWwindow*) handle;
|
||||||
|
|
||||||
|
@ -225,7 +225,7 @@ struct _GLFWwindow
|
|||||||
// Window input state
|
// Window input state
|
||||||
GLboolean stickyKeys;
|
GLboolean stickyKeys;
|
||||||
GLboolean stickyMouseButtons;
|
GLboolean stickyMouseButtons;
|
||||||
int cursorPosX, cursorPosY;
|
double cursorPosX, cursorPosY;
|
||||||
int cursorMode;
|
int cursorMode;
|
||||||
char mouseButton[GLFW_MOUSE_BUTTON_LAST + 1];
|
char mouseButton[GLFW_MOUSE_BUTTON_LAST + 1];
|
||||||
char key[GLFW_KEY_LAST + 1];
|
char key[GLFW_KEY_LAST + 1];
|
||||||
@ -344,7 +344,7 @@ const char* _glfwPlatformGetVersionString(void);
|
|||||||
/*! @copydoc glfwSetCursorPos
|
/*! @copydoc glfwSetCursorPos
|
||||||
* @ingroup platform
|
* @ingroup platform
|
||||||
*/
|
*/
|
||||||
void _glfwPlatformSetCursorPos(_GLFWwindow* window, int xpos, int ypos);
|
void _glfwPlatformSetCursorPos(_GLFWwindow* window, double xpos, double ypos);
|
||||||
|
|
||||||
/*! @brief Sets up the specified cursor mode for the specified window.
|
/*! @brief Sets up the specified cursor mode for the specified window.
|
||||||
* @param[in] window The window whose cursor mode to change.
|
* @param[in] window The window whose cursor mode to change.
|
||||||
@ -614,7 +614,7 @@ void _glfwInputMouseClick(_GLFWwindow* window, int button, int action);
|
|||||||
* of the client area of the window.
|
* of the client area of the window.
|
||||||
* @ingroup event
|
* @ingroup event
|
||||||
*/
|
*/
|
||||||
void _glfwInputCursorMotion(_GLFWwindow* window, int x, int y);
|
void _glfwInputCursorMotion(_GLFWwindow* window, double x, double y);
|
||||||
|
|
||||||
/*! @brief Notifies shared code of a cursor enter/leave event.
|
/*! @brief Notifies shared code of a cursor enter/leave event.
|
||||||
* @param[in] window The window that received the event.
|
* @param[in] window The window that received the event.
|
||||||
|
@ -1049,9 +1049,9 @@ void _glfwPlatformWaitEvents(void)
|
|||||||
_glfwPlatformPollEvents();
|
_glfwPlatformPollEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _glfwPlatformSetCursorPos(_GLFWwindow* window, int xpos, int ypos)
|
void _glfwPlatformSetCursorPos(_GLFWwindow* window, double xpos, double ypos)
|
||||||
{
|
{
|
||||||
POINT pos = { xpos, ypos };
|
POINT pos = { (int) xpos, (int) ypos };
|
||||||
ClientToScreen(window->win32.handle, &pos);
|
ClientToScreen(window->win32.handle, &pos);
|
||||||
SetCursorPos(pos.x, pos.y);
|
SetCursorPos(pos.x, pos.y);
|
||||||
}
|
}
|
||||||
|
@ -1004,13 +1004,14 @@ void _glfwPlatformWaitEvents(void)
|
|||||||
_glfwPlatformPollEvents();
|
_glfwPlatformPollEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _glfwPlatformSetCursorPos(_GLFWwindow* window, int x, int y)
|
void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y)
|
||||||
{
|
{
|
||||||
// Store the new position so it can be recognized later
|
// Store the new position so it can be recognized later
|
||||||
window->x11.cursorPosX = x;
|
window->x11.cursorPosX = x;
|
||||||
window->x11.cursorPosY = y;
|
window->x11.cursorPosY = y;
|
||||||
|
|
||||||
XWarpPointer(_glfw.x11.display, None, window->x11.handle, 0,0,0,0, x, y);
|
XWarpPointer(_glfw.x11.display, None, window->x11.handle,
|
||||||
|
0,0,0,0, (int) x, (int) y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode)
|
void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode)
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
static int cursor_x = 0, cursor_y = 0;
|
static double cursor_x = 0.0, cursor_y = 0.0;
|
||||||
static int window_width = 640, window_height = 480;
|
static int window_width = 640, window_height = 480;
|
||||||
static int swap_interval = 1;
|
static int swap_interval = 1;
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ static void window_size_callback(GLFWwindow* window, int width, int height)
|
|||||||
gluOrtho2D(0.f, window_width, 0.f, window_height);
|
gluOrtho2D(0.f, window_width, 0.f, window_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cursor_position_callback(GLFWwindow* window, int x, int y)
|
static void cursor_position_callback(GLFWwindow* window, double x, double y)
|
||||||
{
|
{
|
||||||
cursor_x = x;
|
cursor_x = x;
|
||||||
cursor_y = y;
|
cursor_y = y;
|
||||||
|
@ -290,9 +290,9 @@ static void mouse_button_callback(GLFWwindow* window, int button, int action)
|
|||||||
printf(" was %s\n", get_action_name(action));
|
printf(" was %s\n", get_action_name(action));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cursor_position_callback(GLFWwindow* window, int x, int y)
|
static void cursor_position_callback(GLFWwindow* window, double x, double y)
|
||||||
{
|
{
|
||||||
printf("%08x at %0.3f: Cursor position: %i %i\n", counter++, glfwGetTime(), x, y);
|
printf("%08x at %0.3f: Cursor position: %f %f\n", counter++, glfwGetTime(), x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cursor_enter_callback(GLFWwindow* window, int entered)
|
static void cursor_enter_callback(GLFWwindow* window, int entered)
|
||||||
|
@ -36,8 +36,8 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
static GLboolean reopen = GL_FALSE;
|
static GLboolean reopen = GL_FALSE;
|
||||||
static int cursor_x;
|
static double cursor_x;
|
||||||
static int cursor_y;
|
static double cursor_y;
|
||||||
|
|
||||||
static void toggle_cursor(GLFWwindow* window)
|
static void toggle_cursor(GLFWwindow* window)
|
||||||
{
|
{
|
||||||
@ -58,9 +58,9 @@ static void error_callback(int error, const char* description)
|
|||||||
fprintf(stderr, "Error: %s\n", description);
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cursor_position_callback(GLFWwindow* window, int x, int y)
|
static void cursor_position_callback(GLFWwindow* window, double x, double y)
|
||||||
{
|
{
|
||||||
printf("Cursor moved to: %i %i (%i %i)\n", x, y, x - cursor_x, y - cursor_y);
|
printf("Cursor moved to: %f %f (%f %f)\n", x, y, x - cursor_x, y - cursor_y);
|
||||||
cursor_x = x;
|
cursor_x = x;
|
||||||
cursor_y = y;
|
cursor_y = y;
|
||||||
}
|
}
|
||||||
@ -102,7 +102,7 @@ static GLFWwindow* open_window(void)
|
|||||||
glfwSwapInterval(1);
|
glfwSwapInterval(1);
|
||||||
|
|
||||||
glfwGetCursorPos(window, &cursor_x, &cursor_y);
|
glfwGetCursorPos(window, &cursor_x, &cursor_y);
|
||||||
printf("Cursor position: %i %i\n", cursor_x, cursor_y);
|
printf("Cursor position: %f %f\n", cursor_x, cursor_y);
|
||||||
|
|
||||||
glfwSetWindowSizeCallback(window, window_size_callback);
|
glfwSetWindowSizeCallback(window, window_size_callback);
|
||||||
glfwSetCursorPosCallback(window, cursor_position_callback);
|
glfwSetCursorPosCallback(window, cursor_position_callback);
|
||||||
|
Loading…
Reference in New Issue
Block a user