+MSInstanceMessage0(CGImageRef, SBIconLabel, buildLabelImage) {
+ bool docked((MSHookIvar<unsigned>(self, "_inDock") & 0x2) != 0);
+
+ WBStringDrawingState labelState = {NULL, 0, [NSString stringWithFormat:@""
+ "color: %@;"
+ ,
+ (docked || !SummerBoard_ ? @"white" : @"#b3b3b3")
+ ], docked ? @"DockedIconLabelStyle" : @"UndockedIconLabelStyle"};
+
+ stringDrawingState_ = &labelState;
+
+ CGImageRef image(MSOldCall());
+
+ stringDrawingState_ = NULL;
+ return image;
+}
+
+// ChatKit {{{
+MSInstanceMessageHook2(id, CKBalloonView, initWithFrame,delegate, CGRect, frame, id, delegate) {
+ if ((self = MSOldCall(frame, delegate)) != nil) {
+ [self setBackgroundColor:[UIColor clearColor]];
+ } return self;
+}
+
+MSInstanceMessageHook0(BOOL, CKBalloonView, _canUseLayerBackedBalloon) {
+ return SMSBackgrounded_ ? NO : MSOldCall();
+}
+
+MSInstanceMessageHook0(void, CKTranscriptHeaderView, layoutSubviews) {
+ [self wb$setBackgroundColor:[UIColor clearColor]];
+ return MSOldCall();
+}
+
+MSInstanceMessageHook1(void, CKMessageCell, addBalloonView, CKBalloonView *, balloon) {
+ MSOldCall(balloon);
+ [balloon setBackgroundColor:[UIColor clearColor]];
+}
+
+MSInstanceMessageHook1(void, CKTranscriptCell, setBackgroundColor, UIColor *, color) {
+ MSOldCall([UIColor clearColor]);
+ [[self contentView] wb$setBackgroundColor:[UIColor clearColor]];
+}
+
+// iOS >= 5.0
+MSInstanceMessageHook2(id, CKTranscriptCell, initWithStyle,reuseIdentifier, int, style, NSString *, reuse) {
+ if ((self = MSOldCall(style, reuse)) != nil) {
+ [self setBackgroundColor:[UIColor clearColor]];
+ [[self contentView] wb$setBackgroundColor:[UIColor clearColor]];
+ } return self;
+}
+
+// iOS << 5.0
+MSInstanceMessageHook2(id, CKMessageCell, initWithStyle,reuseIdentifier, int, style, NSString *, reuse) {
+ if ((self = MSOldCall(style, reuse)) != nil) {
+ [self setBackgroundColor:[UIColor clearColor]];
+ [[self contentView] setBackgroundColor:[UIColor clearColor]];
+ } return self;
+}
+
+MSInstanceMessageHook2(id, CKTimestampView, initWithStyle,reuseIdentifier, int, style, NSString *, reuse) {
+ if ((self = MSOldCall(style, reuse)) != nil) {
+ UILabel *&_label(MSHookIvar<UILabel *>(self, "_label"));
+ [_label setBackgroundColor:[UIColor clearColor]];
+ } return self;
+}
+
+MSInstanceMessageHook1(void, CKTranscriptTableView, setSeparatorStyle, int, style) {
+ MSOldCall(UITableViewCellSeparatorStyleNone);
+}
+
+MSInstanceMessageHook2(id, CKTranscriptTableView, initWithFrame,style, CGRect, frame, int, style) {
+ if ((self = MSOldCall(frame, style)) != nil) {
+ [self setSeparatorStyle:UITableViewCellSeparatorStyleNone];
+ } return self;
+}
+
+MSInstanceMessageHook0(void, CKTranscriptController, loadView) {
+ MSOldCall();
+
+ if (NSString *path = $getTheme$($useScale$([NSArray arrayWithObjects:@"SMSBackground.png", @"SMSBackground.jpg", nil])))
+ if (UIImage *image = $getImage$(path)) {
+ SMSBackgrounded_ = true;