# HG changeset patch
# User koda
# Date 1290649552 -3600
# Node ID d1d26f8963a31ab2e0444b6547b8fb57dbc84cac
# Parent  c4e1820fa792c0e5dc161e7c664bb5bccf56a5a1
update some files for new graphics and new ios4.2
most importantly rotation finally seems to work on iphone
also fix two glitches for old gen devices

diff -r c4e1820fa792 -r d1d26f8963a3 project_files/HedgewarsMobile/Classes/AmmoMenuViewController.m
--- a/project_files/HedgewarsMobile/Classes/AmmoMenuViewController.m	Wed Nov 24 23:35:41 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/AmmoMenuViewController.m	Thu Nov 25 02:45:52 2010 +0100
@@ -27,7 +27,7 @@
 
 #define BTNS_PER_ROW         9
 #define DEFAULT_DESCRIPTION  IS_IPAD() ? \
-                             NSLocalizedString(@"Hold your finger on a weapon to see what it does...",@"") : \
+                             NSLocalizedString(@"Hold your finger on a weapon to see what it does.\nYou can move this window anywhere on the screen.",@"") : \
                              NSLocalizedString(@"Hold your finger on a weapon to see what it does.\nTap anywhere to dismiss.",@"")
 
 @implementation AmmoMenuViewController
