66 lines
1.4 KiB
Objective-C
66 lines
1.4 KiB
Objective-C
/**
|
|
* Copyright (c) 2015-present, Horcrux.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the MIT-style license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#import "RNSVGCircle.h"
|
|
#import <React/RCTLog.h>
|
|
|
|
@implementation RNSVGCircle
|
|
|
|
- (void)setCx:(NSString *)cx
|
|
{
|
|
if (cx == _cx) {
|
|
return;
|
|
}
|
|
[self invalidate];
|
|
_cx = cx;
|
|
}
|
|
|
|
- (void)setCy:(NSString *)cy
|
|
{
|
|
if (cy == _cy) {
|
|
return;
|
|
}
|
|
[self invalidate];
|
|
_cy = cy;
|
|
}
|
|
|
|
- (void)setR:(NSString *)r
|
|
{
|
|
if (r == _r) {
|
|
return;
|
|
}
|
|
[self invalidate];
|
|
_r = r;
|
|
}
|
|
|
|
- (CGPathRef)getPath:(CGContextRef)context
|
|
{
|
|
CGMutablePathRef path = CGPathCreateMutable();
|
|
CGFloat cx = [self relativeOnWidth:self.cx];
|
|
CGFloat cy = [self relativeOnHeight:self.cy];
|
|
CGFloat r;
|
|
// radius percentage calculate formula:
|
|
// radius = sqrt(pow((width*percent), 2) + pow((height*percent), 2)) / sqrt(2)
|
|
|
|
if ([RNSVGPercentageConverter isPercentage:self.r]) {
|
|
CGFloat radiusPercent = [RNSVGPercentageConverter percentageToFloat:self.r relative:1 offset:0];
|
|
|
|
r = sqrt(
|
|
pow([self getContextWidth] * radiusPercent, 2) +
|
|
pow([self getContextHeight] * radiusPercent, 2)
|
|
) / sqrt(2);
|
|
} else {
|
|
r = [self.r floatValue];
|
|
}
|
|
|
|
CGPathAddArc(path, nil, cx, cy, r, 0, 2*M_PI, NO);
|
|
return (CGPathRef)CFAutorelease(path);
|
|
}
|
|
|
|
@end
|