1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-02 09:27:55 +01:00
Telegram/Telegraph/TGModernDateHeaderView.m
2015-10-01 19:19:52 +03:00

125 lines
4.3 KiB
Objective-C

#import "TGModernDateHeaderView.h"
#import "TGTelegraphConversationMessageAssetsSource.h"
#import "TGDateUtils.h"
#import "TGFont.h"
#import "TGImageUtils.h"
@interface TGModernDateHeaderView ()
{
UILabel *_dateLabel;
UIImageView *_backgroundImageView;
int _date;
CGSize _textSize;
}
@property (nonatomic, strong) NSString *viewIdentifier;
@property (nonatomic, strong) NSString *viewStateIdentifier;
@end
@implementation TGModernDateHeaderView
+ (void)drawDate:(int)date forContainerWidth:(CGFloat)containerWidth inContext:(CGContextRef)context andBindBackgroundToContainer:(UIView *)__unused backgroundContainer atPosition:(CGPoint)__unused position
{
static UIFont *font = nil;
static CGColorRef color = NULL;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
font = TGMediumSystemFontOfSize(13.0f);
color = CGColorRetain([UIColor whiteColor].CGColor);
});
NSString *text = [TGDateUtils stringForDialogTime:date * 24 * 60 * 60];
CGSize textSize = [text sizeWithFont:font];
textSize.width = CGOdd(CGCeil(textSize.width));
textSize.height = CGOdd(CGCeil(textSize.height));
CGPoint textOrigin = CGPointMake(CGFloor((containerWidth - textSize.width) / 2), CGFloor((27.0f - textSize.height) / 2) + TGRetinaPixel);
textOrigin.x = CGEven(textOrigin.x);
UIImage *backgroundImage = [[TGTelegraphConversationMessageAssetsSource instance] systemMessageBackground];
CGRect backgroundFrame = CGRectMake(textOrigin.x - 10, textOrigin.y - 2, textSize.width + 20, backgroundImage.size.height);
[backgroundImage drawInRect:backgroundFrame blendMode:kCGBlendModeCopy alpha:1.0f];
CGContextSetFillColorWithColor(context, color);
[text drawAtPoint:textOrigin withFont:font];
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
self.viewIdentifier = @"_date";
_backgroundImageView = [[UIImageView alloc] initWithImage:[[TGTelegraphConversationMessageAssetsSource instance] systemMessageBackground]];
[self addSubview:_backgroundImageView];
_dateLabel = [[UILabel alloc] init];
_dateLabel.transform = CGAffineTransformMakeRotation((float)M_PI);
_dateLabel.textColor = [[TGTelegraphConversationMessageAssetsSource instance] messageActionTextColor];
_dateLabel.font = TGMediumSystemFontOfSize(13.0f);
_dateLabel.textAlignment = NSTextAlignmentCenter;
_dateLabel.backgroundColor = [UIColor clearColor];
[self addSubview:_dateLabel];
_date = INT_MIN;
}
return self;
}
- (void)willBecomeRecycled
{
}
- (void)setDate:(int)date
{
if (_date != date)
{
_date = date;
_dateLabel.text = [TGDateUtils stringForDialogTime:_date * 24 * 60 * 60];
CGRect dateFrame = _dateLabel.frame;
_textSize = dateFrame.size = [_dateLabel.text sizeWithFont:_dateLabel.font];
dateFrame.size.width = CGOdd(CGCeil(dateFrame.size.width));
dateFrame.size.height = CGOdd(CGCeil(dateFrame.size.height));
_dateLabel.frame = dateFrame;
_viewStateIdentifier = [[NSString alloc] initWithFormat:@"date/%d", _date];
[self setNeedsLayout];
}
}
- (int)date {
return _date;
}
- (void)updateAssets
{
_backgroundImageView.image = [[TGTelegraphConversationMessageAssetsSource instance] systemMessageBackground];
}
- (void)layoutSubviews
{
CGRect bounds = self.bounds;
CGFloat dateOffset = iosMajorVersion() >= 7 ? -1.0f : -TGRetinaPixel;
CGRect dateFrame = _dateLabel.frame;
dateFrame.size = _textSize;
dateFrame.size.width = CGOdd(CGCeil(dateFrame.size.width));
dateFrame.size.height = CGOdd(CGCeil(dateFrame.size.height));
dateFrame.origin = CGPointMake(CGFloor((bounds.size.width - dateFrame.size.width) / 2), CGFloor((bounds.size.height - dateFrame.size.height) / 2) + 1.0f + dateOffset);
dateFrame.origin.x = CGEven(dateFrame.origin.x);
_dateLabel.frame = dateFrame;
CGRect backgroundFrame = CGRectMake(dateFrame.origin.x - 10, dateFrame.origin.y - 2 + (iosMajorVersion() >= 7 ? 0.0f : TGRetinaPixel), dateFrame.size.width + 20, _backgroundImageView.frame.size.height);
_backgroundImageView.frame = backgroundFrame;
}
@end