# HG changeset patch # User koda # Date 1319581835 -7200 # Node ID 074ab6ebcb3e24e1f1434876ef9097950ee8ae31 # Parent b831679e94676f9967287b75731cc5dfe1925fdc restore runtime compatibility with ios 3.2 diff -r b831679e9467 -r 074ab6ebcb3e project_files/HedgewarsMobile/Classes/AmmoMenuViewController.m --- a/project_files/HedgewarsMobile/Classes/AmmoMenuViewController.m Tue Oct 25 22:51:10 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/AmmoMenuViewController.m Wed Oct 26 00:30:35 2011 +0200 @@ -123,6 +123,7 @@ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *str = [NSString stringWithFormat:@"%@/AmmoMenu/Ammos.png",GRAPHICS_DIRECTORY()]; UIImage *ammoStoreImage = [[UIImage alloc] initWithContentsOfFile:str]; + CGFloat theScale = [[UIScreen mainScreen] safeScale]; NSMutableArray *imgs = [[NSMutableArray alloc] initWithCapacity:HW_getNumberOfWeapons()]; NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:HW_getNumberOfWeapons()]; @@ -167,9 +168,9 @@ [self.view addSubview:button]; [array addObject:button]; - int size = 32 * [[UIScreen mainScreen] scale]; - int x_src = ((i*size)/(int)(ammoStoreImage.size.height * [[UIScreen mainScreen] scale]))*size; - int y_src = (i*size)%(int)(ammoStoreImage.size.height * [[UIScreen mainScreen] scale]); + int size = 32 * theScale; + int x_src = ((i*size)/(int)(ammoStoreImage.size.height * theScale))*size; + int y_src = (i*size)%(int)(ammoStoreImage.size.height * theScale); UIImage *img = [ammoStoreImage cutAt:CGRectMake(x_src, y_src, size, size)]; [imgs addObject:img]; } diff -r b831679e9467 -r 074ab6ebcb3e project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m --- a/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m Tue Oct 25 22:51:10 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m Wed Oct 26 00:30:35 2011 +0200 @@ -64,23 +64,24 @@ // main routine for calling the actual game engine -(void) engineLaunch { const char *gameArgs[11]; - NSInteger width, height; + CGFloat width, height; + CGFloat screenScale = [[UIScreen mainScreen] safeScale]; NSString *ipcString = [[NSString alloc] initWithFormat:@"%d", self.ipcPort]; NSString *localeString = [[NSString alloc] initWithFormat:@"%@.txt", [[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode]]; NSUserDefaults *settings = [NSUserDefaults standardUserDefaults]; if (IS_DUALHEAD()) { CGRect screenBounds = [[[UIScreen screens] objectAtIndex:1] bounds]; - width = (int) screenBounds.size.width; - height = (int) screenBounds.size.height; + width = screenBounds.size.width; + height = screenBounds.size.height; } else { CGRect screenBounds = [[UIScreen mainScreen] bounds]; - width = (int) screenBounds.size.height; - height = (int) screenBounds.size.width; + width = screenBounds.size.height; + height = screenBounds.size.width; } - NSString *horizontalSize = [[NSString alloc] initWithFormat:@"%d", width * (int)[[UIScreen mainScreen] scale]]; - NSString *verticalSize = [[NSString alloc] initWithFormat:@"%d", height * (int)[[UIScreen mainScreen] scale]]; + NSString *horizontalSize = [[NSString alloc] initWithFormat:@"%d", (int)(width * screenScale)]; + NSString *verticalSize = [[NSString alloc] initWithFormat:@"%d", (int)(height * screenScale)]; NSString *rotation = [[NSString alloc] initWithString:@"0"]; NSString *modelId = [HWUtils modelType]; diff -r b831679e9467 -r 074ab6ebcb3e project_files/HedgewarsMobile/Classes/HWUtils.m --- a/project_files/HedgewarsMobile/Classes/HWUtils.m Tue Oct 25 22:51:10 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/HWUtils.m Wed Oct 26 00:30:35 2011 +0200 @@ -40,7 +40,6 @@ cachedModel = [[NSString stringWithUTF8String:name] retain]; free(name); - DLog(@"Cache now contains: %@",cachedModel); } return cachedModel; } diff -r b831679e9467 -r 074ab6ebcb3e project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m --- a/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m Tue Oct 25 22:51:10 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m Wed Oct 26 00:30:35 2011 +0200 @@ -87,11 +87,11 @@ NSLocalizedString(@"Style",@""),nil]; UISegmentedControl *controller = [[UISegmentedControl alloc] initWithItems:array]; [array release]; - [controller addTarget:self.tableView action:@selector(reloadData) forControlEvents:UIControlEventValueChanged]; controller.segmentedControlStyle = UISegmentedControlStyleBar; controller.tintColor = [UIColor lightGrayColor]; controller.selectedSegmentIndex = 0; self.topControl = controller; + [controller addTarget:self.tableView action:@selector(reloadData) forControlEvents:UIControlEventValueChanged]; [controller release]; } return topControl; diff -r b831679e9467 -r 074ab6ebcb3e project_files/HedgewarsMobile/Classes/SingleWeaponViewController.m --- a/project_files/HedgewarsMobile/Classes/SingleWeaponViewController.m Tue Oct 25 22:51:10 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/SingleWeaponViewController.m Wed Oct 26 00:30:35 2011 +0200 @@ -163,10 +163,11 @@ weaponCell.delegate = self; } - int size = 32 * [[UIScreen mainScreen] scale]; - int corners = 8 * [[UIScreen mainScreen] scale]; - int x = ((row*size)/(int)(self.ammoStoreImage.size.height * [[UIScreen mainScreen] scale]))*size; - int y = (row*size)%(int)(self.ammoStoreImage.size.height * [[UIScreen mainScreen] scale]); + CGFloat theScale = [[UIScreen mainScreen] safeScale]; + int size = 32 * theScale; + int corners = 8 * theScale; + int x = ((row*size)/(int)(self.ammoStoreImage.size.height * theScale))*size; + int y = (row*size)%(int)(self.ammoStoreImage.size.height * theScale); UIImage *img = [[self.ammoStoreImage cutAt:CGRectMake(x, y, size, size)] makeRoundCornersOfSize:CGSizeMake(corners, corners)]; weaponCell.weaponIcon.image = img; diff -r b831679e9467 -r 074ab6ebcb3e project_files/HedgewarsMobile/Classes/TeamConfigViewController.m --- a/project_files/HedgewarsMobile/Classes/TeamConfigViewController.m Tue Oct 25 22:51:10 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/TeamConfigViewController.m Wed Oct 26 00:30:35 2011 +0200 @@ -108,35 +108,6 @@ return numberOfHogs; } --(UIImage *)drawHogsRepeated:(NSInteger) manyTimes { - NSString *imgString = [[NSString alloc] initWithFormat:@"%@/hedgehog.png",[[NSBundle mainBundle] resourcePath]]; - UIImage *hogSprite = [[UIImage alloc] initWithContentsOfFile:imgString]; - [imgString release]; - CGFloat screenScale = [[UIScreen mainScreen] scale]; - int w = hogSprite.size.width * screenScale; - int h = hogSprite.size.height * screenScale; - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGContextRef context = CGBitmapContextCreate(NULL, w * 3, h, 8, 4 * w * 3, colorSpace, kCGImageAlphaPremultipliedFirst); - - // draw the two images in the current context - for (int i = 0; i < manyTimes; i++) - CGContextDrawImage(context, CGRectMake(i*8*screenScale, 0, w, h), [hogSprite CGImage]); - [hogSprite release]; - - // Create bitmap image info from pixel data in current context - CGImageRef imageRef = CGBitmapContextCreateImage(context); - - // Create a new UIImage object - UIImage *resultImage = [UIImage imageWithCGImage:imageRef scale:screenScale orientation:UIImageOrientationUp]; - - // Release colorspace, context and bitmap information - CGColorSpaceRelease(colorSpace); - CGContextRelease(context); - CFRelease(imageRef); - - return resultImage; -} - #pragma mark - #pragma mark Table view data source -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView { @@ -174,7 +145,7 @@ [squareButton setTitle:[hogNumber stringValue] forState:UIControlStateNormal]; squareButton.ownerDictionary = selectedRow; - cell.imageView.image = [self drawHogsRepeated:[hogNumber intValue]]; + cell.imageView.image = [UIImage drawHogsRepeated:[hogNumber intValue]]; ((HoldTableViewCell *)cell).delegate = self; } else { cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier1]; @@ -277,7 +248,7 @@ [squareButton setTitle:[newNumber stringValue] forState:UIControlStateNormal]; [selectedRow setObject:newNumber forKey:@"number"]; - cell.imageView.image = [self drawHogsRepeated:[newNumber intValue]]; + cell.imageView.image = [UIImage drawHogsRepeated:[newNumber intValue]]; } } diff -r b831679e9467 -r 074ab6ebcb3e project_files/HedgewarsMobile/Classes/UIImageExtra.h --- a/project_files/HedgewarsMobile/Classes/UIImageExtra.h Tue Oct 25 22:51:10 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/UIImageExtra.h Wed Oct 26 00:30:35 2011 +0200 @@ -25,6 +25,7 @@ @interface UIImage (extra) +(UIImage *)whiteImage:(CGSize) ofSize; ++(UIImage *)drawHogsRepeated:(NSInteger) manyTimes; +(CGSize) imageSizeFromMetadataOf:(NSString *)aFileName; -(UIImage *)scaleToSize:(CGSize) size; diff -r b831679e9467 -r 074ab6ebcb3e project_files/HedgewarsMobile/Classes/UIImageExtra.m --- a/project_files/HedgewarsMobile/Classes/UIImageExtra.m Tue Oct 25 22:51:10 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/UIImageExtra.m Wed Oct 26 00:30:35 2011 +0200 @@ -25,22 +25,30 @@ @implementation UIImage (extra) -(UIImage *)scaleToSize:(CGSize) size { - DLog(@"warning - this is a very expensive operation, you should avoid using it"); + // Create a bitmap graphics context; this will also set it as the current context + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGContextRef context = CGBitmapContextCreate(NULL, size.width, size.height, 8, 4 * size.width, colorSpace, kCGImageAlphaPremultipliedFirst); - // Create a bitmap graphics context; this will also set it as the current context - UIGraphicsBeginImageContextWithOptions(size, NO, [[UIScreen mainScreen] scale]); + // draw the image inside the context + CGFloat screenScale = [[UIScreen mainScreen] safeScale]; + CGContextDrawImage(context, CGRectMake(0, 0, size.width*screenScale, size.height*screenScale), self.CGImage); - // Draw the scaled image in the current context - [self drawInRect:CGRectMake(0, 0, size.width, size.height)]; + // Create bitmap image info from pixel data in current context + CGImageRef imageRef = CGBitmapContextCreateImage(context); - // Create a new image from current context - UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext(); + // Create a new UIImage object + UIImage *resultImage; + if ([UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)]) + resultImage = [UIImage imageWithCGImage:imageRef scale:screenScale orientation:UIImageOrientationUp]; + else + resultImage = [UIImage imageWithCGImage:imageRef]; - // Pop the current context from the stack - UIGraphicsEndImageContext(); + // Release colorspace, context and bitmap information + CGColorSpaceRelease(colorSpace); + CGContextRelease(context); + CFRelease(imageRef); - // Return our new scaled image (autoreleased) - return scaledImage; + return resultImage; } -(UIImage *)mergeWith:(UIImage *)secondImage atPoint:(CGPoint) secondImagePoint { @@ -48,7 +56,7 @@ DLog(@"Warning, secondImage == nil"); return self; } - CGFloat screenScale = [[UIScreen mainScreen] scale]; + CGFloat screenScale = [[UIScreen mainScreen] safeScale]; int w = self.size.width * screenScale; int h = self.size.height * screenScale; int yOffset = self.size.height - secondImage.size.height + secondImagePoint.y; @@ -57,26 +65,30 @@ DLog(@"Cannot have 0 dimesions"); return self; } - + // Create a bitmap graphics context; this will also set it as the current context CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = CGBitmapContextCreate(NULL, w, h+yOffset, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst); - + // draw the two images in the current context CGContextDrawImage(context, CGRectMake(0, 0, self.size.width*screenScale, self.size.height*screenScale), [self CGImage]); CGContextDrawImage(context, CGRectMake(secondImagePoint.x*screenScale, secondImagePoint.y*screenScale, secondImage.size.width*screenScale, secondImage.size.height*screenScale), [secondImage CGImage]); - + // Create bitmap image info from pixel data in current context CGImageRef imageRef = CGBitmapContextCreateImage(context); - + // Create a new UIImage object - UIImage *resultImage = [UIImage imageWithCGImage:imageRef scale:screenScale orientation:UIImageOrientationUp]; + UIImage *resultImage; + if ([UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)]) + resultImage = [UIImage imageWithCGImage:imageRef scale:screenScale orientation:UIImageOrientationUp]; + else + resultImage = [UIImage imageWithCGImage:imageRef]; // Release colorspace, context and bitmap information CGColorSpaceRelease(colorSpace); CGContextRelease(context); CFRelease(imageRef); - + return resultImage; } @@ -190,7 +202,7 @@ -(UIImage *)makeRoundCornersOfSize:(CGSize) sizewh { CGFloat cornerWidth = sizewh.width; CGFloat cornerHeight = sizewh.height; - CGFloat screenScale = [[UIScreen mainScreen] scale]; + CGFloat screenScale = [[UIScreen mainScreen] safeScale]; CGFloat w = self.size.width * screenScale; CGFloat h = self.size.height * screenScale; @@ -209,11 +221,14 @@ CGContextRelease(context); CGColorSpaceRelease(colorSpace); - UIImage *newImage = [UIImage imageWithCGImage:imageMasked scale:screenScale orientation:UIImageOrientationUp]; - + UIImage *resultImage; + if ([UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)]) + resultImage = [UIImage imageWithCGImage:imageMasked scale:screenScale orientation:UIImageOrientationUp]; + else + resultImage = [UIImage imageWithCGImage:imageMasked]; CGImageRelease(imageMasked); - return newImage; + return resultImage; } // by http://www.sixtemia.com/journal/2010/06/23/uiimage-negative-color-effect/ @@ -251,6 +266,39 @@ return bkgImg; } ++(UIImage *)drawHogsRepeated:(NSInteger) manyTimes { + NSString *imgString = [[NSString alloc] initWithFormat:@"%@/hedgehog.png",[[NSBundle mainBundle] resourcePath]]; + UIImage *hogSprite = [[UIImage alloc] initWithContentsOfFile:imgString]; + [imgString release]; + CGFloat screenScale = [[UIScreen mainScreen] safeScale]; + int w = hogSprite.size.width * screenScale; + int h = hogSprite.size.height * screenScale; + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGContextRef context = CGBitmapContextCreate(NULL, w * 3, h, 8, 4 * w * 3, colorSpace, kCGImageAlphaPremultipliedFirst); + + // draw the two images in the current context + for (int i = 0; i < manyTimes; i++) + CGContextDrawImage(context, CGRectMake(i*8*screenScale, 0, w, h), [hogSprite CGImage]); + [hogSprite release]; + + // Create bitmap image info from pixel data in current context + CGImageRef imageRef = CGBitmapContextCreateImage(context); + + // Create a new UIImage object + UIImage *resultImage; + if ([UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)]) + resultImage = [UIImage imageWithCGImage:imageRef scale:screenScale orientation:UIImageOrientationUp]; + else + resultImage = [UIImage imageWithCGImage:imageRef]; + + // Release colorspace, context and bitmap information + CGColorSpaceRelease(colorSpace); + CGContextRelease(context); + CFRelease(imageRef); + + return resultImage; +} + // this routine checks for the PNG size without loading it in memory // https://github.com/steipete/PSFramework/blob/master/PSFramework%20Version%200.3/PhotoshopFramework/PSMetaDataFunctions.m +(CGSize) imageSizeFromMetadataOf:(NSString *)aFileName { diff -r b831679e9467 -r 074ab6ebcb3e project_files/HedgewarsMobile/ExtraCategories.h --- a/project_files/HedgewarsMobile/ExtraCategories.h Tue Oct 25 22:51:10 2011 +0200 +++ b/project_files/HedgewarsMobile/ExtraCategories.h Wed Oct 26 00:30:35 2011 +0200 @@ -22,6 +22,13 @@ #import +@interface UIScreen (safe) + +-(CGFloat) safeScale; + +@end + + @interface UITableView (backgroundColor) -(void) setBackgroundColorForAnyTable:(UIColor *)color; diff -r b831679e9467 -r 074ab6ebcb3e project_files/HedgewarsMobile/ExtraCategories.m --- a/project_files/HedgewarsMobile/ExtraCategories.m Tue Oct 25 22:51:10 2011 +0200 +++ b/project_files/HedgewarsMobile/ExtraCategories.m Wed Oct 26 00:30:35 2011 +0200 @@ -23,6 +23,19 @@ #import #import + +@implementation UIScreen (safe) + +-(CGFloat) safeScale { + CGFloat theScale = 1.0f; + if ([self respondsToSelector:@selector(scale)]) + theScale = [self scale]; + return theScale; +} + +@end + + @implementation UITableView (backgroundColor) -(void) setBackgroundColorForAnyTable:(UIColor *) color {