project_files/HedgewarsMobile/Classes/OverlayViewController.m
changeset 3523 6592fbb969da
parent 3514 59dbd31e9953
child 3525 1d7b056ff866
--- a/project_files/HedgewarsMobile/Classes/OverlayViewController.m	Sat Jun 19 00:48:47 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.m	Sun Jun 20 18:35:59 2010 +0200
@@ -75,7 +75,6 @@
             }
             break;
         default:
-            DLog(@"Unknown rotation status");
             break;
     }
     self.view.frame = usefulRect;
@@ -108,6 +107,8 @@
     [dimTimer setFireDate:HIDING_TIME_DEFAULT];
 }
 
+#pragma mark -
+#pragma mark View Management
 -(void) viewDidLoad {
     isPopoverVisible = NO;
     self.view.alpha = 0;
@@ -160,6 +161,8 @@
     [super dealloc];
 }
 
+#pragma mark -
+#pragma mark Overlay actions and members
 // dim the overlay when there's no more input for a certain amount of time
 -(IBAction) buttonReleased:(id) sender {
 	HW_allKeysUp();
@@ -297,10 +300,6 @@
 
 #pragma mark -
 #pragma mark Custom touch event handling
-
-#define kMinimumPinchDelta      50
-
-
 -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
 	NSArray *twoTouches;
 	UITouch *touch = [touches anyObject];
@@ -316,7 +315,7 @@
     gestureStartPoint = [touch locationInView:self.view];
         
 	switch ([touches count]) {
-		case 1:
+		/*case 1:
 			initialDistanceForPinching = 0;
 			switch ([touch tapCount]) {
 				case 1:
@@ -331,15 +330,14 @@
 				default:
 					break;
 			}
-			break;
+			break;*/
 		case 2:
 			if (2 == [touch tapCount]) {
 				HW_zoomReset();
 			}
 			
 			// pinching
-            gestureStartPoint.x = 0;
-            gestureStartPoint.y = 0;
+            gestureStartPoint = CGPointMake(0, 0);
 			twoTouches = [touches allObjects];
 			UITouch *first = [twoTouches objectAtIndex:0];
 			UITouch *second = [twoTouches objectAtIndex:1];
@@ -352,8 +350,9 @@
 }
 
 -(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
+    gestureStartPoint = CGPointMake(0, 0);
 	initialDistanceForPinching = 0;
-	HW_allKeysUp();
+	//HW_allKeysUp();
 }
 
 -(void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
@@ -378,14 +377,15 @@
 	UITouch *touch = [touches anyObject];
 
 	switch ([touches count]) {
-		case 1:
+		/*case 1:
 			currentPosition = [touch locationInView:self.view];
 			// panning
 			CGFloat deltaX = fabsf(gestureStartPoint.x - currentPosition.x);
 			CGFloat deltaY = fabsf(gestureStartPoint.y - currentPosition.y);
 			
+            // the two ifs are not mutually exclusive
             if (deltaX >= minimumGestureLength) {
-                NSLog(@"Horizontal swipe detected, deltaX: %f deltaY: %f",deltaX, deltaY);
+                Dlog(@"deltaX: %f deltaY: %f", deltaX, deltaY);
                 if (currentPosition.x > gestureStartPoint.x) {
                     HW_cursorLeft(logCoeff*log(deltaX));
                 } else {
@@ -394,7 +394,7 @@
 
             } 
             if (deltaY >= minimumGestureLength) {
-                NSLog(@"Horizontal swipe detected, deltaX: %f deltaY: %f",deltaX, deltaY);
+                DLog(@"deltaX: %f deltaY: %f", deltaX, deltaY);
                 if (currentPosition.y < gestureStartPoint.y) {
                     HW_cursorDown(logCoeff*log(deltaY));
                 } else {
@@ -402,22 +402,26 @@
                 }            
             }
 
-			break;
+			break;*/
 		case 2:
 			twoTouches = [touches allObjects];
 			UITouch *first = [twoTouches objectAtIndex:0];
 			UITouch *second = [twoTouches objectAtIndex:1];
 			CGFloat currentDistanceOfPinching = distanceBetweenPoints([first locationInView:self.view], [second locationInView:self.view]);
-			
-			if (0 == initialDistanceForPinching) 
-				initialDistanceForPinching = currentDistanceOfPinching;
-
-			if (currentDistanceOfPinching < initialDistanceForPinching + kMinimumPinchDelta)
-				HW_zoomOut();
-			else if (currentDistanceOfPinching > initialDistanceForPinching + kMinimumPinchDelta)
-				HW_zoomIn();
-
-			currentDistanceOfPinching = initialDistanceForPinching;
+			const int pinchDelta = 40;
+            
+			if (0 != initialDistanceForPinching) {
+                if (currentDistanceOfPinching - initialDistanceForPinching > pinchDelta) {
+                    HW_zoomIn();
+                    initialDistanceForPinching = currentDistanceOfPinching;
+                }
+                else if (initialDistanceForPinching - currentDistanceOfPinching > pinchDelta) {
+                    HW_zoomOut();
+                    initialDistanceForPinching = currentDistanceOfPinching;
+                }
+            } else 
+                initialDistanceForPinching = currentDistanceOfPinching;
+            
 			break;
 		default:
 			break;