X-Git-Url: https://git.saurik.com/winterboard.git/blobdiff_plain/9e42420fe1c01a383597cbf6eda65fefea1f8916..f64efe8dd19cc767a0e92d036d26fe891b216cfc:/Library.mm diff --git a/Library.mm b/Library.mm index ea458e3..665f765 100644 --- a/Library.mm +++ b/Library.mm @@ -60,6 +60,7 @@ bool _itv; #import #import #import +#import #import #import @@ -143,6 +144,8 @@ Class $SBStatusBarTimeView; Class $SBUIController; Class $SBWidgetApplicationIcon; +static bool IsWild_; + @interface NSDictionary (WinterBoard) - (UIColor *) wb$colorForKey:(NSString *)key; - (BOOL) wb$boolForKey:(NSString *)key; @@ -170,8 +173,10 @@ static BOOL (*_GSFontGetUseLegacyFontMetrics)(); #define $GSFontGetUseLegacyFontMetrics() \ (_GSFontGetUseLegacyFontMetrics == NULL ? YES : _GSFontGetUseLegacyFontMetrics()) -bool Debug_ = false; -bool Engineer_ = false; +static bool Debug_ = false; +static bool Engineer_ = false; +static bool SummerBoard_ = true; +static bool SpringBoard_; static UIImage *(*_UIApplicationImageWithName)(NSString *name); static UIImage *(*_UIImageAtPath)(NSString *name, NSBundle *path); @@ -234,22 +239,25 @@ static NSString *$pathForFile$inBundle$(NSString *file, NSBundle *bundle, bool u else if ([file isEqualToString:oldname]) \ [names addObject:[NSString stringWithFormat:@"%@.png", newname]]; \ + bool summer(SpringBoard_ && SummerBoard_); + if (identifier == nil); else if ([identifier isEqualToString:@"com.apple.chatkit"]) [names addObject:[NSString stringWithFormat:@"Bundles/com.apple.MobileSMS/%@", file]]; else if ([identifier isEqualToString:@"com.apple.calculator"]) [names addObject:[NSString stringWithFormat:@"Files/Applications/Calculator.app/%@", file]]; - else if (![identifier isEqualToString:@"com.apple.springboard"]); + else if (!summer); remapResourceName(@"FSO_BG.png", @"StatusBar") remapResourceName(@"SBDockBG.png", @"Dock") remapResourceName(@"SBWeatherCelsius.png", @"Icons/Weather") if (NSString *path = $getTheme$(names)) return path; + return nil; } -static NSString *$pathForIcon$(SBApplication *self) { +static NSString *$pathForIcon$(SBApplication *self, NSString *suffix = @"") { NSString *identifier = [self bundleIdentifier]; NSString *path = [self path]; NSString *folder = [path lastPathComponent]; @@ -261,20 +269,25 @@ static NSString *$pathForIcon$(SBApplication *self) { NSMutableArray *names = [NSMutableArray arrayWithCapacity:8]; + /* XXX: I might need to keep this for backwards compatibility if (identifier != nil) [names addObject:[NSString stringWithFormat:@"Bundles/%@/icon.png", identifier]]; if (folder != nil) - [names addObject:[NSString stringWithFormat:@"Folders/%@/icon.png", folder]]; + [names addObject:[NSString stringWithFormat:@"Folders/%@/icon.png", folder]]; */ #define testForIcon(Name) \ if (NSString *name = Name) \ - [names addObject:[NSString stringWithFormat:@"Icons/%@.png", name]]; + [names addObject:[NSString stringWithFormat:@"Icons%@/%@.png", suffix, name]]; if (![didentifier isEqualToString:identifier]) testForIcon(didentifier); + testForIcon(identifier); testForIcon(dname); + if ([identifier isEqualToString:@"com.apple.MobileSMS"]) + testForIcon(@"SMS"); + if (didentifier != nil) { testForIcon([English_ objectForKey:didentifier]); @@ -286,6 +299,7 @@ static NSString *$pathForIcon$(SBApplication *self) { if (NSString *path = $getTheme$(names)) return path; + return nil; } @@ -457,6 +471,18 @@ MSHook(UIImage *, SBApplicationIcon$icon, SBApplicationIcon *self, SEL sel) { return _SBApplicationIcon$icon(self, sel); } +MSHook(UIImage *, SBApplicationIcon$generateIconImage$, SBApplicationIcon *self, SEL sel, int type) { + if (type == 2) + if (![Info_ wb$boolForKey:@"ComposeStoreIcons"]) { + if (NSString *path72 = $pathForIcon$([self application], @"-72")) + return [UIImage imageWithContentsOfFile:path72]; + else if (NSString *path = $pathForIcon$([self application])) + if (UIImage *image = [UIImage imageWithContentsOfFile:path]) + return [image _imageScaledToProportion:1.2 interpolationQuality:5]; + } + return _SBApplicationIcon$generateIconImage$(self, sel, type); +} + MSHook(UIImage *, SBWidgetApplicationIcon$icon, SBWidgetApplicationIcon *self, SEL sel) { if (Debug_) NSLog(@"WB:Debug:Widget(%@:%@)", [self displayIdentifier], [self displayName]); @@ -491,10 +517,36 @@ static UIImage *CachedImageAtPath(NSString *path) { return image; } +MSHook(CGImageSourceRef, CGImageSourceCreateWithURL, CFURLRef url, CFDictionaryRef options) { + if (Debug_) + NSLog(@"WB:Debug: CGImageSourceCreateWithURL(\"%@\", %s)", url, options); + NSAutoreleasePool *pool([[NSAutoreleasePool alloc] init]); + if (NSString *path = (NSString *) CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle)) + if (NSString *themed = [path wb$themedPath]) + if (themed != path) + url = (CFURLRef) [NSURL fileURLWithPath:themed]; + CGImageSourceRef source(_CGImageSourceCreateWithURL(url, options)); + [pool release]; + return source; +} + MSHook(CGImageRef, _UIImageRefAtPath, NSString *name, bool cache, UIImageOrientation *orientation) { if (Debug_) NSLog(@"WB:Debug: _UIImageRefAtPath(\"%@\", %s)", name, cache ? "true" : "false"); - return __UIImageRefAtPath([name wb$themedPath], cache, orientation); + + NSString *themed([name wb$themedPath]); + + if (false && SpringBoard_ && SummerBoard_ && themed == name) { + if ([name isEqualToString:@"/System/Library/CoreServices/SpringBoard.app/SBDockBGT-Portrait.png"]) + if (NSString *path = $getTheme$([NSArray arrayWithObject:@"Dock.png"])) { + UIImage *image([UIImage imageWithContentsOfFile:path]); + CGImageRef ref([[image _imageScaledToProportion:2.4 interpolationQuality:5] imageRef]); + CGImageRetain(ref); + return ref; + } + } + + return __UIImageRefAtPath(themed, cache, orientation); } /*MSHook(UIImage *, _UIImageAtPath, NSString *name, NSBundle *bundle) { @@ -585,21 +637,25 @@ MSHook(void, SBCalendarIconContentsView$drawRect$, SBCalendarIconContentsView *s CFRelease(formatter); - NSString *datestyle(@"" + NSString *datestyle([@"" "font-family: Helvetica; " "font-weight: bold; " - "font-size: 39px; " "color: #333333; " "alpha: 1.0; " - ""); + "" stringByAppendingString:(IsWild_ + ? @"font-size: 54px; " + : @"font-size: 39px; " + )]); - NSString *daystyle(@"" + NSString *daystyle([@"" "font-family: Helvetica; " "font-weight: bold; " - "font-size: 9px; " "color: white; " "text-shadow: rgba(0, 0, 0, 0.2) -1px -1px 2px; " - ""); + "" stringByAppendingString:(IsWild_ + ? @"font-size: 11px; " + : @"font-size: 9px; " + )]); if (NSString *style = [Info_ objectForKey:@"CalendarIconDateStyle"]) datestyle = [datestyle stringByAppendingString:style]; @@ -611,14 +667,16 @@ MSHook(void, SBCalendarIconContentsView$drawRect$, SBCalendarIconContentsView *s CGSize datesize = [(NSString *)date sizeWithStyle:datestyle forWidth:(width + leeway)]; CGSize daysize = [(NSString *)day sizeWithStyle:daystyle forWidth:(width + leeway)]; - unsigned base($GSFontGetUseLegacyFontMetrics() ? 71 : 70); + unsigned base(IsWild_ ? 89 : 70); + if ($GSFontGetUseLegacyFontMetrics()) + base = base + 1; [(NSString *)date drawAtPoint:CGPointMake( (width + 1 - datesize.width) / 2, (base - datesize.height) / 2 ) withStyle:datestyle]; [(NSString *)day drawAtPoint:CGPointMake( - (width + 1 - daysize.width) / 2, (16 - daysize.height) / 2 + (width + 1 - daysize.width) / 2, ((IsWild_ ? 18 : 16) - daysize.height) / 2 ) withStyle:daystyle]; CFRelease(date); @@ -682,6 +740,7 @@ MSHook(UIImage *, UIImage$defaultDesktopImage, UIImage *self, SEL sel) { } static NSArray *Wallpapers_; +static bool Papered_; static NSString *WallpaperFile_; static UIImageView *WallpaperImage_; static UIWebDocumentView *WallpaperPage_; @@ -698,6 +757,18 @@ MSHook(id, SBUIController$init, SBUIController *self, SEL sel) { if (self == nil) return nil; + UIDevice *device([UIDevice currentDevice]); + IsWild_ = [device respondsToSelector:@selector(isWildcat)] && [device isWildcat]; + + if (Papered_) { + UIWindow *&_wallpaperView(MSHookIvar(self, "_wallpaperView")); + if (&_wallpaperView != NULL) { + [_wallpaperView removeFromSuperview]; + [_wallpaperView release]; + _wallpaperView = nil; + } + } + UIWindow *&_window(MSHookIvar(self, "_window")); UIView *&_contentLayer(MSHookIvar(self, "_contentLayer")); UIView *&_contentView(MSHookIvar(self, "_contentView")); @@ -711,11 +782,23 @@ MSHook(id, SBUIController$init, SBUIController *self, SEL sel) { layer = nil; UIView *content([[[UIView alloc] initWithFrame:[layer frame]] autorelease]); + [content setBackgroundColor:[layer backgroundColor]]; [layer setBackgroundColor:[UIColor clearColor]]; [layer setFrame:[content bounds]]; [_window setContentView:content]; + UIView *indirect; + if (!SummerBoard_ || !IsWild_) + indirect = content; + else { + CGRect bounds([content bounds]); + bounds.origin.y = -30; + indirect = [[[UIView alloc] initWithFrame:bounds] autorelease]; + [content addSubview:indirect]; + [indirect zoomToScale:2.4]; + } + _release(WallpaperFile_); _release(WallpaperImage_); _release(WallpaperPage_); @@ -735,7 +818,7 @@ MSHook(id, SBUIController$init, SBUIController *self, SEL sel) { AVQueue *queue([controller_ queue]); - UIView *video([[[UIView alloc] initWithFrame:[content bounds]] autorelease]); + UIView *video([[[UIView alloc] initWithFrame:[indirect bounds]] autorelease]); [controller_ setLayer:[video _layer]]; AVItem *item([[[AVItem alloc] initWithPath:mp4 error:&error] autorelease]); @@ -744,18 +827,18 @@ MSHook(id, SBUIController$init, SBUIController *self, SEL sel) { [controller_ play:&error]; #elif UseMPMoviePlayerController NSURL *url([NSURL fileURLWithPath:mp4]); - MPMoviePlayerController *controller = [[MPMoviePlayerController alloc] initWithContentURL:url]; + MPMoviePlayerController *controller = [[$MPMoviePlayerController alloc] initWithContentURL:url]; controller.movieControlMode = MPMovieControlModeHidden; [controller play]; #else - MPVideoView *video = [[[$MPVideoView alloc] initWithFrame:[content bounds]] autorelease]; + MPVideoView *video = [[[$MPVideoView alloc] initWithFrame:[indirect bounds]] autorelease]; [video setMovieWithPath:mp4]; [video setRepeatMode:1]; [video setRepeatGap:-1]; [video playFromBeginning];; #endif - [content addSubview:video]; + [indirect addSubview:video]; } NSString *png = [theme stringByAppendingPathComponent:@"Wallpaper.png"]; @@ -780,12 +863,12 @@ MSHook(id, SBUIController$init, SBUIController *self, SEL sel) { WallpaperImage_ = [[UIImageView alloc] initWithImage:image]; if (NSNumber *number = [Info_ objectForKey:@"WallpaperAlpha"]) [WallpaperImage_ setAlpha:[number floatValue]]; - [content addSubview:WallpaperImage_]; + [indirect addSubview:WallpaperImage_]; } NSString *html = [theme stringByAppendingPathComponent:@"Wallpaper.html"]; if ([Manager_ fileExistsAtPath:html]) { - CGRect bounds = [content bounds]; + CGRect bounds = [indirect bounds]; UIWebDocumentView *view([[[UIWebDocumentView alloc] initWithFrame:bounds] autorelease]); [view setAutoresizes:true]; @@ -800,7 +883,7 @@ MSHook(id, SBUIController$init, SBUIController *self, SEL sel) { [view setDrawsBackground:NO]; [[view webView] setDrawsBackground:NO]; - [content addSubview:view]; + [indirect addSubview:view]; } } @@ -808,7 +891,7 @@ MSHook(id, SBUIController$init, SBUIController *self, SEL sel) { NSString *theme = [themes_ objectAtIndex:(e - i - 1)]; NSString *html = [theme stringByAppendingPathComponent:@"Widget.html"]; if ([Manager_ fileExistsAtPath:html]) { - CGRect bounds = [content bounds]; + CGRect bounds = [indirect bounds]; UIWebDocumentView *view([[[UIWebDocumentView alloc] initWithFrame:bounds] autorelease]); [view setAutoresizes:true]; @@ -821,7 +904,7 @@ MSHook(id, SBUIController$init, SBUIController *self, SEL sel) { [view setDrawsBackground:NO]; [[view webView] setDrawsBackground:NO]; - [content addSubview:view]; + [indirect addSubview:view]; } } @@ -1170,7 +1253,7 @@ MSHook(void, SBIconLabel$drawRect$, SBIconLabel *self, SEL sel, CGRect rect) { static Ivar drawMoreLegibly = object_getInstanceVariable(self, "_drawMoreLegibly", NULL); - BOOL docked; + int docked; Ivar ivar = object_getInstanceVariable(self, "_inDock", reinterpret_cast(&docked)); docked = (docked & (ivar_getOffset(ivar) == ivar_getOffset(drawMoreLegibly) ? 0x2 : 0x1)) != 0; @@ -1179,11 +1262,15 @@ MSHook(void, SBIconLabel$drawRect$, SBIconLabel *self, SEL sel, CGRect rect) { NSString *style = [NSString stringWithFormat:@"" "font-family: Helvetica; " "font-weight: bold; " - "font-size: 11px; " - "color: %@; " - "", docked ? @"white" : @"#b3b3b3"]; - - if (docked) + "color: %@; %@" + "", (docked || !SummerBoard_ ? @"white" : @"#b3b3b3"), (IsWild_ + ? @"font-size: 12px; " + : @"font-size: 11px; " + )]; + + if (IsWild_) + style = [style stringByAppendingString:@"text-shadow: rgba(0, 0, 0, 0.5) 0px 1px 0px; "]; + else if (docked) style = [style stringByAppendingString:@"text-shadow: rgba(0, 0, 0, 0.5) 0px -1px 0px; "]; bool ellipsis(false); @@ -1315,6 +1402,8 @@ MSHook(GSFontRef, GSFontCreateWithName, const char *name, GSFontSymbolicTraits t NSLog(@"WB:Debug: GSFontCreateWithName(\"%s\", %f)", name, size); if (NSString *font = [Info_ objectForKey:[NSString stringWithFormat:@"FontName-%s", name]]) name = [font UTF8String]; + //if (NSString *scale = [Info_ objectForKey:[NSString stringWithFormat:@"FontScale-%s", name]]) + // size *= [scale floatValue]; return _GSFontCreateWithName(name, traits, size); } @@ -1387,8 +1476,18 @@ static void dlset(Type_ &function, const char *name) { function = reinterpret_cast(dlsym(RTLD_DEFAULT, name)); } +/*static void WBImage(const struct mach_header* mh, intptr_t vmaddr_slide) { + uint32_t count(_dyld_image_count()); + for (uint32_t index(0); index != count; ++index) + if (_dyld_get_image_header(index) == mh) { + CGImageSourceRef (*CGImageSourceCreateWithURL)(CFURLRef url, CFDictionaryRef options); + dlset(CGImageSourceCreateWithURL, "CGImageSourceCreateWithURL"); + MSHookFunction(&CGImageSourceCreateWithURL, &$CGImageSourceCreateWithURL, &_CGImageSourceCreateWithURL); + } +}*/ + extern "C" void WBInitialize() { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSAutoreleasePool *pool([[NSAutoreleasePool alloc] init]); NSString *identifier([[NSBundle mainBundle] bundleIdentifier]); @@ -1396,40 +1495,51 @@ extern "C" void WBInitialize() { dlset(_GSFontGetUseLegacyFontMetrics, "GSFontGetUseLegacyFontMetrics"); + //if ([NSBundle bundleWithIdentifier:@"com.apple.ImageIO.framework"] != nil) + MSHookFunction(&CGImageSourceCreateWithURL, &$CGImageSourceCreateWithURL, &_CGImageSourceCreateWithURL); + //else + // _dyld_register_func_for_add_image(&WBImage); + struct nlist nl[8]; - memset(nl, 0, sizeof(nl)); - nl[0].n_un.n_name = (char *) "__UIApplicationImageWithName"; - nl[1].n_un.n_name = (char *) "__UIImageAtPath"; - nl[2].n_un.n_name = (char *) "__UIImageRefAtPath"; - nl[3].n_un.n_name = (char *) "__UIImageWithNameInDomain"; - nl[4].n_un.n_name = (char *) "__UIKitBundle"; - nl[5].n_un.n_name = (char *) "__UISharedImageNameGetIdentifier"; - nl[6].n_un.n_name = (char *) "__UISharedImageWithIdentifier"; - nlist(UIKit, nl); - - nlset(_UIApplicationImageWithName, nl, 0); - nlset(_UIImageAtPath, nl, 1); - nlset(_UIImageRefAtPath, nl, 2); - nlset(_UIImageWithNameInDomain, nl, 3); - nlset(_UIKitBundle, nl, 4); - nlset(_UISharedImageNameGetIdentifier, nl, 5); - nlset(_UISharedImageWithIdentifier, nl, 6); - - MSHookFunction(_UIApplicationImageWithName, &$_UIApplicationImageWithName, &__UIApplicationImageWithName); - MSHookFunction(_UIImageRefAtPath, &$_UIImageRefAtPath, &__UIImageRefAtPath); - MSHookFunction(_UIImageWithName, &$_UIImageWithName, &__UIImageWithName); - MSHookFunction(_UIImageWithNameInDomain, &$_UIImageWithNameInDomain, &__UIImageWithNameInDomain); + if ([NSBundle bundleWithIdentifier:@"com.apple.UIKit"] != nil) { +// UIKit {{{ + memset(nl, 0, sizeof(nl)); + nl[0].n_un.n_name = (char *) "__UIApplicationImageWithName"; + nl[1].n_un.n_name = (char *) "__UIImageAtPath"; + nl[2].n_un.n_name = (char *) "__UIImageRefAtPath"; + nl[3].n_un.n_name = (char *) "__UIImageWithNameInDomain"; + nl[4].n_un.n_name = (char *) "__UIKitBundle"; + nl[5].n_un.n_name = (char *) "__UISharedImageNameGetIdentifier"; + nl[6].n_un.n_name = (char *) "__UISharedImageWithIdentifier"; + nlist(UIKit, nl); + + nlset(_UIApplicationImageWithName, nl, 0); + nlset(_UIImageAtPath, nl, 1); + nlset(_UIImageRefAtPath, nl, 2); + nlset(_UIImageWithNameInDomain, nl, 3); + nlset(_UIKitBundle, nl, 4); + nlset(_UISharedImageNameGetIdentifier, nl, 5); + nlset(_UISharedImageWithIdentifier, nl, 6); + + MSHookFunction(_UIApplicationImageWithName, &$_UIApplicationImageWithName, &__UIApplicationImageWithName); + MSHookFunction(_UIImageRefAtPath, &$_UIImageRefAtPath, &__UIImageRefAtPath); + MSHookFunction(_UIImageWithName, &$_UIImageWithName, &__UIImageWithName); + MSHookFunction(_UIImageWithNameInDomain, &$_UIImageWithNameInDomain, &__UIImageWithNameInDomain); +// }}} + } MSHookFunction(&GSFontCreateWithName, &$GSFontCreateWithName, &_GSFontCreateWithName); if (dlopen(AudioToolbox, RTLD_LAZY | RTLD_NOLOAD) != NULL) { +// AudioToolbox {{{ struct nlist nl[2]; memset(nl, 0, sizeof(nl)); nl[0].n_un.n_name = (char *) "__Z24GetFileNameForThisActionmPcRb"; nlist(AudioToolbox, nl); nlset(_Z24GetFileNameForThisActionmPcRb, nl, 0); MSHookFunction(_Z24GetFileNameForThisActionmPcRb, &$_Z24GetFileNameForThisActionmPcRb, &__Z24GetFileNameForThisActionmPcRb); +// }}} } $NSBundle = objc_getClass("NSBundle"); @@ -1443,8 +1553,8 @@ extern "C" void WBInitialize() { _UIImage$defaultDesktopImage = MSHookMessage(object_getClass($UIImage), @selector(defaultDesktopImage), &$UIImage$defaultDesktopImage); - //WBRename("UINavigationBar", @selector(initWithCoder:", (IMP) &UINavigationBar$initWithCoder$); - //WBRename("UINavigationBarBackground", @selector(initWithFrame:withBarStyle:withTintColor:", (IMP) &UINavigationBarBackground$initWithFrame$withBarStyle$withTintColor$); + //WBRename("UINavigationBar", @selector(initWithCoder:), (IMP) &UINavigationBar$initWithCoder$); + //WBRename("UINavigationBarBackground", @selector(initWithFrame:withBarStyle:withTintColor:), (IMP) &UINavigationBarBackground$initWithFrame$withBarStyle$withTintColor$); _UINavigationBar$setBarStyle$ = MSHookMessage($UINavigationBar, @selector(setBarStyle:), &$UINavigationBar$setBarStyle$); _UIToolbar$setBarStyle$ = MSHookMessage($UIToolbar, @selector(setBarStyle:), &$UIToolbar$setBarStyle$); @@ -1458,30 +1568,32 @@ extern "C" void WBInitialize() { themes_ = [[NSMutableArray alloc] initWithCapacity:8]; - if (NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:[NSString stringWithFormat:@"/User/Library/Preferences/com.saurik.WinterBoard.plist"]]) { - [settings autorelease]; + if (NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat:@"/User/Library/Preferences/com.saurik.WinterBoard.plist"]]) { +// Load Settings {{{ + if (NSNumber *value = [settings objectForKey:@"SummerBoard"]) + SummerBoard_ = [value boolValue]; + if (NSNumber *value = [settings objectForKey:@"Debug"]) + Debug_ = [value boolValue]; - if (NSNumber *debug = [settings objectForKey:@"Debug"]) - Debug_ = [debug boolValue]; - - NSArray *themes = [settings objectForKey:@"Themes"]; + NSArray *themes([settings objectForKey:@"Themes"]); if (themes == nil) if (NSString *theme = [settings objectForKey:@"Theme"]) themes = [NSArray arrayWithObject:[NSDictionary dictionaryWithObjectsAndKeys: theme, @"Name", [NSNumber numberWithBool:true], @"Active", nil]]; + if (themes != nil) for (NSDictionary *theme in themes) { - NSNumber *active = [theme objectForKey:@"Active"]; + NSNumber *active([theme objectForKey:@"Active"]); if (![active boolValue]) continue; - NSString *name = [theme objectForKey:@"Name"]; + NSString *name([theme objectForKey:@"Name"]); if (name == nil) continue; - NSString *theme = nil; + NSString *theme(nil); #define testForTheme(format...) \ if (theme == nil) { \ @@ -1495,22 +1607,25 @@ extern "C" void WBInitialize() { testForTheme(@"/Library/Themes/%@.theme", name) testForTheme(@"/Library/Themes/%@", name) testForTheme(@"%@/Library/SummerBoard/Themes/%@", NSHomeDirectory(), name) + } +// }}} } Info_ = [[NSMutableDictionary dictionaryWithCapacity:16] retain]; for (NSString *theme in themes_) - if (NSDictionary *info = [[NSDictionary alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/Info.plist", theme]]) { - [info autorelease]; + if (NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat:@"%@/Info.plist", theme]]) for (NSString *key in [info allKeys]) if ([Info_ objectForKey:key] == nil) [Info_ setObject:[info objectForKey:key] forKey:key]; - } bool sms($getTheme$([NSArray arrayWithObjects:@"SMSBackground.png", @"SMSBackground.jpg", nil]) != nil); - if ([NSBundle bundleWithIdentifier:@"com.apple.chatkit"]) + SpringBoard_ = [identifier isEqualToString:@"com.apple.springboard"]; + + if ([NSBundle bundleWithIdentifier:@"com.apple.chatkit"] != nil) +// ChatKit {{{ if (sms) { $CKMessageCell = objc_getClass("CKMessageCell"); _CKMessageCell$addBalloonView$ = MSHookMessage($CKMessageCell, @selector(addBalloonView:), &$CKMessageCell$addBalloonView$); @@ -1526,26 +1641,33 @@ extern "C" void WBInitialize() { $CKTranscriptController = objc_getClass("CKTranscriptController"); _TranscriptController$loadView = MSHookMessage($CKTranscriptController, @selector(loadView), &$TranscriptController$loadView); } +// }}} if ([identifier isEqualToString:@"com.apple.MobileSMS"]) { +// MobileSMS {{{ if (sms) { if (_TranscriptController$loadView == NULL) { Class mSMSMessageTranscriptController = objc_getClass("mSMSMessageTranscriptController"); _TranscriptController$loadView = MSHookMessage(mSMSMessageTranscriptController, @selector(loadView), &$TranscriptController$loadView); } } - } else if ([identifier isEqualToString:@"com.apple.springboard"]) { +// }}} + } else if (SpringBoard_) { +// SpringBoard {{{ CFNotificationCenterAddObserver( CFNotificationCenterGetDarwinNotifyCenter(), NULL, &ChangeWallpaper, (CFStringRef) @"com.saurik.winterboard.lockbackground", NULL, 0 ); - NSBundle *MediaPlayer = [NSBundle bundleWithPath:@"/System/Library/Frameworks/MediaPlayer.framework"]; - if (MediaPlayer != nil) - [MediaPlayer load]; + if ($getTheme$([NSArray arrayWithObject:@"Wallpaper.mp4"]) != nil) { + NSBundle *MediaPlayer([NSBundle bundleWithPath:@"/System/Library/Frameworks/MediaPlayer.framework"]); + if (MediaPlayer != nil) + [MediaPlayer load]; + + $MPMoviePlayerController = objc_getClass("MPMoviePlayerController"); + $MPVideoView = objc_getClass("MPVideoView"); + } - $MPMoviePlayerController = objc_getClass("MPMoviePlayerController"); - $MPVideoView = objc_getClass("MPVideoView"); $WebCoreFrameBridge = objc_getClass("WebCoreFrameBridge"); $SBApplication = objc_getClass("SBApplication"); @@ -1572,8 +1694,12 @@ extern "C" void WBInitialize() { WBRename(WebCoreFrameBridge, renderedSizeOfNode:constrainedToWidth:, renderedSizeOfNode$constrainedToWidth$); - WBRename(SBApplication, pathForIcon, pathForIcon); - WBRename(SBApplicationIcon, icon, icon); + if (SummerBoard_) { + WBRename(SBApplication, pathForIcon, pathForIcon); + WBRename(SBApplicationIcon, icon, icon); + WBRename(SBApplicationIcon, generateIconImage:, generateIconImage$); + } + WBRename(SBBookmarkIcon, icon, icon); WBRename(SBButtonBar, didMoveToSuperview, didMoveToSuperview); WBRename(SBCalendarIconContentsView, drawRect:, drawRect$); @@ -1610,15 +1736,19 @@ extern "C" void WBInitialize() { WBRename(SBStatusBarOperatorNameView, setOperatorName:fullSize:, setOperatorName$fullSize$); WBRename(SBStatusBarTimeView, drawRect:, drawRect$); - English_ = [[NSDictionary alloc] initWithContentsOfFile:@"/System/Library/CoreServices/SpringBoard.app/English.lproj/LocalizedApplicationNames.strings"]; + if (SummerBoard_) + English_ = [[NSDictionary alloc] initWithContentsOfFile:@"/System/Library/CoreServices/SpringBoard.app/English.lproj/LocalizedApplicationNames.strings"]; + Cache_ = [[NSMutableDictionary alloc] initWithCapacity:64]; +// }}} } Wallpapers_ = [[NSArray arrayWithObjects:@"Wallpaper.mp4", @"Wallpaper.png", @"Wallpaper.jpg", @"Wallpaper.html", nil] retain]; + Papered_ = $getTheme$(Wallpapers_) != nil; if ([Info_ objectForKey:@"UndockedIconLabels"] == nil) [Info_ setObject:[NSNumber numberWithBool:( - $getTheme$(Wallpapers_) == nil || + !Papered_ || [Info_ objectForKey:@"DockedIconLabelStyle"] != nil || [Info_ objectForKey:@"UndockedIconLabelStyle"] != nil )] forKey:@"UndockedIconLabels"];