mirror of
https://github.com/danog/Telegram.git
synced 2024-12-02 09:27:55 +01:00
135 lines
4.2 KiB
Objective-C
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
|