diff -r c4e1820fa792 -r d1d26f8963a3 project_files/HedgewarsMobile/Classes/CommodityFunctions.m
--- a/project_files/HedgewarsMobile/Classes/CommodityFunctions.m	Wed Nov 24 23:35:41 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/CommodityFunctions.m	Thu Nov 25 02:45:52 2010 +0100
@@ -29,11 +29,8 @@
 #import "PascalImports.h"
 
 BOOL inline rotationManager (UIInterfaceOrientation interfaceOrientation) {
-    if (IS_IPAD())
-        return (interfaceOrientation == UIInterfaceOrientationLandscapeRight) ||
-               (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
-    else
-        return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
+    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight) ||
+           (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
 }
 
 NSInteger inline randomPort () {
diff -r c4e1820fa792 -r d1d26f8963a3 project_files/HedgewarsMobile/Classes/MapConfigViewController.m
--- a/project_files/HedgewarsMobile/Classes/MapConfigViewController.m	Wed Nov 24 23:35:41 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/MapConfigViewController.m	Thu Nov 25 02:45:52 2010 +0100
@@ -389,10 +389,10 @@
     NSMutableArray *mapArray = [[NSMutableArray alloc] init];
     for (NSString *str in mapArrayFull) {
         CGSize imgSize = PSPNGSizeFromMetaData([MAPS_DIRECTORY() stringByAppendingFormat:@"%@/map.png",str]);
-        //DLog(@"%@ %f %f", str, imgSize.width, imgSize.height);
+        // remove images that are too big for certain devices
         if (IS_NOT_POWERFUL() && imgSize.height > 1024.0f)
             continue;
-        if (IS_IPAD() && imgSize.height > 1280.0f)
+        if ([modelType() hasPrefix:@"iPad1"] && [[[UIDevice currentDevice] systemVersion] intValue] < 4 && imgSize.height > 1280.0f)
             continue;
         [mapArray addObject:str];
     }
@@ -401,10 +401,10 @@
     NSMutableArray *missionArray = [[NSMutableArray alloc] init];
     for (NSString *str in missionArrayFull) {
         CGSize imgSize = PSPNGSizeFromMetaData([MISSIONS_DIRECTORY() stringByAppendingFormat:@"%@/map.png",str]);
-        //DLog(@"%@ %f %f", str, imgSize.width, imgSize.height);
+        // remove images that are too big for certain devices
         if (IS_NOT_POWERFUL() && imgSize.height > 1024.0f)
             continue;
-        if (IS_IPAD() && imgSize.height > 1280.0f)
+        if ([modelType() hasPrefix:@"iPad1"] && [[[UIDevice currentDevice] systemVersion] intValue] < 4 && imgSize.height > 1280.0f)
             continue;
         [missionArray addObject:str];
     }
@@ -449,7 +449,7 @@
 
     if ([self.tableView respondsToSelector:@selector(setBackgroundView:)])
         [self.tableView setBackgroundView:nil];
-    self.view.backgroundColor = [UIColor clearColor];
+    self.tableView.backgroundColor = [UIColor clearColor];
     self.tableView.separatorColor = UICOLOR_HW_YELLOW_BODER;
     self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
 }
@@ -491,14 +491,16 @@
 
 -(void) didReceiveMemoryWarning {
     self.dataSourceArray = nil;
+    [super didReceiveMemoryWarning];
 
-    self.tableView = nil;
-    self.maxLabel = nil;
-    self.sizeLabel = nil;
-    self.slider = nil;
+    if (self.view.superview == nil) {
+        self.tableView = nil;
+        self.maxLabel = nil;
+        self.sizeLabel = nil;
+        self.slider = nil;
+    }
 
     MSG_MEMCLEAN();
-    [super didReceiveMemoryWarning];
 }
 
 -(void) dealloc {
diff -r c4e1820fa792 -r d1d26f8963a3 project_files/HedgewarsMobile/Classes/MapPreviewButtonView.m
--- a/project_files/HedgewarsMobile/Classes/MapPreviewButtonView.m	Wed Nov 24 23:35:41 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/MapPreviewButtonView.m	Thu Nov 25 02:45:52 2010 +0100
@@ -53,11 +53,12 @@
 #pragma mark -
 #pragma mark image wrappers
 -(void) setBackgroundImageRounded:(UIImage *)image forState:(UIControlState)state {
-    [self setBackgroundImage:[image makeRoundCornersOfSize:CGSizeMake(12, 12)] forState:UIControlStateNormal];    
+    // TODO:http://stackoverflow.com/questions/4272476/setbackgroundimage-behaviour-changed-on-ipad-4-2
+    [self setBackgroundImage:[image makeRoundCornersOfSize:CGSizeMake(12, 12)] forState:state];
 }
 
 -(void) setImageRounded:(UIImage *)image forState:(UIControlState)state {
-    [self setImage:[image makeRoundCornersOfSize:CGSizeMake(12, 12)] forState:UIControlStateNormal];    
+    [self setImage:[image makeRoundCornersOfSize:CGSizeMake(12, 12)] forState:state];
 }
 
 -(void) setImageRoundedForNormalState:(UIImage *)image {
diff -r c4e1820fa792 -r d1d26f8963a3 project_files/HedgewarsMobile/Classes/OverlayViewController.h
--- a/project_files/HedgewarsMobile/Classes/OverlayViewController.h	Wed Nov 24 23:35:41 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.h	Thu Nov 25 02:45:52 2010 +0100
@@ -51,6 +51,7 @@
     // stuff initialized externally
     BOOL isNetGame;
     BOOL useClassicMenu;
+    NSInteger initialOrientation;
     
     // dual head support
     NSInteger initialScreenCount;
@@ -63,6 +64,7 @@
 @property (nonatomic,retain) AmmoMenuViewController *amvc;
 @property (assign) BOOL isNetGame;
 @property (assign) BOOL useClassicMenu;
+@property (assign) NSInteger initialOrientation;
 
 -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
 -(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
diff -r c4e1820fa792 -r d1d26f8963a3 project_files/HedgewarsMobile/Classes/OverlayViewController.m
--- a/project_files/HedgewarsMobile/Classes/OverlayViewController.m	Wed Nov 24 23:35:41 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.m	Thu Nov 25 02:45:52 2010 +0100
@@ -38,16 +38,22 @@
 #define removeConfirmationInput()   [[self.view viewWithTag:CONFIRMATION_TAG] removeFromSuperview];
 
 @implementation OverlayViewController
-@synthesize popoverController, popupMenu, helpPage, amvc, isNetGame, useClassicMenu;
+@synthesize popoverController, popupMenu, helpPage, amvc, isNetGame, useClassicMenu, initialOrientation;
 
 #pragma mark -
 #pragma mark rotation
 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+    // don't rotate until the game is running for performance and synchronization with the sdlview
+    if (isGameRunning() == NO)
+        return (interfaceOrientation == (UIInterfaceOrientation) self.initialOrientation);
     return rotationManager(interfaceOrientation);
 }
 
 // pause the game and remove objc menus so that animation is smoother
 -(void) willRotateToInterfaceOrientation:(UIInterfaceOrientation) toInterfaceOrientation duration:(NSTimeInterval) duration{
+    if (isGameRunning() == NO)
+        return;
+
     [self dismissPopover];
     if (HW_isPaused() == NO)
         HW_pause();
@@ -75,6 +81,9 @@
 
 // now restore previous state
 -(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation) fromInterfaceOrientation {
+    if (isGameRunning() == NO)
+        return;
+
     if (wasVisible || IS_DUALHEAD())
         [self.amvc appearInView:self.view];
     if (HW_isPaused() == YES)
@@ -85,6 +94,9 @@
 
 // while in dual head the above rotation functions are not called
 -(void) dualHeadRotation:(NSNotification *)notification {
+    if (isGameRunning() == NO)
+        return;
+
     UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
     
     [UIView beginAnimations:@"rotation" context:NULL];
diff -r c4e1820fa792 -r d1d26f8963a3 project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.m
--- a/project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.m	Wed Nov 24 23:35:41 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.m	Thu Nov 25 02:45:52 2010 +0100
@@ -128,7 +128,11 @@
     [setup release];
 
     // since the sdlwindow is not yet created, we add the overlayController with a delay
-    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:isNetGameNum,@"net",menuStyle,@"menu",nil];
+    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
+                          isNetGameNum,@"net",
+                          menuStyle,@"menu",
+                          [[gameDictionary objectForKey:@"game_dictionary"] objectForKey:@"orientation"],@"orientation",
+                          nil];
     [self performSelector:@selector(displayOverlayLater:) withObject:dict afterDelay:1];
 
     // this is the pascal fuction that starts the game (wrapped around isInGame)
@@ -157,6 +161,7 @@
     self.overlayController = [[OverlayViewController alloc] initWithNibName:@"OverlayViewController" bundle:nil];
     self.overlayController.isNetGame = [[dict objectForKey:@"net"] boolValue];
     self.overlayController.useClassicMenu = [[dict objectForKey:@"menu"] boolValue];
+    self.overlayController.initialOrientation = [[dict objectForKey:@"orientation"] intValue];
     
     UIWindow *gameWindow;
     if (IS_DUALHEAD())
diff -r c4e1820fa792 -r d1d26f8963a3 project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m
--- a/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m	Wed Nov 24 23:35:41 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m	Thu Nov 25 02:45:52 2010 +0100
@@ -47,7 +47,7 @@
         if (IS_IPAD())
             [self.tableView setBackgroundView:nil];
         else {
-            UIImage *backgroundImage = [[UIImage alloc] initWithContentsOfFile:@"backgroundCenter.png"];
+            UIImage *backgroundImage = [[UIImage alloc] initWithContentsOfFile:@"background~iphone.png"];
             UIImageView *background = [[UIImageView alloc] initWithImage:backgroundImage];
             [backgroundImage release];
             [self.tableView setBackgroundView:background];
diff -r c4e1820fa792 -r d1d26f8963a3 project_files/HedgewarsMobile/Classes/SplitViewRootController.h
--- a/project_files/HedgewarsMobile/Classes/SplitViewRootController.h	Wed Nov 24 23:35:41 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/SplitViewRootController.h	Thu Nov 25 02:45:52 2010 +0100
@@ -25,8 +25,12 @@
 
 @interface SplitViewRootController: UIViewController {
     MasterViewController *activeController;
+    UINavigationController *rightNavController;
+    UISplitViewController *splitViewRootController;
 }
 
 @property (nonatomic,retain) MasterViewController *activeController;
+@property (nonatomic,retain) UINavigationController *rightNavController;
+@property (nonatomic,retain) UISplitViewController *splitViewRootController;
 
 @end
diff -r c4e1820fa792 -r d1d26f8963a3 project_files/HedgewarsMobile/Classes/SplitViewRootController.m
--- a/project_files/HedgewarsMobile/Classes/SplitViewRootController.m	Wed Nov 24 23:35:41 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/SplitViewRootController.m	Thu Nov 25 02:45:52 2010 +0100
@@ -24,7 +24,7 @@
 #import "CommodityFunctions.h"
 
 @implementation SplitViewRootController
-@synthesize activeController;
+@synthesize activeController, rightNavController, splitViewRootController;
 
 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
@@ -49,7 +49,7 @@
         self.activeController = rightController;
         [rightController release];
     }
-    UINavigationController *rightNavController = [[UINavigationController alloc] initWithRootViewController:self.activeController];
+    self.rightNavController = [[UINavigationController alloc] initWithRootViewController:self.activeController];
 
     if (IS_IPAD()) {
         MasterViewController *leftController = [[MasterViewController alloc] initWithStyle:UITableViewStylePlain];
@@ -57,18 +57,18 @@
         UINavigationController *leftNavController = [[UINavigationController alloc] initWithRootViewController:leftController];
         [leftController release];
 
-        UISplitViewController *splitViewRootController = [[UISplitViewController alloc] init];
-        splitViewRootController.delegate = nil;
-        splitViewRootController.view.frame = CGRectMake(0, 0, rect.size.height, rect.size.width);
-        splitViewRootController.viewControllers = [NSArray arrayWithObjects: leftNavController, rightNavController, nil];
+        self.splitViewRootController = [[UISplitViewController alloc] init];
+        self.splitViewRootController.delegate = nil;
+        self.splitViewRootController.view.frame = CGRectMake(0, 0, rect.size.height, rect.size.width);
+        self.splitViewRootController.viewControllers = [NSArray arrayWithObjects: leftNavController, self.rightNavController, nil];
         [leftNavController release];
-        [rightNavController release];
+        [self.rightNavController release];
 
         // add view to main controller
-        [self.view addSubview:splitViewRootController.view];
+        [self.view addSubview:self.splitViewRootController.view];
     } else {
-        rightNavController.view.frame = CGRectMake(0, 0, rect.size.height, rect.size.width);
-        [self.view addSubview:rightNavController.view];
+        self.rightNavController.view.frame = CGRectMake(0, 0, rect.size.height, rect.size.width);
+        [self.view addSubview:self.rightNavController.view];
     }
 
     [super viewDidLoad];
@@ -76,12 +76,16 @@
 
 -(void) viewDidUnload {
     self.activeController = nil;
+    self.rightNavController = nil;
+    self.splitViewRootController = nil;
     MSG_DIDUNLOAD();
     [super viewDidUnload];
 }
 
 -(void) dealloc {
-    [self.activeController release];
+    [activeController release];
+    [rightNavController release];
+    [splitViewRootController release];
     [super dealloc];
 }
 
diff -r c4e1820fa792 -r d1d26f8963a3 project_files/HedgewarsMobile/Classes/TeamConfigViewController.m
--- a/project_files/HedgewarsMobile/Classes/TeamConfigViewController.m	Wed Nov 24 23:35:41 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/TeamConfigViewController.m	Thu Nov 25 02:45:52 2010 +0100
@@ -43,7 +43,7 @@
         if (IS_IPAD())
             [self.tableView setBackgroundView:nil];
         else {
-            UIImage *backgroundImage = [[UIImage alloc] initWithContentsOfFile:@"backgroundCenter.png"];
+            UIImage *backgroundImage = [[UIImage alloc] initWithContentsOfFile:@"background~iphone.png"];
             UIImageView *background = [[UIImageView alloc] initWithImage:backgroundImage];
             [backgroundImage release];
             [self.tableView setBackgroundView:background];
diff -r c4e1820fa792 -r d1d26f8963a3 project_files/HedgewarsMobile/Classes/UIImageExtra.m
--- a/project_files/HedgewarsMobile/Classes/UIImageExtra.m	Wed Nov 24 23:35:41 2010 +0100
+++ b/project_files/HedgewarsMobile/Classes/UIImageExtra.m	Thu Nov 25 02:45:52 2010 +0100
@@ -232,16 +232,22 @@
 }
 
 +(UIImage *)whiteImage:(CGSize) ofSize {
-    UIGraphicsBeginImageContext(ofSize);
-    CGContextRef context = UIGraphicsGetCurrentContext();
-    UIGraphicsPushContext(context);
+    CGFloat w = ofSize.width;
+    CGFloat h = ofSize.height;
 
+    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+    CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
+
+    CGContextBeginPath(context);
     CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0);
     CGContextFillRect(context,CGRectMake(0,0,ofSize.width,ofSize.height));
 
-    UIGraphicsPopContext();
-    UIImage *bkgImg = UIGraphicsGetImageFromCurrentImageContext();
-    UIGraphicsEndImageContext();
+    CGImageRef image = CGBitmapContextCreateImage(context);
+    CGContextRelease(context);
+    CGColorSpaceRelease(colorSpace);
+
+    UIImage *bkgImg = [UIImage imageWithCGImage:image];
+    CGImageRelease(image);
     return bkgImg;
 }