mirror of
https://github.com/danog/Telegram.git
synced 2024-12-02 09:27:55 +01:00
218 lines
7.2 KiB
Objective-C
218 lines
7.2 KiB
Objective-C
#import "TGModernClockProgressViewModel.h"
|
|
|
|
#import "TGModernClockProgressView.h"
|
|
|
|
#import "TGImageUtils.h"
|
|
|
|
@interface TGModernClockProgressViewModel ()
|
|
{
|
|
TGModernClockProgressType _type;
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation TGModernClockProgressViewModel
|
|
|
|
- (instancetype)initWithType:(TGModernClockProgressType)type
|
|
{
|
|
self = [super init];
|
|
if (self != nil)
|
|
{
|
|
_type = type;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (Class)viewClass
|
|
{
|
|
return [TGModernClockProgressView class];
|
|
}
|
|
|
|
+ (CGImageRef)frameImageForType:(TGModernClockProgressType)type
|
|
{
|
|
switch (type)
|
|
{
|
|
case TGModernClockProgressTypeOutgoingClock:
|
|
{
|
|
static CGImageRef image = NULL;
|
|
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^
|
|
{
|
|
UIImage *rawImage =[UIImage imageNamed:@"ClockFrame.png"];
|
|
image = CGImageRetain(TGScaleAndRoundCorners(rawImage, CGSizeMake(rawImage.size.width, rawImage.size.height), CGSizeZero, 0, nil, false, nil).CGImage);
|
|
});
|
|
|
|
return image;
|
|
}
|
|
case TGModernClockProgressTypeOutgoingMediaClock:
|
|
{
|
|
static CGImageRef image = NULL;
|
|
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^
|
|
{
|
|
UIImage *rawImage =[UIImage imageNamed:@"ClockWhiteFrame.png"];
|
|
image = CGImageRetain(TGScaleAndRoundCorners(rawImage, CGSizeMake(rawImage.size.width, rawImage.size.height), CGSizeZero, 0, nil, false, nil).CGImage);
|
|
});
|
|
|
|
return image;
|
|
}
|
|
case TGModernClockProgressTypeIncomingClock:
|
|
{
|
|
static CGImageRef image = NULL;
|
|
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^
|
|
{
|
|
UIImage *rawImage =[UIImage imageNamed:@"ClockIncomingFrame.png"];
|
|
image = CGImageRetain(TGScaleAndRoundCorners(rawImage, CGSizeMake(rawImage.size.width, rawImage.size.height), CGSizeZero, 0, nil, false, nil).CGImage);
|
|
});
|
|
|
|
return image;
|
|
}
|
|
}
|
|
|
|
return nil;
|
|
}
|
|
|
|
+ (CGImageRef)minImageForType:(TGModernClockProgressType)type
|
|
{
|
|
switch (type)
|
|
{
|
|
case TGModernClockProgressTypeOutgoingClock:
|
|
{
|
|
static CGImageRef image = NULL;
|
|
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^
|
|
{
|
|
UIImage *rawImage =[UIImage imageNamed:@"ClockMin.png"];
|
|
image = CGImageRetain(TGScaleAndRoundCorners(rawImage, CGSizeMake(rawImage.size.width, rawImage.size.height), CGSizeZero, 0, nil, false, nil).CGImage);
|
|
});
|
|
|
|
return image;
|
|
}
|
|
case TGModernClockProgressTypeOutgoingMediaClock:
|
|
{
|
|
static CGImageRef image = NULL;
|
|
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^
|
|
{
|
|
UIImage *rawImage =[UIImage imageNamed:@"ClockWhiteMin.png"];
|
|
image = CGImageRetain(TGScaleAndRoundCorners(rawImage, CGSizeMake(rawImage.size.width, rawImage.size.height), CGSizeZero, 0, nil, false, nil).CGImage);
|
|
});
|
|
|
|
return image;
|
|
}
|
|
case TGModernClockProgressTypeIncomingClock:
|
|
{
|
|
static CGImageRef image = NULL;
|
|
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^
|
|
{
|
|
UIImage *rawImage =[UIImage imageNamed:@"ClockIncomingMin.png"];
|
|
image = CGImageRetain(TGScaleAndRoundCorners(rawImage, CGSizeMake(rawImage.size.width, rawImage.size.height), CGSizeZero, 0, nil, false, nil).CGImage);
|
|
});
|
|
|
|
return image;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
+ (CGImageRef)hourImageForType:(TGModernClockProgressType)type
|
|
{
|
|
switch (type)
|
|
{
|
|
case TGModernClockProgressTypeOutgoingClock:
|
|
{
|
|
static CGImageRef image = NULL;
|
|
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^
|
|
{
|
|
UIImage *rawImage =[UIImage imageNamed:@"ClockHour.png"];
|
|
image = CGImageRetain(TGScaleAndRoundCorners(rawImage, CGSizeMake(rawImage.size.width, rawImage.size.height), CGSizeZero, 0, nil, false, nil).CGImage);
|
|
});
|
|
|
|
return image;
|
|
}
|
|
case TGModernClockProgressTypeOutgoingMediaClock:
|
|
{
|
|
static CGImageRef image = NULL;
|
|
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^
|
|
{
|
|
UIImage *rawImage =[UIImage imageNamed:@"ClockWhiteHour.png"];
|
|
image = CGImageRetain(TGScaleAndRoundCorners(rawImage, CGSizeMake(rawImage.size.width, rawImage.size.height), CGSizeZero, 0, nil, false, nil).CGImage);
|
|
});
|
|
|
|
return image;
|
|
}
|
|
case TGModernClockProgressTypeIncomingClock:
|
|
{
|
|
static CGImageRef image = NULL;
|
|
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^
|
|
{
|
|
UIImage *rawImage = [UIImage imageNamed:@"ClockIncomingHour.png"];
|
|
image = CGImageRetain(TGScaleAndRoundCorners(rawImage, CGSizeMake(rawImage.size.width, rawImage.size.height), CGSizeZero, 0, nil, false, nil).CGImage);
|
|
});
|
|
|
|
return image;
|
|
}
|
|
}
|
|
}
|
|
|
|
- (void)bindViewToContainer:(UIView *)container viewStorage:(TGModernViewStorage *)viewStorage
|
|
{
|
|
[super bindViewToContainer:container viewStorage:viewStorage];
|
|
|
|
TGModernClockProgressView *view = (TGModernClockProgressView *)[self boundView];
|
|
|
|
[view setFrameImage:[TGModernClockProgressViewModel frameImageForType:_type] hourImage:[TGModernClockProgressViewModel hourImageForType:_type] minImage:[TGModernClockProgressViewModel minImageForType:_type]];
|
|
}
|
|
|
|
- (void)drawInContext:(CGContextRef)context
|
|
{
|
|
[super drawInContext:context];
|
|
|
|
if (!self.skipDrawInContext)
|
|
{
|
|
CGContextTranslateCTM(context, 15.0f / 2.0f, 15.0f / 2.0f);
|
|
CGContextScaleCTM(context, 1.0f, -1.0f);
|
|
CGContextTranslateCTM(context, -15.0f / 2.0f, -15.0f / 2.0f);
|
|
|
|
CGImageRef frameImage = [TGModernClockProgressViewModel frameImageForType:_type];
|
|
if (frameImage != NULL)
|
|
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, 15.0f, 15.0f), frameImage);
|
|
|
|
CGImageRef hourImage = [TGModernClockProgressViewModel hourImageForType:_type];
|
|
if (hourImage != NULL)
|
|
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, 15.0f, 15.0f), hourImage);
|
|
|
|
CGImageRef minImage = [TGModernClockProgressViewModel minImageForType:_type];
|
|
if (minImage != NULL)
|
|
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, 15.0f, 15.0f), minImage);
|
|
|
|
CGContextTranslateCTM(context, 15.0f / 2.0f, 15.0f / 2.0f);
|
|
CGContextScaleCTM(context, 1.0f, -1.0f);
|
|
CGContextTranslateCTM(context, -15.0f / 2.0f, -15.0f / 2.0f);
|
|
}
|
|
}
|
|
|
|
- (void)sizeToFit
|
|
{
|
|
CGRect frame = self.frame;
|
|
frame.size = CGSizeMake(15.0f, 15.0f);
|
|
self.frame = frame;
|
|
}
|
|
|
|
@end
|