+ CGSize size = [label sizeWithStyle:style forWidth:bounds.size.width];
+ [label drawAtPoint:CGPointMake((bounds.size.width - size.width) / 2, 0) withStyle:style];
+}
+
+MSHook(void, mSMSMessageTranscriptController$loadView, mSMSMessageTranscriptController *self, SEL sel) {
+ _mSMSMessageTranscriptController$loadView(self, sel);
+
+ if (NSString *path = $getTheme$([NSArray arrayWithObjects:@"SMSBackground.png", @"SMSBackground.jpg", nil]))
+ if (UIImage *image = [[UIImage alloc] initWithContentsOfFile:path]) {
+ [image autorelease];
+ UIView *&_transcriptLayer(MSHookIvar<UIView *>(self, "_transcriptLayer"));
+ UIView *parent([_transcriptLayer superview]);
+ UIImageView *background([[[UIImageView alloc] initWithImage:image] autorelease]);
+ [parent insertSubview:background belowSubview:_transcriptLayer];
+ [_transcriptLayer setBackgroundColor:[UIColor clearColor]];
+ }
+}
+
+MSHook(UIImage *, _UIImageWithName, NSString *name) {
+ int id(_UISharedImageNameGetIdentifier(name));
+ if (Debug_)
+ NSLog(@"WB:Debug: _UIImageWithName(\"%@\", %d)", name, id);
+
+ if (id == -1)
+ return _UIImageAtPath(name, _UIKitBundle());
+ else {
+ NSNumber *key([NSNumber numberWithInt:id]);
+ UIImage *image = [UIImages_ objectForKey:key];
+ if (image != nil)
+ return reinterpret_cast<id>(image) == [NSNull null] ? nil : image;
+ if (NSString *path = $pathForFile$inBundle$(name, _UIKitBundle(), true)) {
+ image = [[UIImage alloc] initWithContentsOfFile:path cache:true];
+ if (image != nil)
+ [image autorelease];
+ }
+ if (image == nil)
+ image = _UISharedImageWithIdentifier(id);
+ [UIImages_ setObject:(image == nil ? [NSNull null] : reinterpret_cast<id>(image)) forKey:key];
+ return image;
+ }
+}
+
+MSHook(UIImage *, _UIImageWithNameInDomain, NSString *name, NSString *domain) {
+ NSString *key = [NSString stringWithFormat:@"D:%zu%@%@", [domain length], domain, name];
+ UIImage *image = [PathImages_ objectForKey:key];
+ if (image != nil)
+ return reinterpret_cast<id>(image) == [NSNull null] ? nil : image;
+ if (Debug_)
+ NSLog(@"WB:Debug: UIImageWithNameInDomain(\"%@\", \"%@\")", name, domain);
+ if (NSString *path = $getTheme$([NSArray arrayWithObject:[NSString stringWithFormat:@"Domains/%@/%@", domain, name]])) {
+ image = [[UIImage alloc] initWithContentsOfFile:path];
+ if (image != nil)
+ [image autorelease];
+ }
+ if (image == nil)
+ image = __UIImageWithNameInDomain(name, domain);
+ [PathImages_ setObject:(image == nil ? [NSNull null] : reinterpret_cast<id>(image)) forKey:key];
+ return image;
+}
+
+MSHook(GSFontRef, GSFontCreateWithName, const char *name, GSFontSymbolicTraits traits, float size) {
+ if (NSString *font = [Info_ objectForKey:[NSString stringWithFormat:@"FontName-%s", name]])
+ name = [font UTF8String];
+ return _GSFontCreateWithName(name, traits, size);
+}
+
+#define AudioToolbox "/System/Library/Frameworks/AudioToolbox.framework/AudioToolbox"
+#define UIKit "/System/Library/Frameworks/UIKit.framework/UIKit"
+
+bool (*_Z24GetFileNameForThisActionmPcRb)(unsigned long a0, char *a1, bool &a2);
+
+MSHook(bool, _Z24GetFileNameForThisActionmPcRb, unsigned long a0, char *a1, bool &a2) {
+ bool value = __Z24GetFileNameForThisActionmPcRb(a0, a1, a2);
+ if (Debug_)
+ NSLog(@"WB:Debug:GetFileNameForThisAction(%u, %s, %u) = %u", a0, value ? a1 : NULL, a2, value);
+
+ if (value) {
+ NSString *path = [NSString stringWithUTF8String:a1];
+ if ([path hasPrefix:@"/System/Library/Audio/UISounds/"]) {
+ NSString *file = [path substringFromIndex:31];
+ NSLog(@"%@", file);
+ for (NSString *theme in themes_) {
+ NSString *path([NSString stringWithFormat:@"%@/UISounds/%@", theme, file]);
+ if ([Manager_ fileExistsAtPath:path]) {
+ strcpy(a1, [path UTF8String]);
+ continue;
+ }
+ }
+ }
+ }
+ return value;
+}
+
+static void ChangeWallpaper(
+ CFNotificationCenterRef center,
+ void *observer,
+ CFStringRef name,
+ const void *object,
+ CFDictionaryRef info
+) {
+ if (Debug_)
+ NSLog(@"WB:Debug:ChangeWallpaper!");
+
+ UIImage *image;
+ if (WallpaperFile_ != nil) {
+ image = [[UIImage alloc] initWithContentsOfFile:WallpaperFile_];
+ if (image != nil)
+ image = [image autorelease];
+ } else image = nil;
+
+ if (WallpaperImage_ != nil)
+ [WallpaperImage_ setImage:image];
+ if (WallpaperPage_ != nil)
+ [WallpaperPage_ loadRequest:[NSURLRequest requestWithURL:WallpaperURL_]];
+
+}
+
+#define WBRename(name, sel, imp) \
+ _ ## name ## $ ## imp = MSHookMessage($ ## name, @selector(sel), &$ ## name ## $ ## imp)
+
+extern "C" void WBInitialize() {