X-Git-Url: https://git.saurik.com/winterboard.git/blobdiff_plain/797e41643364390e7e0a6848f9a60dbf7a7d49d0..008ae666f2fe7c95881638bad38c6938bbe1f19e:/Library.mm diff --git a/Library.mm b/Library.mm index 65de6d8..0897249 100644 --- a/Library.mm +++ b/Library.mm @@ -269,8 +269,7 @@ static NSArray *$useScale$(NSArray *files, bool use = true) { if (use) { if (Scale_ == 2) { [scaled addObject:[NSString stringWithFormat:@"%@@2x~%@.%@", base, idiom, extension]]; - if (!IsWild_) - [scaled addObject:[NSString stringWithFormat:@"%@@2x.%@", base, extension]]; + [scaled addObject:[NSString stringWithFormat:@"%@@2x.%@", base, extension]]; } [scaled addObject:[NSString stringWithFormat:@"%@~%@.%@", base, idiom, extension]]; @@ -278,20 +277,20 @@ static NSArray *$useScale$(NSArray *files, bool use = true) { // if (!IsWild_) <- support old themes [scaled addObject:file]; } else if ([base hasSuffix: @"@2x"]) { - [scaled addObject:[NSString stringWithFormat:@"%@~iphone.%@", base, extension]]; + [scaled addObject:[NSString stringWithFormat:@"%@~%@.%@", base, idiom, extension]]; [scaled addObject:file]; // XXX: this actually can't be used, as the person loading the file doesn't realize that the @2x changed /*NSString *rest([base substringWithRange:NSMakeRange(0, [base length] - 3)]); - [scaled addObject:[NSString stringWithFormat:@"%@~iphone.%@", rest, extension]]; + [scaled addObject:[NSString stringWithFormat:@"%@~%@.%@", rest, idiom, extension]]; [scaled addObject:[rest stringByAppendingPathExtension:extension]];*/ } else { // XXX: this code isn't really complete [scaled addObject:file]; - if ([base hasSuffix:@"~iphone"]) - [scaled addObject:[[base substringWithRange:NSMakeRange(0, [base length] - 7)] stringByAppendingPathExtension:extension]]; + if ([base hasSuffix:[NSString stringWithFormat:@"~%@", idiom]]) + [scaled addObject:[[base substringWithRange:NSMakeRange(0, [base length] - 1 - [idiom length])] stringByAppendingPathExtension:extension]]; } } @@ -315,8 +314,11 @@ static NSString *$getTheme$(NSArray *files, NSArray *themes = Themes_) { for (NSString *theme in Themes_) for (NSString *file in files) { path = [NSString stringWithFormat:@"%@/%@", theme, file]; - if ([Manager_ fileExistsAtPath:path]) + if ([Manager_ fileExistsAtPath:path]) { + if ([[Manager_ pathContentOfSymbolicLinkAtPath:path] isEqualToString:@"/"]) + path = nil; goto set; + } } path = nil; @@ -341,6 +343,8 @@ static NSString *$pathForFile$inBundle$(NSString *file, NSBundle *bundle, bool u NSString *base([folder stringByDeletingPathExtension]); if ([base hasSuffix:@"~iphone"]) [names addObject:[NSString stringWithFormat:@"Folders/%@.%@/%@", [base substringWithRange:NSMakeRange(0, [base length] - 7)], [folder pathExtension], file]]; + if ([base hasSuffix:@"~ipad"]) + [names addObject:[NSString stringWithFormat:@"Folders/%@.%@/%@", [base substringWithRange:NSMakeRange(0, [base length] - 5)], [folder pathExtension], file]]; } if (ui) [names addObject:[NSString stringWithFormat:@"UIImages/%@", file]]; @@ -870,7 +874,7 @@ MSInstanceMessageHook1(CGSize, NSString, sizeWithFont, UIFont *, font) { } MSInstanceMessageHook1(UIImage *, SBIconBadgeFactory, checkoutBadgeImageForText, NSString *, text) { - WBStringDrawingState badgeState = {NULL, 1, @"" + WBStringDrawingState badgeState = {NULL, -1, @"" , @"BadgeStyle"}; stringDrawingState_ = &badgeState; @@ -1530,11 +1534,20 @@ MSHook(void, SBStatusBarTimeView$drawRect$, SBStatusBarTimeView *self, SEL sel, @end -MSHook(void, SBIconList$setFrame$, SBIconList *self, SEL sel, CGRect frame) { +static void SBIconList$updateFrames$(SBIconList *self) { NSArray *subviews([self subviews]); WBImageView *view([subviews count] == 0 ? nil : [subviews objectAtIndex:0]); if (view != nil && [view wb$isWBImageView]) [view wb$updateFrame]; +} + +MSHook(void, SBIconList$didMoveToSuperview, SBIconList *self, SEL sel) { + SBIconList$updateFrames$(self); + _SBIconList$didMoveToSuperview(self, sel); +} + +MSHook(void, SBIconList$setFrame$, SBIconList *self, SEL sel, CGRect frame) { + SBIconList$updateFrames$(self); _SBIconList$setFrame$(self, sel, frame); } @@ -1929,7 +1942,7 @@ static void ChangeWallpaper( } #define WBRename(name, sel, imp) \ - _ ## name ## $ ## imp = MSHookMessage($ ## name, @selector(sel), &$ ## name ## $ ## imp) + MSHookMessage($ ## name, @selector(sel), &$ ## name ## $ ## imp, &_ ## name ## $ ## imp) template static void msset(Type_ &function, MSImageRef image, const char *name) { @@ -1959,13 +1972,33 @@ MSHook(void *, CGImageReadCreateWithFile, NSString *path, int flag) { [pool release]; return value; } + +MSHook(void *, CGImageSourceCreateWithFile, NSString *path, NSDictionary *options) { + if (Debug_) + NSLog(@"WB:Debug: CGImageSourceCreateWithFile(%@, %@)", path, options); + NSAutoreleasePool *pool([[NSAutoreleasePool alloc] init]); + void *value(_CGImageSourceCreateWithFile([path wb$themedPath], options)); + [pool release]; + return value; +} + +MSHook(void *, CGImageSourceCreateWithURL, NSURL *url, NSDictionary *options) { + if (Debug_) + NSLog(@"WB:Debug: CGImageSourceCreateWithURL(%@, %@)", url, options); + NSAutoreleasePool *pool([[NSAutoreleasePool alloc] init]); + if ([url isFileURL]) + url = [NSURL fileURLWithPath:[[url path] wb$themedPath]]; + void *value(_CGImageSourceCreateWithURL(url, options)); + [pool release]; + return value; +} // }}} static void NSString$drawAtPoint$withStyle$(NSString *self, SEL _cmd, CGPoint point, NSString *style) { WKSetCurrentGraphicsContext(UIGraphicsGetCurrentContext()); if (style == nil || [style length] == 0) style = @"font-family: Helvetica; font-size: 12px"; - //NSLog(@"XXX:draw(%@)", [style stringByReplacingOccurrencesOfString:@"\n" withString:@" "]); + //NSLog(@"XXX:drawP(%@)", [style stringByReplacingOccurrencesOfString:@"\n" withString:@" "]); return [[WBMarkup sharedMarkup] drawString:self atPoint:point withStyle:style]; } @@ -1973,6 +2006,7 @@ static void NSString$drawInRect$withStyle$(NSString *self, SEL _cmd, CGRect rect WKSetCurrentGraphicsContext(UIGraphicsGetCurrentContext()); if (style == nil || [style length] == 0) style = @"font-family: Helvetica; font-size: 12px"; + //NSLog(@"XXX:drawR(%@)", [style stringByReplacingOccurrencesOfString:@"\n" withString:@" "]); return [[WBMarkup sharedMarkup] drawString:self inRect:rect withStyle:style]; } @@ -2009,6 +2043,7 @@ static void SBInitialize() { WBRename(SBIconLabel, initWithSize:label:, initWithSize$label$); WBRename(SBIconLabel, setInDock:, setInDock$); + WBRename(SBIconList, didMoveToSuperview, didMoveToSuperview); WBRename(SBIconList, setFrame:, setFrame$); WBRename(SBIconModel, cacheImageForIcon:, cacheImageForIcon$); @@ -2121,6 +2156,16 @@ MSInitialize { void *(*CGImageReadCreateWithFile)(NSString *, int); msset(CGImageReadCreateWithFile, image, "_CGImageReadCreateWithFile"); MSHookFunction(CGImageReadCreateWithFile, MSHake(CGImageReadCreateWithFile)); + + if (CGImageReadCreateWithFile == NULL) { + void *(*CGImageSourceCreateWithFile)(NSString *, NSDictionary *); + msset(CGImageSourceCreateWithFile, image, "_CGImageSourceCreateWithFile"); + MSHookFunction(CGImageSourceCreateWithFile, MSHake(CGImageSourceCreateWithFile)); + + void *(*CGImageSourceCreateWithURL)(NSURL *, NSDictionary *); + msset(CGImageSourceCreateWithURL, image, "_CGImageSourceCreateWithURL"); + MSHookFunction(CGImageSourceCreateWithURL, MSHake(CGImageSourceCreateWithURL)); + } } // }}} // SpringBoard {{{