Mercurial > sdl-ios-xcode
diff src/video/bwindow/SDL_syswm.cc @ 3878:678576473849 SDL-1.2
Fixed bug #286
Date: Thu, 9 Feb 2006 17:06:51 +0300
From: "Oleg K [BeSman]"
Subject: BeOS SDL patches
Hello all. My name is Oleg K. [BeSman], Im a BeOS user from Russia.This mail
contain a BeOs-specific patches to SDL (implementation of InputGrabbing and
mouse_relative mode). See the source in attached file for details.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 24 Sep 2006 15:31:42 +0000 |
parents | 376665398b25 |
children | cb7b118b400a |
line wrap: on
line diff
--- a/src/video/bwindow/SDL_syswm.cc Sun Sep 24 01:27:40 2006 +0000 +++ b/src/video/bwindow/SDL_syswm.cc Sun Sep 24 15:31:42 2006 +0000 @@ -24,9 +24,9 @@ #include "SDL_BWin.h" extern "C" { - #include "SDL_syswm_c.h" #include "SDL_error.h" +#include "../SDL_cursor_c.h" void BE_SetWMCaption(_THIS, const char *title, const char *icon) { @@ -38,6 +38,42 @@ SDL_Win->Minimize(true); } +SDL_GrabMode BE_GrabInput(_THIS, SDL_GrabMode mode) +{ + if ( mode == SDL_GRAB_OFF ) { +// be_app->ShowCursor(); + if ( !(SDL_cursorstate & CURSOR_VISIBLE) ) { + /* BeSman: Jan 2, 2006 + must be leaving relative mode, move mouse from + center of window to where it belongs ... */ + BPoint pt; + int x, y; + SDL_GetMouseState(&x,&y); + pt.x = x; + pt.y = y; + SDL_Win->Lock(); + SDL_Win->ConvertToScreen(&pt); + SDL_Win->Unlock(); + set_mouse_position((int)pt.x, (int)pt.y); + } + } else { +// be_app->HideCursor(); + if ( !(SDL_cursorstate & CURSOR_VISIBLE) ) { + /* BeSman: Jan 2, 2006 + must be entering relative mode, get ready by + moving mouse to center of window ... */ + BPoint pt; + pt.x = (SDL_VideoSurface->w/2); + pt.y = (SDL_VideoSurface->h/2); + SDL_Win->Lock(); + SDL_Win->ConvertToScreen(&pt); + SDL_Win->Unlock(); + set_mouse_position((int)pt.x, (int)pt.y); + } + } + return(mode); +} + int BE_GetWMInfo(_THIS, SDL_SysWMinfo *info) { if (info->version.major <= SDL_MAJOR_VERSION)