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

135 lines
4.2 KiB
Objective-C

#import "TGLabel.h"
@implementation TGLabel
@synthesize reuseIdentifier = _reuseIdentifier;
@synthesize normalShadowColor = _normalShadowColor;
@synthesize highlightedShadowColor = _highlightedShadowColor;
@synthesize portraitFont = _portraitFont;
@synthesize landscapeFont = _landscapeFont;
@synthesize persistentBackgroundColor = _persistentBackgroundColor;
@synthesize verticalAlignment = _verticalAlignment;
@synthesize verticalOffset = _verticalOffset;
@synthesize verticalOffsetMultiplier = _verticalOffsetMultiplier;
@synthesize customDrawingOffset = _customDrawingOffset;
@synthesize customDrawingSize = _customDrawingSize;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
}
return self;
}
- (void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
if (_highlightedShadowColor != nil && _normalShadowColor != nil)
self.shadowColor = highlighted ? _highlightedShadowColor : _normalShadowColor;
}
- (void)setLandscape:(bool)landscape
{
if (_landscapeFont != nil && _portraitFont != nil)
{
self.font = landscape ? _landscapeFont : _portraitFont;
}
}
- (void)setOpaque:(BOOL)opaque
{
[super setOpaque:opaque];
if (opaque && _persistentBackgroundColor != nil)
{
[super setBackgroundColor:_persistentBackgroundColor];
}
}
- (void)setBackgroundColor:(UIColor *)backgroundColor
{
if (self.opaque && _persistentBackgroundColor != nil)
[super setBackgroundColor:_persistentBackgroundColor];
else
[super setBackgroundColor:backgroundColor];
}
- (void)setPersistentBackgroundColor:(UIColor *)persistentBackgroundColor
{
_persistentBackgroundColor = persistentBackgroundColor;
if (self.opaque)
self.backgroundColor = persistentBackgroundColor;
}
- (void)setCustomDrawingOffset:(CGPoint)customDrawingOffset
{
if (!CGPointEqualToPoint(customDrawingOffset, _customDrawingOffset))
{
_customDrawingOffset = customDrawingOffset;
[self setNeedsDisplay];
}
}
- (void)setCustomDrawingSize:(CGSize)customDrawingSize
{
if (!CGSizeEqualToSize(customDrawingSize, _customDrawingSize))
{
_customDrawingSize = customDrawingSize;
[self setNeedsDisplay];
}
}
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines
{
if (_customDrawingSize.height != 0)
bounds.size = _customDrawingSize;
if (_verticalAlignment == TGLabelVericalAlignmentCenter)
{
CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];
textRect.origin.y = bounds.origin.y + (int)((bounds.size.height - textRect.size.height) / 2);
return CGRectOffset(textRect, 0, (int)(_verticalOffset + _verticalOffsetMultiplier * textRect.size.height));
}
else if (_verticalAlignment == TGLabelVericalAlignmentTop)
{
CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];
textRect.origin.y = bounds.origin.y;
return CGRectOffset(textRect, 0, (int)(_verticalOffset + _verticalOffsetMultiplier * textRect.size.height));
}
else
return CGRectOffset([super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines], 0, _verticalOffset);
}
- (void)drawTextInRect:(CGRect)requestedRect
{
if (_customDrawingSize.height != 0)
{
if (requestedRect.size.width > _customDrawingSize.width)
requestedRect.size.width = _customDrawingSize.width;
CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines];
if (_verticalAlignment != TGLabelVericalAlignmentCenter)
actualRect.origin.y = requestedRect.origin.y;
[super drawTextInRect:CGRectMake(requestedRect.origin.x + _customDrawingOffset.x, actualRect.origin.y + _customDrawingOffset.y, MIN(actualRect.size.width, _customDrawingSize.width), MIN(actualRect.size.height, _customDrawingSize.height))];
}
else
{
CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines];
[super drawTextInRect:actualRect];
}
}
- (void)drawRect:(CGRect)__unused rect
{
[self drawTextInRect:self.bounds];
}
@end