This repository was archived by the owner on Feb 2, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Expand file tree
/
Copy pathASDefaultPlaybackButton.m
More file actions
87 lines (75 loc) · 2.89 KB
/
ASDefaultPlaybackButton.m
File metadata and controls
87 lines (75 loc) · 2.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//
// ASDefaultPlaybackButton.m
// AsyncDisplayKit
//
// Created by Erekle on 5/14/16.
//
// Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree. An additional grant
// of patent rights can be found in the PATENTS file in the same directory.
//
#import <AsyncDisplayKit/ASDefaultPlaybackButton.h>
#import <AsyncDisplayKit/_ASDisplayLayer.h>
@interface ASDefaultPlaybackButton()
{
ASDefaultPlaybackButtonType _buttonType;
}
@end
@implementation ASDefaultPlaybackButton
- (instancetype)init
{
if (!(self = [super init])) {
return nil;
}
self.opaque = NO;
return self;
}
- (void)setButtonType:(ASDefaultPlaybackButtonType)buttonType
{
ASDefaultPlaybackButtonType oldType = _buttonType;
_buttonType = buttonType;
if (oldType != _buttonType) {
[self setNeedsDisplay];
}
}
- (nullable id<NSObject>)drawParametersForAsyncLayer:(_ASDisplayLayer *)layer
{
return @{
@"buttonType" : [NSNumber numberWithInt:_buttonType],
@"color" : self.tintColor
};
}
+ (void)drawRect:(CGRect)bounds withParameters:(NSDictionary *)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing
{
ASDefaultPlaybackButtonType buttonType = (ASDefaultPlaybackButtonType)[parameters[@"buttonType"] intValue];
UIColor *color = parameters[@"color"];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
UIBezierPath* bezierPath = [UIBezierPath bezierPath];
if (buttonType == ASDefaultPlaybackButtonTypePlay) {
[bezierPath moveToPoint: CGPointMake(0, 0)];
[bezierPath addLineToPoint: CGPointMake(0, bounds.size.height)];
[bezierPath addLineToPoint: CGPointMake(bounds.size.width, bounds.size.height/2)];
[bezierPath addLineToPoint: CGPointMake(0, 0)];
[bezierPath closePath];
} else if (buttonType == ASDefaultPlaybackButtonTypePause) {
CGFloat pauseSingleLineWidth = bounds.size.width / 3.0;
[bezierPath moveToPoint: CGPointMake(0, bounds.size.height)];
[bezierPath addLineToPoint: CGPointMake(pauseSingleLineWidth, bounds.size.height)];
[bezierPath addLineToPoint: CGPointMake(pauseSingleLineWidth, 0)];
[bezierPath addLineToPoint: CGPointMake(0, 0)];
[bezierPath addLineToPoint: CGPointMake(0, bounds.size.height)];
[bezierPath closePath];
[bezierPath moveToPoint: CGPointMake(pauseSingleLineWidth * 2, 0)];
[bezierPath addLineToPoint: CGPointMake(pauseSingleLineWidth * 2, bounds.size.height)];
[bezierPath addLineToPoint: CGPointMake(bounds.size.width, bounds.size.height)];
[bezierPath addLineToPoint: CGPointMake(bounds.size.width, 0)];
[bezierPath addLineToPoint: CGPointMake(pauseSingleLineWidth * 2, 0)];
[bezierPath closePath];
}
[color setFill];
[bezierPath fill];
CGContextRestoreGState(context);
}
@end