diff -r 296cbdd85e50 -r d6412423da45 project_files/HedgewarsMobile/Classes/OverlayViewController.m --- a/project_files/HedgewarsMobile/Classes/OverlayViewController.m Mon Oct 11 00:08:48 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.m Mon Oct 11 03:28:15 2010 +0200 @@ -61,21 +61,33 @@ switch (orientation) { case UIDeviceOrientationLandscapeLeft: if (IS_DUALHEAD() == NO) - sdlView.transform = CGAffineTransformMakeRotation(degreesToRadians(0)); + sdlView.transform = CGAffineTransformMakeRotation(degreesToRadians(180)); self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90)); break; case UIDeviceOrientationLandscapeRight: if (IS_DUALHEAD() == NO) - sdlView.transform = CGAffineTransformMakeRotation(degreesToRadians(180)); + sdlView.transform = CGAffineTransformMakeRotation(degreesToRadians(0)); self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(-90)); break; + case UIDeviceOrientationPortrait: + if (IS_DUALHEAD()) + self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(0)); + break; + case UIDeviceOrientationPortraitUpsideDown: + if (IS_DUALHEAD()) + self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(180)); + break; default: // a debug log would spam too much break; } + if (self.amvc.isVisible) + [self.amvc appearInView:self.view]; self.view.frame = usefulRect; - //sdlView.frame = usefulRect; [UIView commitAnimations]; + + // for single screens only landscape mode is supported + // for dual screen mode the sdlview is not modified, but you can rotate the pad in any direction } #pragma mark - @@ -93,6 +105,26 @@ initialScreenCount = [[UIScreen screens] count]; + if (IS_DUALHEAD()) { + // set initial orientation wrt the controller orientation + switch (self.interfaceOrientation) { + case UIDeviceOrientationLandscapeLeft: + self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90)); + break; + case UIDeviceOrientationLandscapeRight: + self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(-90)); + break; + case UIDeviceOrientationPortrait: + self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(0)); + break; + case UIDeviceOrientationPortraitUpsideDown: + self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(180)); + break; + default: + DLog(@"Nope"); + break; + } + } CGRect screenRect = [[UIScreen mainScreen] bounds]; self.view.frame = CGRectMake(0, 0, screenRect.size.width, screenRect.size.height); @@ -103,7 +135,7 @@ userInfo:nil repeats:YES]; - // add timer too runloop, otherwise it doesn't work + // add timer to runloop, otherwise it doesn't work [[NSRunLoop currentRunLoop] addTimer:dimTimer forMode:NSDefaultRunLoopMode]; [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; @@ -323,13 +355,15 @@ if (IS_DUALHEAD() || self.useClassicMenu == NO) { if (self.amvc == nil) self.amvc = [[AmmoMenuViewController alloc] init]; - + if (self.amvc.isVisible) { doDim(); [self.amvc disappear]; } else { - doNotDim(); - [self.amvc appearInView:self.view]; + if (HW_isAmmoMenuNotAllowed() == NO) { + doNotDim(); + [self.amvc appearInView:self.view]; + } } } else { HW_ammoMenu(); @@ -452,7 +486,7 @@ switch ([allTouches count]) { case 1: // if we're in the menu we just click in the point - if (HW_isAmmoOpen()) { + if (HW_isAmmoMenuOpen()) { HW_setCursor(HWXZ(currentPosition.x), HWYZ(currentPosition.y)); // this click doesn't need any wrapping because the ammoMenu already limits the cursor HW_click(); @@ -560,7 +594,7 @@ touch = [[allTouches allObjects] objectAtIndex:0]; CGPoint currentPosition = [touch locationInView:self.view]; - if (HW_isAmmoOpen()) { + if (HW_isAmmoMenuOpen()) { // no zoom consideration for this HW_setCursor(HWXZ(currentPosition.x), HWYZ(currentPosition.y)); } else