Fixed mouse warp position bug with offset video modes

This commit is contained in:
Sam Lantinga
2002-10-11 08:09:26 +00:00
parent d85c592155
commit 8de527e64d
4 changed files with 11 additions and 14 deletions

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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();