Re-implemented single mouse touches on the iPhone/iPad
authorSam Lantinga <slouken@libsdl.org>
Tue, 06 Jul 2010 22:08:19 -0700
changeset 4488 6dc6a2bdd55e
parent 4487 ba7b2bc1f1a1
child 4489 2bb1bfeee9e2
Re-implemented single mouse touches on the iPhone/iPad
src/video/uikit/SDL_uikitopengles.m
src/video/uikit/SDL_uikitview.h
src/video/uikit/SDL_uikitview.m
--- a/src/video/uikit/SDL_uikitopengles.m	Tue Jul 06 10:58:23 2010 -0700
+++ b/src/video/uikit/SDL_uikitopengles.m	Tue Jul 06 22:08:19 2010 -0700
@@ -125,7 +125,10 @@
         UIKit_GL_DeleteContext(_this, view);
         return NULL;
     }
-		
+
+	/* Make this window the current mouse focus for touch input */
+	SDL_SetMouseFocus(window);
+
 	return view;
 }
 
--- a/src/video/uikit/SDL_uikitview.h	Tue Jul 06 10:58:23 2010 -0700
+++ b/src/video/uikit/SDL_uikitview.h	Tue Jul 06 22:08:19 2010 -0700
@@ -38,7 +38,7 @@
 #else
 @interface SDL_uikitview : UIView {
 #endif
-	
+
 #if FIXME_MULTITOUCH
 	SDL_Mouse mice[MAX_SIMULTANEOUS_TOUCHES];
 #endif
--- a/src/video/uikit/SDL_uikitview.m	Tue Jul 06 10:58:23 2010 -0700
+++ b/src/video/uikit/SDL_uikitview.m	Tue Jul 06 22:08:19 2010 -0700
@@ -64,7 +64,7 @@
 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
 
 	NSEnumerator *enumerator = [touches objectEnumerator];
-	UITouch *touch =(UITouch*)[enumerator nextObject];
+	UITouch *touch = (UITouch*)[enumerator nextObject];
 	
 #if FIXME_MULTITOUCH
 	/* associate touches with mice, so long as we have slots */
@@ -101,12 +101,21 @@
 		/* re-calibrate relative mouse motion */
 		SDL_GetRelativeMouseState(i, NULL, NULL);
 		
-		/* grab next touch */
-		touch = (UITouch*)[enumerator nextObject]; 
-		
 		/* switch back to our old mouse */
 		SDL_SelectMouse(oldMouse);
 		
+		/* grab next touch */
+		touch = (UITouch*)[enumerator nextObject]; 
+	}
+#else
+	if (touch) {
+		CGPoint locationInView = [touch locationInView: self];
+			
+		/* send moved event */
+		SDL_SendMouseMotion(NULL, 0, locationInView.x, locationInView.y);
+
+		/* send mouse down event */
+		SDL_SendMouseButton(NULL, SDL_PRESSED, SDL_BUTTON_LEFT);
 	}
 #endif
 }
@@ -114,10 +123,10 @@
 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
 	
 	NSEnumerator *enumerator = [touches objectEnumerator];
-	UITouch *touch=nil;
+	UITouch *touch = (UITouch*)[enumerator nextObject];
 	
 #if FIXME_MULTITOUCH
-	while(touch = (UITouch *)[enumerator nextObject]) {
+	while(touch) {
 		/* search for the mouse slot associated with this touch */
 		int i, found = NO;
 		for (i=0; i<MAX_SIMULTANEOUS_TOUCHES && !found; i++) {
@@ -131,6 +140,14 @@
 				found = YES;
 			}
 		}
+		
+		/* grab next touch */
+		touch = (UITouch*)[enumerator nextObject]; 
+	}
+#else
+	if (touch) {
+		/* send mouse up */
+		SDL_SendMouseButton(NULL, SDL_RELEASED, SDL_BUTTON_LEFT);
 	}
 #endif
 }
@@ -147,10 +164,10 @@
 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
 	
 	NSEnumerator *enumerator = [touches objectEnumerator];
-	UITouch *touch=nil;
+	UITouch *touch = (UITouch*)[enumerator nextObject];
 	
 #if FIXME_MULTITOUCH
-	while(touch = (UITouch *)[enumerator nextObject]) {
+	while(touch) {
 		/* try to find the mouse associated with this touch */
 		int i, found = NO;
 		for (i=0; i<MAX_SIMULTANEOUS_TOUCHES && !found; i++) {
@@ -163,6 +180,16 @@
 				found = YES;
 			}
 		}
+		
+		/* grab next touch */
+		touch = (UITouch*)[enumerator nextObject]; 
+	}
+#else
+	if (touch) {
+		CGPoint locationInView = [touch locationInView: self];
+
+		/* send moved event */
+		SDL_SendMouseMotion(NULL, 0, locationInView.x, locationInView.y);
 	}
 #endif
 }