NewsBlur/media/ios/Classes/FeedDetailTableCell.m

279 lines
8.1 KiB
Mathematica
Raw Normal View History

//
// FeedDetailTableCell.m
// NewsBlur
//
// Created by Samuel Clay on 7/14/10.
// Copyright 2010 NewsBlur. All rights reserved.
//
#import "NewsBlurAppDelegate.h"
#import "FeedDetailTableCell.h"
#import "ABTableViewCell.h"
#import "UIView+TKCategory.h"
#import "Utilities.h"
static UIFont *textFont = nil;
static UIFont *indicatorFont = nil;
@implementation FeedDetailTableCell
@synthesize storyTitle;
@synthesize storyAuthor;
@synthesize storyDate;
2012-08-10 18:10:07 -07:00
@synthesize storyScore;
2012-07-22 14:23:50 -07:00
@synthesize siteTitle;
@synthesize siteFavicon;
@synthesize isRead;
2012-08-08 18:23:48 -07:00
@synthesize isShort;
@synthesize isRiverOrSocial;
@synthesize feedColorBar;
@synthesize feedColorBarTopBorder;
@synthesize hasAlpha;
2012-08-09 11:06:38 -07:00
2012-08-10 18:10:07 -07:00
#define leftMargin 26
#define rightMargin 18
2012-07-22 17:21:32 -07:00
+ (void) initialize {
if (self == [FeedDetailTableCell class]) {
textFont = [UIFont boldSystemFontOfSize:18];
indicatorFont = [UIFont boldSystemFontOfSize:12];
}
}
2012-08-08 18:23:48 -07:00
- (void)drawContentView:(CGRect)r highlighted:(BOOL)highlighted {
2012-08-10 18:10:07 -07:00
int adjustForSocial = 3;
if (self.isRiverOrSocial) {
adjustForSocial = 20;
}
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect rect = CGRectInset(r, 12, 12);
rect.size.width -= 18; // Scrollbar padding
if (!highlighted) {
UIColor *backgroundColor;
2012-08-10 18:10:07 -07:00
backgroundColor = UIColorFromRGB(0xf4f4f4);
[backgroundColor set];
}
CGContextFillRect(context, r);
if (highlighted) {
[NewsBlurAppDelegate fillGradient:r startColor:UIColorFromRGB(0xFFFDEF) endColor:UIColorFromRGB(0xFFFDDF)];
}
UIColor *textColor;
UIFont *font;
2012-10-16 17:24:01 -07:00
if (self.isRead) {
font = [UIFont fontWithName:@"Helvetica" size:11];
2013-02-15 16:41:20 -08:00
textColor = UIColorFromRGB(0x808080);
} else {
font = [UIFont fontWithName:@"Helvetica-Bold" size:11];
textColor = UIColorFromRGB(0x606060);
}
if (highlighted) {
textColor = UIColorFromRGB(0x686868); //0x686868
}
[textColor set];
if (self.isRiverOrSocial) {
[self.siteTitle
2012-08-10 18:10:07 -07:00
drawInRect:CGRectMake(leftMargin + 20, 7, rect.size.width - 20, 21)
withFont:font
lineBreakMode:UILineBreakModeTailTruncation
alignment:UITextAlignmentLeft];
if (self.isRead) {
font = [UIFont fontWithName:@"Helvetica" size:12];
2013-02-15 16:41:20 -08:00
textColor = UIColorFromRGB(0x606060);
} else {
textColor = UIColorFromRGB(0x333333);
font = [UIFont fontWithName:@"Helvetica-Bold" size:12];
}
if (highlighted) {
textColor = UIColorFromRGB(0x686868);
}
[textColor set];
}
2012-08-10 18:10:07 -07:00
// story title
2012-08-07 09:57:21 -07:00
2012-08-10 18:10:07 -07:00
CGSize theSize = [self.storyTitle sizeWithFont:font constrainedToSize:CGSizeMake(rect.size.width, 30.0) lineBreakMode:UILineBreakModeTailTruncation];
2012-08-07 09:57:21 -07:00
2012-08-10 18:10:07 -07:00
int storyTitleY = 7 + adjustForSocial + ((30 - theSize.height)/2);
2012-08-08 18:23:48 -07:00
if (self.isShort){
2012-08-10 18:10:07 -07:00
storyTitleY = 7 + adjustForSocial + 2;
2012-08-08 18:23:48 -07:00
}
[self.storyTitle
2012-08-10 18:10:07 -07:00
drawInRect:CGRectMake(leftMargin, storyTitleY, rect.size.width, theSize.height)
withFont:font
lineBreakMode:UILineBreakModeTailTruncation
alignment:UITextAlignmentLeft];
2012-08-07 09:57:21 -07:00
2012-08-13 17:35:04 -07:00
int storyAuthorDateY = 41 + adjustForSocial;
2012-08-08 18:23:48 -07:00
if (self.isShort){
2012-08-13 17:35:04 -07:00
storyAuthorDateY -= 13;
2012-08-08 18:23:48 -07:00
}
2012-08-10 18:10:07 -07:00
// story author style
2012-08-10 18:10:07 -07:00
if (self.isRead) {
2013-02-15 16:41:20 -08:00
textColor = UIColorFromRGB(0x808080);
font = [UIFont fontWithName:@"Helvetica" size:10];
} else {
textColor = UIColorFromRGB(0x959595);
font = [UIFont fontWithName:@"Helvetica-Bold" size:10];
}
if (highlighted) {
textColor = UIColorFromRGB(0x686868);
}
[textColor set];
2012-08-08 18:23:48 -07:00
[self.storyAuthor
2012-08-10 18:10:07 -07:00
drawInRect:CGRectMake(leftMargin, storyAuthorDateY, (rect.size.width) / 2 - 10, 15.0)
withFont:font
2012-08-08 18:23:48 -07:00
lineBreakMode:UILineBreakModeTailTruncation
alignment:UITextAlignmentLeft];
2012-08-08 18:23:48 -07:00
// story date
if (self.isRead) {
textColor = UIColorFromRGB(0xbabdd1);
font = [UIFont fontWithName:@"Helvetica" size:10];
} else {
textColor = UIColorFromRGB(0x262c6c);
font = [UIFont fontWithName:@"Helvetica-Bold" size:10];
}
if (highlighted) {
textColor = UIColorFromRGB(0x686868);
}
[textColor set];
[self.storyDate
2012-08-10 18:10:07 -07:00
drawInRect:CGRectMake(leftMargin + (rect.size.width) / 2 - 10, storyAuthorDateY, (rect.size.width) / 2 + 10, 15.0)
withFont:font
lineBreakMode:UILineBreakModeTailTruncation
alignment:UITextAlignmentRight];
2012-08-07 09:57:21 -07:00
// feed bar
2012-08-10 18:10:07 -07:00
2012-08-13 17:35:04 -07:00
CGContextSetStrokeColor(context, CGColorGetComponents([self.feedColorBarTopBorder CGColor])); //feedColorBarTopBorder
2012-08-07 09:57:21 -07:00
if (self.isRead) {
CGContextSetAlpha(context, 0.25);
}
2012-08-10 18:10:07 -07:00
CGContextSetLineWidth(context, 6.0f);
2012-08-11 18:03:28 -07:00
CGContextBeginPath(context);
CGContextMoveToPoint(context, 3.0f, 1.0f);
CGContextAddLineToPoint(context, 3.0f, self.frame.size.height - 1);
CGContextStrokePath(context);
2012-08-10 18:10:07 -07:00
2012-08-13 17:35:04 -07:00
CGContextSetStrokeColor(context, CGColorGetComponents([self.feedColorBar CGColor]));
CGContextBeginPath(context);
CGContextMoveToPoint(context, 9.0f, 1.0f);
CGContextAddLineToPoint(context, 9.0, self.frame.size.height - 1);
CGContextStrokePath(context);
2012-08-07 09:57:21 -07:00
// reset for borders
2012-08-10 18:10:07 -07:00
CGContextSetAlpha(context, 1.0);
2012-08-07 09:57:21 -07:00
CGContextSetLineWidth(context, 1.0f);
if (highlighted) {
// top border
UIColor *blue = UIColorFromRGB(0xEFEEC3);
CGContextSetStrokeColor(context, CGColorGetComponents([blue CGColor]));
CGContextBeginPath(context);
CGContextMoveToPoint(context, 0, 0.5f);
2012-07-29 22:44:28 -07:00
CGContextAddLineToPoint(context, self.bounds.size.width, 0.5f);
CGContextStrokePath(context);
// bottom border
CGContextBeginPath(context);
2012-08-10 18:10:07 -07:00
CGContextMoveToPoint(context, 0, self.bounds.size.height - 1.5f);
CGContextAddLineToPoint(context, self.bounds.size.width, self.bounds.size.height - 1.5f);
CGContextStrokePath(context);
} else {
// top border
2012-08-10 18:10:07 -07:00
UIColor *white = UIColorFromRGB(0xffffff);
2012-08-10 18:10:07 -07:00
CGContextSetStrokeColor(context, CGColorGetComponents([white CGColor]));
CGContextBeginPath(context);
CGContextMoveToPoint(context, 0.0f, 0.5f);
2012-08-10 18:10:07 -07:00
CGContextAddLineToPoint(context, self.bounds.size.width, 0.5f);
CGContextStrokePath(context);
}
// site favicon
if (self.isRead && !self.hasAlpha) {
if (self.isRiverOrSocial) {
self.siteFavicon = [self imageByApplyingAlpha:self.siteFavicon withAlpha:0.25];
}
self.hasAlpha = YES;
}
if (self.isRiverOrSocial) {
2012-08-10 18:10:07 -07:00
[self.siteFavicon drawInRect:CGRectMake(leftMargin, 6.0, 16.0, 16.0)];
}
// story indicator
int storyIndicatorY = 4 + adjustForSocial;
if (self.isShort){
storyIndicatorY = 4 + adjustForSocial - 5 ;
}
UIColor *scoreColor;
if (storyScore == -1) {
scoreColor = UIColorFromRGB(0xCC2A2E);
} else if (storyScore == 0) {
scoreColor = UIColorFromRGB(0xF9C72A);
} else {
2012-08-10 18:10:07 -07:00
scoreColor = UIColorFromRGB(0x3B7613);
}
2012-08-10 18:10:07 -07:00
CGContextSetFillColorWithColor(context, UIColorFromRGB(0xf4f4f4).CGColor);
2012-08-13 17:35:04 -07:00
CGContextFillEllipseInRect(context, CGRectMake(7, storyIndicatorY + 12, 12, 12));
2012-08-10 18:10:07 -07:00
if (self.isRead) {
CGContextSetAlpha(context, 0.25);
}
CGContextSetFillColorWithColor(context, scoreColor.CGColor);
2012-08-13 17:35:04 -07:00
CGContextFillEllipseInRect(context, CGRectMake(9, storyIndicatorY + 14, 8, 8));
}
- (UIImage *)imageByApplyingAlpha:(UIImage *)image withAlpha:(CGFloat) alpha {
UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0f);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGRect area = CGRectMake(0, 0, image.size.width, image.size.height);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -area.size.height);
CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
CGContextSetAlpha(ctx, alpha);
CGContextDrawImage(ctx, area, image.CGImage);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
@end