mirror of
https://github.com/danog/Telegram.git
synced 2024-12-02 09:27:55 +01:00
101 lines
3.3 KiB
Objective-C
101 lines
3.3 KiB
Objective-C
#import "TGContactCellContents.h"
|
|
|
|
@interface TGContactCellContents ()
|
|
|
|
@property (nonatomic) NSString *validTitleFirst;
|
|
@property (nonatomic) NSString *validTitleSecond;
|
|
@property (nonatomic) int validTitleBoldMode;
|
|
@property (nonatomic) CGFloat validWidth;
|
|
@property (nonatomic) CGPoint validTitleOffset;
|
|
@property (nonatomic) bool validHighlighted;
|
|
|
|
@end
|
|
|
|
@implementation TGContactCellContents
|
|
|
|
- (id)initWithFrame:(CGRect)frame
|
|
{
|
|
self = [super initWithFrame:frame];
|
|
if (self)
|
|
{
|
|
self.opaque = false;
|
|
self.contentMode = UIViewContentModeLeft;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)requestRedrawIfNeeded
|
|
{
|
|
if (_validHighlighted != self.highlighted ||
|
|
ABS(_validWidth - self.frame.size.width) > FLT_EPSILON ||
|
|
!CGPointEqualToPoint(_validTitleOffset, _titleOffset) ||
|
|
_validTitleBoldMode != _titleBoldMode ||
|
|
((_validTitleFirst == nil) != (_titleFirst != nil) || (_validTitleFirst != nil && ![_validTitleFirst isEqualToString:_titleFirst])) ||
|
|
((_validTitleSecond == nil) != (_titleSecond != nil) || (_validTitleSecond != nil && ![_validTitleSecond isEqualToString:_titleSecond])))
|
|
{
|
|
[self setNeedsDisplay];
|
|
}
|
|
}
|
|
|
|
- (void)setHighlighted:(bool)highlighted
|
|
{
|
|
_highlighted = highlighted;
|
|
|
|
[self requestRedrawIfNeeded];
|
|
}
|
|
|
|
- (void)setFrame:(CGRect)frame
|
|
{
|
|
[super setFrame:frame];
|
|
|
|
[self requestRedrawIfNeeded];
|
|
}
|
|
|
|
- (void)drawRect:(CGRect)__unused rect
|
|
{
|
|
CGSize size = self.frame.size;
|
|
|
|
_validTitleFirst = _titleFirst;
|
|
_validTitleSecond = _titleSecond;
|
|
_validTitleBoldMode = _titleBoldMode;
|
|
_validWidth = size.width;
|
|
_validTitleOffset = _titleOffset;
|
|
_validHighlighted = self.highlighted;
|
|
|
|
CGContextRef context = UIGraphicsGetCurrentContext();
|
|
|
|
UIFont *titleFirstFont = (_titleBoldMode & 1) ? _titleBoldFont : _titleFont;
|
|
UIFont *titleSecondFont = (_titleBoldMode & 2) ? _titleBoldFont : _titleFont;
|
|
|
|
CGSize titleFirstSize = [_titleFirst sizeWithFont:titleFirstFont];
|
|
if (titleFirstSize.width > size.width - _titleOffset.x - 5 - 14)
|
|
titleFirstSize.width = size.width - _titleOffset.x - 5 - 14;
|
|
|
|
CGSize titleSecondSize = [_titleSecond sizeWithFont:titleSecondFont];
|
|
titleSecondSize.width = MIN(titleSecondSize.width, size.width - (_titleOffset.x + titleFirstSize.width + 4) - 8);
|
|
|
|
if (_isDisabled)
|
|
{
|
|
static UIColor *disabledColor = nil;
|
|
if (disabledColor == nil)
|
|
disabledColor = UIColorRGB(0xaeaeae);
|
|
CGContextSetFillColorWithColor(context, disabledColor.CGColor);
|
|
}
|
|
else
|
|
CGContextSetFillColorWithColor(context, (_highlighted ? [UIColor whiteColor]: [UIColor blackColor]).CGColor);
|
|
|
|
[_titleFirst drawInRect:CGRectMake(_titleOffset.x, _titleOffset.y, titleFirstSize.width, titleFirstSize.height) withFont:titleFirstFont lineBreakMode:NSLineBreakByTruncatingTail];
|
|
|
|
[_titleSecond drawInRect:CGRectMake(_titleOffset.x + titleFirstSize.width + 4, _titleOffset.y, titleSecondSize.width, titleFirstSize.height) withFont:titleSecondFont];
|
|
|
|
if (_dateLabel != nil)
|
|
{
|
|
CGRect dateFrame = _dateLabel.frame;
|
|
CGContextTranslateCTM(context, dateFrame.origin.x, dateFrame.origin.y);
|
|
_dateLabel.highlighted = _highlighted;
|
|
[_dateLabel drawRect:CGRectMake(0, 0, dateFrame.size.width, dateFrame.size.height)];
|
|
}
|
|
}
|
|
|
|
@end
|