X-Git-Url: https://git.saurik.com/winterboard.git/blobdiff_plain/f868c22c7ec85f54656e30bee0205b804b50f96b..e4cbfc3e408cc38fb21d4c72ba0b1cff1d5d754b:/Library.mm diff --git a/Library.mm b/Library.mm index 48cfefc..b3eb56c 100644 --- a/Library.mm +++ b/Library.mm @@ -604,7 +604,7 @@ MSHook(UIImage *, SBApplicationIcon$generateIconImage$, SBApplicationIcon *self, return [UIImage imageWithContentsOfFile:path72]; if (NSString *path = $pathForIcon$([self application])) if (UIImage *image = [UIImage imageWithContentsOfFile:path]) { - float width; + CGFloat width; if ([$SBIcon respondsToSelector:@selector(defaultIconImageSize)]) width = [$SBIcon defaultIconImageSize].width; else @@ -689,13 +689,13 @@ MSInstanceMessageHook2(NSString *, NSBundle, pathForResource,ofType, NSString *, static void $drawLabel$(NSString *label, CGRect rect, NSString *style, NSString *custom) { bool ellipsis(false); - float max = rect.size.width - 11, width; + CGFloat max = rect.size.width - 11, width; width: width = [(ellipsis ? [label stringByAppendingString:@"..."] : label) sizeWithStyle:style forWidth:320].width; if (width > max) { size_t length([label length]); - float spacing((width - max) / (length - 1)); + CGFloat spacing((width - max) / (length - 1)); if (spacing > 1.25) { ellipsis = true; @@ -769,21 +769,23 @@ static NSString *WBColorMarkup() { return [NSString stringWithFormat:@"color: rgba(%g, %g, %g, %g)", r * 255, g * 255, b * 255, a]; } -MSInstanceMessageHook6(CGSize, NSString, drawAtPoint,forWidth,withFont,lineBreakMode,letterSpacing,includeEmoji, CGPoint, point, float, width, UIFont *, font, UILineBreakMode, mode, float, spacing, BOOL, emoji) { - //NSLog(@"XXX: @\"%@\" %g", self, spacing); +extern "C" NSString *NSStringFromCGPoint(CGPoint rect); + +MSInstanceMessageHook5(CGSize, NSString, drawAtPoint,forWidth,withFont,lineBreakMode,letterSpacing, CGPoint, point, CGFloat, width, UIFont *, font, UILineBreakMode, mode, CGFloat, spacing) { + //NSLog(@"XXX: @\"%@\" %@ %g \"%@\" %u %g", self, NSStringFromCGPoint(point), width, font, mode, spacing); WBStringDrawingState *state(stringDrawingState_); if (state == NULL) - return MSOldCall(point, width, font, mode, spacing, emoji); + return MSOldCall(point, width, font, mode, spacing); if (state->count_ != 0 && --state->count_ == 0) stringDrawingState_ = state->next_; if (state->info_ == nil) - return MSOldCall(point, width, font, mode, spacing, emoji); + return MSOldCall(point, width, font, mode, spacing); NSString *info([Info_ objectForKey:state->info_]); if (info == nil) - return MSOldCall(point, width, font, mode, spacing, emoji); + return MSOldCall(point, width, font, mode, spacing); NSString *base(state->base_ ?: @""); NSString *extra([NSString stringWithFormat:@"letter-spacing: %gpx", spacing]); @@ -794,7 +796,7 @@ MSInstanceMessageHook6(CGSize, NSString, drawAtPoint,forWidth,withFont,lineBreak extern "C" NSString *NSStringFromCGRect(CGRect rect); MSInstanceMessageHook7(CGSize, NSString, _drawInRect,withFont,lineBreakMode,alignment,lineSpacing,includeEmoji,truncationRect, CGRect, rect, UIFont *, font, UILineBreakMode, mode, UITextAlignment, alignment, float, spacing, BOOL, emoji, CGRect, truncation) { - //NSLog(@"XXX: &\"%@\" %@ \"%@\" %u %u %g %u %@", self, NSStringFromCGRect(rect), font, mode, alignment, spacing, emoji, NSStringFromCGRect(truncation)); + //NSLog(@"XXX: @\"%@\" %@ \"%@\" %u %u %g %u %@", self, NSStringFromCGRect(rect), font, mode, alignment, spacing, emoji, NSStringFromCGRect(truncation)); WBStringDrawingState *state(stringDrawingState_); if (state == NULL) @@ -976,7 +978,7 @@ MSHook(void, SBCalendarIconContentsView$drawRect$, SBCalendarIconContentsView *s if (NSString *style = [Info_ objectForKey:@"CalendarIconDayStyle"]) daystyle = [daystyle stringByAppendingString:style]; - float width([self bounds].size.width); + CGFloat width([self bounds].size.width); float leeway(10); CGSize datesize = [(NSString *)date sizeWithStyle:datestyle forWidth:(width + leeway)]; CGSize daysize = [(NSString *)day sizeWithStyle:daystyle forWidth:(width + leeway)]; @@ -2053,15 +2055,6 @@ static void msset(Type_ &function, MSImageRef image, const char *name) { #define WBHookSymbol(image, function) \ msset(function, image, "_" #function) -template -static void nlset(Type_ &function, struct nlist *nl, size_t index) { - struct nlist &name(nl[index]); - uintptr_t value(name.n_value); - if ((name.n_desc & N_ARM_THUMB_DEF) != 0) - value |= 0x00000001; - function = reinterpret_cast(value); -} - template static void dlset(Type_ &function, const char *name) { function = reinterpret_cast(dlsym(RTLD_DEFAULT, name)); @@ -2114,7 +2107,7 @@ static void NSString$drawInRect$withStyle$(NSString *self, SEL _cmd, CGRect rect return [[WBMarkup sharedMarkup] drawString:self inRect:rect withStyle:style]; } -static CGSize NSString$sizeWithStyle$forWidth$(NSString *self, SEL _cmd, NSString *style, float width) { +static CGSize NSString$sizeWithStyle$forWidth$(NSString *self, SEL _cmd, NSString *style, CGFloat width) { if (style == nil || [style length] == 0) style = @"font-family: Helvetica; font-size: 12px"; CGSize size([[WBMarkup sharedMarkup] sizeOfString:self withStyle:style forWidth:width]); @@ -2161,9 +2154,11 @@ static void SBInitialize() { WBRename(SBIconModel, getCachedImagedForIcon:, getCachedImagedForIcon$); WBRename(SBIconModel, getCachedImagedForIcon:smallIcon:, getCachedImagedForIcon$smallIcon$); - WBRename(SBSearchView, initWithFrame:, initWithFrame$); - WBRename(SBSearchTableViewCell, drawRect:, drawRect$); - WBRename(SBSearchTableViewCell, initWithStyle:reuseIdentifier:, initWithStyle$reuseIdentifier$); + if (kCFCoreFoundationVersionNumber < 800) { + WBRename(SBSearchView, initWithFrame:, initWithFrame$); + WBRename(SBSearchTableViewCell, drawRect:, drawRect$); + WBRename(SBSearchTableViewCell, initWithStyle:reuseIdentifier:, initWithStyle$reuseIdentifier$); + } //WBRename(SBImageCache, initWithName:forImageWidth:imageHeight:initialCapacity:, initWithName$forImageWidth$imageHeight$initialCapacity$); @@ -2353,9 +2348,15 @@ MSInitialize { // }}} // UIKit {{{ if (MSImageRef image = MSGetImageByName("/System/Library/Frameworks/UIKit.framework/UIKit")) { +#ifdef __LP64__ + class_addMethod($NSString, @selector(drawAtPoint:withStyle:), (IMP) &NSString$drawAtPoint$withStyle$, "v40@0:8{CGPoint=dd}16@32"); + class_addMethod($NSString, @selector(drawInRect:withStyle:), (IMP) &NSString$drawInRect$withStyle$, "v56@0:8{CGRect={CGSize=dd}{CGSize=dd}}16@48"); + class_addMethod($NSString, @selector(sizeWithStyle:forWidth:), (IMP) &NSString$sizeWithStyle$forWidth$, "{CGSize=dd}32@0:8@16d24"); +#else class_addMethod($NSString, @selector(drawAtPoint:withStyle:), (IMP) &NSString$drawAtPoint$withStyle$, "v20@0:4{CGPoint=ff}8@16"); class_addMethod($NSString, @selector(drawInRect:withStyle:), (IMP) &NSString$drawInRect$withStyle$, "v28@0:4{CGRect={CGSize=ff}{CGSize=ff}}8@24"); class_addMethod($NSString, @selector(sizeWithStyle:forWidth:), (IMP) &NSString$sizeWithStyle$forWidth$, "{CGSize=ff}16@0:4@8f12"); +#endif WBHookSymbol(image, _UIKitBundle); WBHookSymbol(image, _UIPackedImageTableGetIdentifierForName);