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]];
// 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]];
}
}
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;
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]];
@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);
}
}
#define WBRename(name, sel, imp) \
- _ ## name ## $ ## imp = MSHookMessage($ ## name, @selector(sel), &$ ## name ## $ ## imp)
+ MSHookMessage($ ## name, @selector(sel), &$ ## name ## $ ## imp, &_ ## name ## $ ## imp)
template <typename Type_>
static void msset(Type_ &function, MSImageRef image, const char *name) {
[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) {
WBRename(SBIconLabel, initWithSize:label:, initWithSize$label$);
WBRename(SBIconLabel, setInDock:, setInDock$);
+ WBRename(SBIconList, didMoveToSuperview, didMoveToSuperview);
WBRename(SBIconList, setFrame:, setFrame$);
WBRename(SBIconModel, cacheImageForIcon:, cacheImageForIcon$);
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 {{{