From cc5f5e5d136984759dd2818987ae9ae78510d999 Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" <saurik@saurik.com> Date: Thu, 20 Oct 2011 22:46:31 +0000 Subject: [PATCH] Modify sizeOfString: with stringDrawingState_. --- Library.mm | 55 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/Library.mm b/Library.mm index fa44fbb..66317a0 100644 --- a/Library.mm +++ b/Library.mm @@ -661,42 +661,69 @@ MSInstanceMessageHook2(NSString *, NSBundle, pathForResource,ofType, NSString *, static struct WBStringDrawingState { WBStringDrawingState *next_; + unsigned count_; NSString *base_; NSString *info_; } *stringDrawingState_; MSInstanceMessageHook4(CGSize, NSString, drawAtPoint,forWidth,withFont,lineBreakMode, CGPoint, point, float, width, UIFont *, font, int, mode) { - if (stringDrawingState_ == NULL || stringDrawingState_->info_ == nil) + WBStringDrawingState *state(stringDrawingState_); + if (state == NULL) return MSOldCall(point, width, font, mode); - NSString *info([Info_ objectForKey:stringDrawingState_->info_]); - if (info == nil) + if (--state->count_ == 0) + stringDrawingState_ = state->next_; + if (state->info_ == nil) return MSOldCall(point, width, font, mode); - NSString *base(stringDrawingState_->base_ ?: @""); - stringDrawingState_ = stringDrawingState_->next_; + NSString *info([Info_ objectForKey:state->info_]); + if (info == nil) + return MSOldCall(point, width, font, mode); + NSString *base(state->base_ ?: @""); [self drawAtPoint:point withStyle:[NSString stringWithFormat:@"%@;%@;%@", [font markupDescription], base, info]]; return CGSizeZero; } MSInstanceMessageHook2(CGSize, NSString, drawAtPoint,withFont, CGPoint, point, UIFont *, font) { - if (stringDrawingState_ == NULL || stringDrawingState_->info_ == nil) + WBStringDrawingState *state(stringDrawingState_); + if (state == NULL) return MSOldCall(point, font); - NSString *info([Info_ objectForKey:stringDrawingState_->info_]); - if (info == nil) + if (--state->count_ == 0) + stringDrawingState_ = state->next_; + if (state->info_ == nil) return MSOldCall(point, font); - NSString *base(stringDrawingState_->base_ ?: @""); - stringDrawingState_ = stringDrawingState_->next_; + NSString *info([Info_ objectForKey:state->info_]); + if (info == nil) + return MSOldCall(point, font); + NSString *base(state->base_ ?: @""); [self drawAtPoint:point withStyle:[NSString stringWithFormat:@"%@;%@;%@", [font markupDescription], base, info]]; return CGSizeZero; } +MSInstanceMessageHook1(CGSize, NSString, sizeWithFont, UIFont *, font) { + WBStringDrawingState *state(stringDrawingState_); + if (state == NULL) + return MSOldCall(font); + + if (--state->count_ == 0) + stringDrawingState_ = state->next_; + if (state->info_ == nil) + return MSOldCall(font); + + NSString *info([Info_ objectForKey:state->info_]); + if (info == nil) + return MSOldCall(font); + + NSString *base(state->base_ ?: @""); + return [self sizeWithStyle:[NSString stringWithFormat:@"%@;%@;%@", [font markupDescription], base, info] forWidth:65535]; +} + MSInstanceMessageHook1(UIImage *, SBIconBadgeFactory, checkoutBadgeImageForText, NSString *, text) { - WBStringDrawingState badgeState = {NULL, @"" + WBStringDrawingState badgeState = {NULL, 1, @"" "color: white;" , @"BadgeStyle"}; @@ -709,13 +736,15 @@ MSInstanceMessageHook1(UIImage *, SBIconBadgeFactory, checkoutBadgeImageForText, } MSInstanceMessageHook1(UIImage *, SBCalendarApplicationIcon, generateIconImage, int, type) { - WBStringDrawingState dayState = {NULL, @"" + WBStringDrawingState dayState = {NULL, 2, @"" "color: white;" // XXX: this is only correct on an iPod dock "text-shadow: rgba(0, 0, 0, 0.2) -1px -1px 2px;" , @"CalendarIconDayStyle"}; - WBStringDrawingState dateState = {&dayState, @"" + WBStringDrawingState sizeState = {&dayState, 7, nil, nil}; + + WBStringDrawingState dateState = {&sizeState, 2, @"" "color: #333333;" , @"CalendarIconDateStyle"}; -- 2.47.2