Преглед изворни кода

Added Core::captureMouse(bool)

Only implemented on linux on windows so far. Windows version untested.
cib пре 12 година
родитељ
комит
d48022a44c

+ 10 - 0
Core/Contents/Include/PolyCore.h

@@ -98,6 +98,15 @@ namespace Polycode {
 		* @param newval True to show mouse, false to hide it.
 		* @param newval True to show mouse, false to hide it.
 		*/		
 		*/		
 		virtual void enableMouse(bool newval);
 		virtual void enableMouse(bool newval);
+
+		/**
+		* Capture the mouse.
+		*
+		* The mouse will be unable to exit the polycode screen.
+		* 
+		* @param newval True to capture the mouse, false to uncapture it.
+		*/		
+		virtual void captureMouse(bool newval);
 		
 		
 		/**
 		/**
 		* Sets the cursor the application is using.
 		* Sets the cursor the application is using.
@@ -380,6 +389,7 @@ namespace Polycode {
 		unsigned int elapsed;
 		unsigned int elapsed;
 		
 		
 		bool mouseEnabled;
 		bool mouseEnabled;
+		bool mouseCaptured;
 		
 		
 		unsigned int lastSleepFrameTicks;
 		unsigned int lastSleepFrameTicks;
 		
 		

+ 1 - 0
Core/Contents/Include/PolySDLCore.h

@@ -47,6 +47,7 @@ namespace Polycode {
 		~SDLCore();
 		~SDLCore();
 
 
 		void enableMouse(bool newval);
 		void enableMouse(bool newval);
+		void captureMouse(bool);
 		unsigned int getTicks();
 		unsigned int getTicks();
 		bool Update();
 		bool Update();
 		void Render();
 		void Render();

+ 1 - 0
Core/Contents/Include/PolyWinCore.h

@@ -179,6 +179,7 @@ public:
 		~Win32Core();
 		~Win32Core();
 
 
 		void enableMouse(bool newval);
 		void enableMouse(bool newval);
+		void captureMouse(bool newval);
 		void warpCursor(int x, int y);
 		void warpCursor(int x, int y);
 		unsigned int getTicks();		
 		unsigned int getTicks();		
 		bool Update();
 		bool Update();

+ 5 - 1
Core/Contents/Source/PolyCore.cpp

@@ -68,7 +68,7 @@ namespace Polycode {
 		if (fullScreen && !xRes && !yRes) {
 		if (fullScreen && !xRes && !yRes) {
 			getScreenInfo(&xRes, &yRes, NULL);
 			getScreenInfo(&xRes, &yRes, NULL);
 		}
 		}
-		mouseEnabled = true;
+		mouseEnabled = true; mouseCaptured = false;
 		lastSleepFrameTicks = 0;
 		lastSleepFrameTicks = 0;
 		
 		
 		this->monitorIndex = monitorIndex;
 		this->monitorIndex = monitorIndex;
@@ -87,6 +87,10 @@ namespace Polycode {
 	void Core::enableMouse(bool newval) {
 	void Core::enableMouse(bool newval) {
 		mouseEnabled = newval;
 		mouseEnabled = newval;
 	}
 	}
+
+	void Core::captureMouse(bool newval) {
+		mouseCaptured = newval;
+	}
 	
 	
 	int Core::getNumVideoModes() {
 	int Core::getNumVideoModes() {
 		return numVideoModes;
 		return numVideoModes;

+ 9 - 0
Core/Contents/Source/PolySDLCore.cpp

@@ -210,6 +210,15 @@ void SDLCore::enableMouse(bool newval) {
 	Core::enableMouse(newval);
 	Core::enableMouse(newval);
 }
 }
 
 
+void SDLCore::captureMouse(bool newval) {
+	if(newval) {
+		SDL_WM_GrabInput(SDL_GRAB_ON);
+	} else {
+		SDL_WM_GrabInput(SDL_GRAB_OFF);
+	}
+	Core::captureMouse(newval);
+}
+
 bool SDLCore::checkSpecialKeyEvents(PolyKEY key) {
 bool SDLCore::checkSpecialKeyEvents(PolyKEY key) {
 	
 	
 	if(key == KEY_a && (input->getKeyState(KEY_LCTRL) || input->getKeyState(KEY_RCTRL))) {
 	if(key == KEY_a && (input->getKeyState(KEY_LCTRL) || input->getKeyState(KEY_RCTRL))) {

+ 12 - 2
Core/Contents/Source/PolyWinCore.cpp

@@ -133,7 +133,17 @@ Win32Core::~Win32Core() {
 }
 }
 
 
 void Win32Core::enableMouse(bool newval) {
 void Win32Core::enableMouse(bool newval) {
-	ShowCursor(newval);	
+	ShowCursor(newval);
+
+	Core::enableMouse(newval);
+}
+
+void Win32Core::captureMouse(bool newval) {
+	// Capture the mouse in the window holding
+	// our polycode screen.
+	SetCapture(hWnd);
+
+	Core::captureMouse(newval);
 }
 }
 
 
 void Win32Core::warpCursor(int x, int y) {
 void Win32Core::warpCursor(int x, int y) {
@@ -1265,4 +1275,4 @@ String Win32Core::getClipboardString() {
 	String retString = String(c);
 	String retString = String(c);
 	GlobalUnlock(clip0);
 	GlobalUnlock(clip0);
 	return retString;
 	return retString;
-}
+}