]> git.saurik.com Git - winterboard.git/blobdiff - Library.mm
UIStringDrawingSuperCrufty must be _legacy_hooked.
[winterboard.git] / Library.mm
index b2ee645ed9d5b7cc275e50e46a35e37b77ed5f0f..552639a723a5d7e34fa542a233b3ba093fe8bad6 100644 (file)
@@ -769,8 +769,10 @@ 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);
+
+MSInstanceMessage6(CGSize, NSString, drawAtPoint,forWidth,withFont,lineBreakMode,letterSpacing,includeEmoji, CGPoint, point, CGFloat, width, UIFont *, font, UILineBreakMode, mode, CGFloat, spacing, BOOL, emoji) {
+    //NSLog(@"XXX: @\"%@\" %@ %g \"%@\" %u %g %u", self, NSStringFromCGPoint(point), width, font, mode, spacing, emoji);
 
     WBStringDrawingState *state(stringDrawingState_);
     if (state == NULL)
@@ -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)
@@ -908,7 +910,11 @@ MSInstanceMessageHook1(UIImage *, SBCalendarApplicationIcon, generateIconImage,
         "text-shadow: rgba(0, 0, 0, 0.2) -1px -1px 2px;"
     , @"CalendarIconDayStyle"};
 
-    WBStringDrawingState sizeState = {&dayState, 7, nil, nil};
+    WBStringDrawingState wtfState = {&dayState, 1, nil, nil};
+
+    WBStringDrawingState sizeState = {
+        kCFCoreFoundationVersionNumber > 800 ? &wtfState : &dayState
+    , 7, nil, nil};
 
     WBStringDrawingState dateState = {&sizeState, 2, @""
     , @"CalendarIconDateStyle"};
@@ -1782,6 +1788,15 @@ MSClassMessage2(id, SBIconView, _labelImageParametersForIcon,location, id, icon,
     } return nil;
 }
 
+MSInstanceMessage0(id, SBIconView, _labelImageParameters) {
+    if (id parameters = MSOldCall()) {
+        int &location(MSHookIvar<int>(self, "_iconLocation"));
+        if (&location != NULL)
+            $objc_setAssociatedObject(parameters, @selector(wb$inDock), [NSNumber numberWithBool:(location == 3)], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+        return parameters;
+    } return nil;
+}
+
 MSClassMessage1(UIImage *, SBIconLabelImage, _drawLabelImageForParameters, id, parameters) {
     bool docked(wb$inDock(parameters));
 
@@ -2138,6 +2153,7 @@ static void SBInitialize() {
     } else {
         WBRename(SBIconLabelImageParameters, hash, hash);
         WBRename($SBIconView, _labelImageParametersForIcon:location:, _labelImageParametersForIcon$location$);
+        WBRename(SBIconView, _labelImageParameters, _labelImageParameters);
         WBRename($SBIconLabelImage, _drawLabelImageForParameters:, _drawLabelImageForParameters$);
     }
 
@@ -2373,6 +2389,21 @@ MSInitialize {
 
         WBHookSymbol(image, _UIImageWithDeviceSpecificName);
         MSHookFunction(_UIImageWithDeviceSpecificName, MSHake(_UIImageWithDeviceSpecificName));
+
+        SEL includeEmoji(@selector(_legacy_drawAtPoint:forWidth:withFont:lineBreakMode:letterSpacing:includeEmoji:));
+        if (![@"" respondsToSelector:includeEmoji])
+            includeEmoji = @selector(drawAtPoint:forWidth:withFont:lineBreakMode:letterSpacing:includeEmoji:);
+        MSHookMessage($NSString, includeEmoji, MSHake(NSString$drawAtPoint$forWidth$withFont$lineBreakMode$letterSpacing$includeEmoji$));
+
+        SEL letterSpacing(@selector(_legacy_sizeWithFont:forWidth:lineBreakMode:letterSpacing:));
+        if (![@"" respondsToSelector:letterSpacing])
+            letterSpacing = @selector(sizeWithFont:forWidth:lineBreakMode:letterSpacing:);
+        MSHookMessage($NSString, letterSpacing, MSHake(NSString$sizeWithFont$forWidth$lineBreakMode$letterSpacing$));
+
+        SEL sizeWithFont(@selector(_legacy_sizeWithFont:));
+        if (![@"" respondsToSelector:sizeWithFont])
+            sizeWithFont = @selector(sizeWithFont:);
+        MSHookMessage($NSString, sizeWithFont, MSHake(NSString$sizeWithFont$));
     }
     // }}}