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)