SDL_WarpMouseGlobal() should return non-void.
There are platforms it isn't implemented on (and currently can't be implemented on!), and there's currently no way for an app to know this. This shouldn't break ABI on apps that moved to a revision between 2.0.3 and 2.0.4. --HG-- extra : rebase_source : 289ffe9b7b92eb812f3d1421c52a561d0d37b717
This commit is contained in:
parent
b032dd985f
commit
0a790ca20c
10 changed files with 25 additions and 15 deletions
|
@ -137,10 +137,11 @@ extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window,
|
||||||
*
|
*
|
||||||
* \param x The x coordinate
|
* \param x The x coordinate
|
||||||
* \param y The y coordinate
|
* \param y The y coordinate
|
||||||
|
* \return 0 on success, -1 on error (usually: unsupported by a platform).
|
||||||
*
|
*
|
||||||
* \note This function generates a mouse motion event
|
* \note This function generates a mouse motion event
|
||||||
*/
|
*/
|
||||||
extern DECLSPEC void SDLCALL SDL_WarpMouseGlobal(int x, int y);
|
extern DECLSPEC int SDLCALL SDL_WarpMouseGlobal(int x, int y);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Set relative mouse mode.
|
* \brief Set relative mouse mode.
|
||||||
|
|
|
@ -612,7 +612,7 @@ SDL_DYNAPI_PROC(int,SDL_WinRTRunApp,(int a, char **b, void *c),(a,b,c),return)
|
||||||
SDL_DYNAPI_PROC(const wchar_t*,SDL_WinRTGetFSPathUNICODE,(SDL_WinRT_Path a),(a),return)
|
SDL_DYNAPI_PROC(const wchar_t*,SDL_WinRTGetFSPathUNICODE,(SDL_WinRT_Path a),(a),return)
|
||||||
SDL_DYNAPI_PROC(const char*,SDL_WinRTGetFSPathUTF8,(SDL_WinRT_Path a),(a),return)
|
SDL_DYNAPI_PROC(const char*,SDL_WinRTGetFSPathUTF8,(SDL_WinRT_Path a),(a),return)
|
||||||
#endif
|
#endif
|
||||||
SDL_DYNAPI_PROC(void,SDL_WarpMouseGlobal,(int a, int b),(a,b),)
|
SDL_DYNAPI_PROC(int,SDL_WarpMouseGlobal,(int a, int b),(a,b),)
|
||||||
SDL_DYNAPI_PROC(float,SDL_sqrtf,(float a),(a),return)
|
SDL_DYNAPI_PROC(float,SDL_sqrtf,(float a),(a),return)
|
||||||
SDL_DYNAPI_PROC(double,SDL_tan,(double a),(a),return)
|
SDL_DYNAPI_PROC(double,SDL_tan,(double a),(a),return)
|
||||||
SDL_DYNAPI_PROC(float,SDL_tanf,(float a),(a),return)
|
SDL_DYNAPI_PROC(float,SDL_tanf,(float a),(a),return)
|
||||||
|
|
|
@ -535,14 +535,16 @@ SDL_WarpMouseInWindow(SDL_Window * window, int x, int y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
SDL_WarpMouseGlobal(int x, int y)
|
SDL_WarpMouseGlobal(int x, int y)
|
||||||
{
|
{
|
||||||
SDL_Mouse *mouse = SDL_GetMouse();
|
SDL_Mouse *mouse = SDL_GetMouse();
|
||||||
|
|
||||||
if (mouse->WarpMouseGlobal) {
|
if (mouse->WarpMouseGlobal) {
|
||||||
mouse->WarpMouseGlobal(x, y);
|
return mouse->WarpMouseGlobal(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return SDL_Unsupported();
|
||||||
}
|
}
|
||||||
|
|
||||||
static SDL_bool
|
static SDL_bool
|
||||||
|
|
|
@ -61,7 +61,7 @@ typedef struct
|
||||||
void (*WarpMouse) (SDL_Window * window, int x, int y);
|
void (*WarpMouse) (SDL_Window * window, int x, int y);
|
||||||
|
|
||||||
/* Warp the mouse to (x,y) in screen space */
|
/* Warp the mouse to (x,y) in screen space */
|
||||||
void (*WarpMouseGlobal) (int x, int y);
|
int (*WarpMouseGlobal) (int x, int y);
|
||||||
|
|
||||||
/* Set relative mode */
|
/* Set relative mode */
|
||||||
int (*SetRelativeMouseMode) (SDL_bool enabled);
|
int (*SetRelativeMouseMode) (SDL_bool enabled);
|
||||||
|
|
|
@ -210,7 +210,7 @@ SDL_FindWindowAtPoint(const int x, const int y)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static int
|
||||||
Cocoa_WarpMouseGlobal(int x, int y)
|
Cocoa_WarpMouseGlobal(int x, int y)
|
||||||
{
|
{
|
||||||
SDL_Mouse *mouse = SDL_GetMouse();
|
SDL_Mouse *mouse = SDL_GetMouse();
|
||||||
|
@ -219,7 +219,7 @@ Cocoa_WarpMouseGlobal(int x, int y)
|
||||||
if ([data->listener isMoving]) {
|
if ([data->listener isMoving]) {
|
||||||
DLog("Postponing warp, window being moved.");
|
DLog("Postponing warp, window being moved.");
|
||||||
[data->listener setPendingMoveX:x Y:y];
|
[data->listener setPendingMoveX:x Y:y];
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const CGPoint point = CGPointMake((float)x, (float)y);
|
const CGPoint point = CGPointMake((float)x, (float)y);
|
||||||
|
@ -245,6 +245,8 @@ Cocoa_WarpMouseGlobal(int x, int y)
|
||||||
SDL_SendMouseMotion(win, mouse->mouseID, 0, x - win->x, y - win->y);
|
SDL_SendMouseMotion(win, mouse->mouseID, 0, x - win->x, y - win->y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -110,10 +110,10 @@ MIR_WarpMouse(SDL_Window* window, int x, int y)
|
||||||
SDL_Unsupported();
|
SDL_Unsupported();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static int
|
||||||
MIR_WarpMouseGlobal(int x, int y)
|
MIR_WarpMouseGlobal(int x, int y)
|
||||||
{
|
{
|
||||||
SDL_Unsupported();
|
return SDL_Unsupported();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
@ -216,18 +216,18 @@ RPI_WarpMouse(SDL_Window * window, int x, int y)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Warp the mouse to (x,y) */
|
/* Warp the mouse to (x,y) */
|
||||||
static void
|
static int
|
||||||
RPI_WarpMouseGlobal(int x, int y)
|
RPI_WarpMouseGlobal(int x, int y)
|
||||||
{
|
{
|
||||||
RPI_CursorData *curdata;
|
RPI_CursorData *curdata;
|
||||||
DISPMANX_UPDATE_HANDLE_T update;
|
DISPMANX_UPDATE_HANDLE_T update;
|
||||||
int ret;
|
|
||||||
VC_RECT_T dst_rect;
|
VC_RECT_T dst_rect;
|
||||||
SDL_Mouse *mouse = SDL_GetMouse();
|
SDL_Mouse *mouse = SDL_GetMouse();
|
||||||
|
|
||||||
if (mouse != NULL && mouse->cur_cursor != NULL && mouse->cur_cursor->driverdata != NULL) {
|
if (mouse != NULL && mouse->cur_cursor != NULL && mouse->cur_cursor->driverdata != NULL) {
|
||||||
curdata = (RPI_CursorData *) mouse->cur_cursor->driverdata;
|
curdata = (RPI_CursorData *) mouse->cur_cursor->driverdata;
|
||||||
if (curdata->element != DISPMANX_NO_HANDLE) {
|
if (curdata->element != DISPMANX_NO_HANDLE) {
|
||||||
|
int ret;
|
||||||
update = vc_dispmanx_update_start( 10 );
|
update = vc_dispmanx_update_start( 10 );
|
||||||
SDL_assert( update );
|
SDL_assert( update );
|
||||||
vc_dispmanx_rect_set( &dst_rect, x, y, curdata->w, curdata->h);
|
vc_dispmanx_rect_set( &dst_rect, x, y, curdata->w, curdata->h);
|
||||||
|
@ -245,8 +245,11 @@ RPI_WarpMouseGlobal(int x, int y)
|
||||||
/* Submit asynchronously, otherwise the peformance suffers a lot */
|
/* Submit asynchronously, otherwise the peformance suffers a lot */
|
||||||
ret = vc_dispmanx_update_submit( update, 0, NULL );
|
ret = vc_dispmanx_update_submit( update, 0, NULL );
|
||||||
SDL_assert( ret == DISPMANX_SUCCESS );
|
SDL_assert( ret == DISPMANX_SUCCESS );
|
||||||
|
return (ret == DISPMANX_SUCCESS) ? 0 : -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return -1; /* !!! FIXME: this should SDL_SetError() somewhere. */
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -347,10 +347,10 @@ Wayland_WarpMouse(SDL_Window *window, int x, int y)
|
||||||
SDL_Unsupported();
|
SDL_Unsupported();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static int
|
||||||
Wayland_WarpMouseGlobal(int x, int y)
|
Wayland_WarpMouseGlobal(int x, int y)
|
||||||
{
|
{
|
||||||
SDL_Unsupported();
|
return SDL_Unsupported();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
@ -236,7 +236,7 @@ WIN_WarpMouse(SDL_Window * window, int x, int y)
|
||||||
SetCursorPos(pt.x, pt.y);
|
SetCursorPos(pt.x, pt.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static int
|
||||||
WIN_WarpMouseGlobal(int x, int y)
|
WIN_WarpMouseGlobal(int x, int y)
|
||||||
{
|
{
|
||||||
POINT pt;
|
POINT pt;
|
||||||
|
@ -244,6 +244,7 @@ WIN_WarpMouseGlobal(int x, int y)
|
||||||
pt.x = x;
|
pt.x = x;
|
||||||
pt.y = y;
|
pt.y = y;
|
||||||
SetCursorPos(pt.x, pt.y);
|
SetCursorPos(pt.x, pt.y);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
@ -318,13 +318,14 @@ X11_WarpMouse(SDL_Window * window, int x, int y)
|
||||||
X11_XSync(display, False);
|
X11_XSync(display, False);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static int
|
||||||
X11_WarpMouseGlobal(int x, int y)
|
X11_WarpMouseGlobal(int x, int y)
|
||||||
{
|
{
|
||||||
Display *display = GetDisplay();
|
Display *display = GetDisplay();
|
||||||
|
|
||||||
X11_XWarpPointer(display, None, DefaultRootWindow(display), 0, 0, 0, 0, x, y);
|
X11_XWarpPointer(display, None, DefaultRootWindow(display), 0, 0, 0, 0, x, y);
|
||||||
X11_XSync(display, False);
|
X11_XSync(display, False);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue