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

90 lines
2.4 KiB
Objective-C

#import "TGPasscodePinDotView.h"
@interface TGPasscodePinDotView ()
{
id<TGPasscodeBackground> _background;
CGPoint _absoluteOffset;
bool _filled;
CGFloat _fillAmount;
}
@end
@implementation TGPasscodePinDotView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self != nil)
{
self.opaque = false;
self.backgroundColor = nil;
}
return self;
}
- (bool)filled
{
return _filled;
}
- (void)setFilled:(bool)filled
{
[self setFilled:filled animated:false];
}
- (void)setFilled:(bool)filled animated:(bool)__unused animated
{
if (_filled != filled)
{
_filled = filled;
_fillAmount = _filled ? 1.0f : 0.0f;
[self setNeedsDisplay];
}
}
- (void)setBackground:(id<TGPasscodeBackground>)background
{
_background = background;
[self setNeedsDisplay];
}
- (void)setAbsoluteOffset:(CGPoint)absoluteOffset
{
if (!CGPointEqualToPoint(_absoluteOffset, absoluteOffset))
{
_absoluteOffset = absoluteOffset;
[self setNeedsDisplay];
}
}
- (void)drawRect:(CGRect)__unused rect
{
CGSize size = self.bounds.size;
CGContextRef context = UIGraphicsGetCurrentContext();
[[_background backgroundImage] drawInRect:CGRectMake(-_absoluteOffset.x, -_absoluteOffset.y, [_background size].width, [_background size].height) blendMode:kCGBlendModeCopy alpha:1.0f];
CGContextBeginPath(context);
CGContextAddEllipseInRect(context, CGRectMake(0.0f, 0.0f, size.width, size.height));
CGContextClip(context);
[[_background foregroundImage] drawInRect:CGRectMake(-_absoluteOffset.x, -_absoluteOffset.y, [_background size].width, [_background size].height) blendMode:kCGBlendModeNormal alpha:1.0f];
if (_fillAmount < FLT_EPSILON)
{
CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
CGContextFillEllipseInRect(context, CGRectMake(1.0f, 1.0f, size.width - 2.0f, size.height - 2.0f));
}
else if (_fillAmount < 1.0f - FLT_EPSILON)
{
CGContextSetBlendMode(context, kCGBlendModeDestinationIn);
CGContextSetFillColorWithColor(context, [UIColor colorWithWhite:0.0f alpha:_fillAmount].CGColor);
CGContextFillEllipseInRect(context, CGRectMake(1.0f, 1.0f, size.width - 2.0f, size.height - 2.0f));
}
}
@end