mirror of
https://github.com/yawut/SDL.git
synced 2026-09-29 19:56:48 -05:00
Fixed mouse warp position bug with offset video modes
This commit is contained in:
@@ -295,13 +295,15 @@ void SDL_WarpMouse (Uint16 x, Uint16 y)
|
||||
SDL_VideoDevice *video = current_video;
|
||||
SDL_VideoDevice *this = current_video;
|
||||
|
||||
/* If we have an offset video mode, offset the mouse coordinates */
|
||||
x += (this->screen->offset % this->screen->pitch) /
|
||||
this->screen->format->BytesPerPixel;
|
||||
y += (this->screen->offset / this->screen->pitch);
|
||||
|
||||
/* This generates a mouse motion event */
|
||||
if ( video->WarpWMCursor ) {
|
||||
video->WarpWMCursor(this, x, y);
|
||||
} else {
|
||||
x += (this->screen->offset % this->screen->pitch) /
|
||||
this->screen->format->BytesPerPixel;
|
||||
y += (this->screen->offset / this->screen->pitch);
|
||||
SDL_PrivateMouseMotion(0, 0, x, y);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,9 +58,6 @@ int VGL_ShowWMCursor(_THIS, WMcursor *cursor)
|
||||
|
||||
void VGL_WarpWMCursor(_THIS, Uint16 x, Uint16 y)
|
||||
{
|
||||
x += (this->screen->offset % this->screen->pitch) /
|
||||
this->screen->format->BytesPerPixel;
|
||||
y += (this->screen->offset / this->screen->pitch);
|
||||
SDL_PrivateMouseMotion(0, 0, x, y);
|
||||
}
|
||||
|
||||
|
||||
@@ -213,12 +213,7 @@ int WIN_ShowWMCursor(_THIS, WMcursor *cursor)
|
||||
|
||||
void WIN_WarpWMCursor(_THIS, Uint16 x, Uint16 y)
|
||||
{
|
||||
POINT pt;
|
||||
|
||||
if ( DDRAW_FULLSCREEN() ) {
|
||||
x += (this->screen->offset % this->screen->pitch) /
|
||||
this->screen->format->BytesPerPixel;
|
||||
y += (this->screen->offset / this->screen->pitch);
|
||||
SDL_PrivateMouseMotion(0, 0, x, y);
|
||||
} else if ( mouse_relative) {
|
||||
/* RJR: March 28, 2000
|
||||
@@ -226,6 +221,7 @@ void WIN_WarpWMCursor(_THIS, Uint16 x, Uint16 y)
|
||||
mouse hidden and grabbed */
|
||||
SDL_PrivateMouseMotion(0, 0, x, y);
|
||||
} else {
|
||||
POINT pt;
|
||||
pt.x = x;
|
||||
pt.y = y;
|
||||
ClientToScreen(SDL_Window, &pt);
|
||||
|
||||
@@ -177,9 +177,11 @@ int X11_ShowWMCursor(_THIS, WMcursor *cursor)
|
||||
void X11_WarpWMCursor(_THIS, Uint16 x, Uint16 y)
|
||||
{
|
||||
if ( using_dga & DGA_MOUSE ) {
|
||||
x += (this->screen->offset % this->screen->pitch) /
|
||||
this->screen->format->BytesPerPixel;
|
||||
y += (this->screen->offset / this->screen->pitch);
|
||||
SDL_PrivateMouseMotion(0, 0, x, y);
|
||||
} else if ( mouse_relative) {
|
||||
/* RJR: March 28, 2000
|
||||
leave physical cursor at center of screen if
|
||||
mouse hidden and grabbed */
|
||||
SDL_PrivateMouseMotion(0, 0, x, y);
|
||||
} else {
|
||||
SDL_Lock_EventThread();
|
||||
|
||||
Reference in New Issue
Block a user