mirror of
https://github.com/zoriya/react-native-svg.git
synced 2025-12-06 07:06:11 +00:00
78 lines
2.0 KiB
Objective-C
78 lines
2.0 KiB
Objective-C
/*
|
|
|
|
Erica Sadun, http://ericasadun.com
|
|
https://github.com/erica/iOS-Drawing/tree/master/C08/Quartz%20Book%20Pack/Bezier
|
|
*/
|
|
|
|
#import "RNSVGBezierElement.h"
|
|
|
|
#pragma mark - Bezier Element -
|
|
|
|
@implementation RNSVGBezierElement
|
|
- (instancetype) init
|
|
{
|
|
self = [super init];
|
|
if (self)
|
|
{
|
|
_elementType = kCGPathElementMoveToPoint;
|
|
_point = RNSVGNULLPOINT;
|
|
_controlPoint1 = RNSVGNULLPOINT;
|
|
_controlPoint2 = RNSVGNULLPOINT;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
+ (instancetype) elementWithPathElement: (CGPathElement) element
|
|
{
|
|
RNSVGBezierElement *newElement = [[self alloc] init];
|
|
newElement.elementType = element.type;
|
|
|
|
switch (newElement.elementType)
|
|
{
|
|
case kCGPathElementCloseSubpath:
|
|
break;
|
|
case kCGPathElementMoveToPoint:
|
|
case kCGPathElementAddLineToPoint:
|
|
{
|
|
newElement.point = element.points[0];
|
|
break;
|
|
}
|
|
case kCGPathElementAddQuadCurveToPoint:
|
|
{
|
|
newElement.point = element.points[1];
|
|
newElement.controlPoint1 = element.points[0];
|
|
break;
|
|
}
|
|
case kCGPathElementAddCurveToPoint:
|
|
{
|
|
newElement.point = element.points[2];
|
|
newElement.controlPoint1 = element.points[0];
|
|
newElement.controlPoint2 = element.points[1];
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return newElement;
|
|
}
|
|
|
|
// Convert one element to RNSVGBezierElement and save to array
|
|
void RNSVGBezierElement_getBezierElements(void *info, const CGPathElement *element)
|
|
{
|
|
NSMutableArray *bezierElements = (__bridge NSMutableArray *)info;
|
|
if (element)
|
|
[bezierElements addObject:[RNSVGBezierElement elementWithPathElement:*element]];
|
|
}
|
|
|
|
// Retrieve array of component elements
|
|
+ (NSArray *) elementsFromCGPath:(CGPathRef)path
|
|
{
|
|
NSMutableArray *elements = [NSMutableArray array];
|
|
CGPathApply(path, (__bridge void *)elements, RNSVGBezierElement_getBezierElements);
|
|
return elements;
|
|
}
|
|
|
|
@end
|
|
|