Skip to content
This repository was archived by the owner on Dec 26, 2018. It is now read-only.

Commit 3e07733

Browse files
committed
Add more PNDPathElementTypes
1 parent f0d66f8 commit 3e07733

3 files changed

+147
-117
lines changed

PNDCreatePandaPath.m

+66-66
Original file line numberDiff line numberDiff line change
@@ -10,73 +10,73 @@
1010
CGPathRef PNDCreatePandaPath(CGSize size)
1111
{
1212
static PNDPathElement elements[] = {
13-
PND_PATH_ELEMENT_MOVE_TO_POINT(0.99242, 0.39676),
14-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.98536, 0.33900, 0.97266, 0.28893, 0.95382, 0.24485),
15-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.98069, 0.21900, 0.99742, 0.18267, 0.99742, 0.14244),
16-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.99743, 0.06401, 0.93384, 0.00032, 0.85532, 0.00032),
17-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.81483, 0.00032, 0.77830, 0.01725, 0.75241, 0.04442),
18-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.72266, 0.03175, 0.69013, 0.02173, 0.65529, 0.01453),
19-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.60863, 0.00489, 0.55640, -0.00002, 0.49997, 0.00000),
20-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.44356, 0.00000, 0.39132, 0.00487, 0.34471, 0.01447),
21-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.30982, 0.02165, 0.27724, 0.03167, 0.24746, 0.04436),
22-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.22159, 0.01715, 0.18510, 0.00031, 0.14462, 0.00031),
23-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.06612, 0.00031, 0.00249, 0.06394, 0.00249, 0.14244),
24-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.00249, 0.18259, 0.01911, 0.21883, 0.04599, 0.24471),
25-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.02722, 0.28868, 0.01457, 0.33865, 0.00753, 0.39628),
26-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.00000, 0.45791, 0.00000, 0.51939, 0.00000, 0.56880),
27-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.00000, 0.61721, 0.00000, 0.67197, 0.00825, 0.72261),
28-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.01810, 0.78328, 0.03892, 0.83191, 0.07194, 0.87118),
29-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.09083, 0.89371, 0.11410, 0.91334, 0.14098, 0.92964),
30-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.16756, 0.94569, 0.19875, 0.95919, 0.23377, 0.96956),
31-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.30298, 0.99009, 0.39003, 1.00001, 0.50001, 1.00000),
32-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.60996, 1.00000, 0.69709, 0.98998, 0.76637, 0.96938),
33-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.80139, 0.95897, 0.83262, 0.94550, 0.85922, 0.92933),
34-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.88610, 0.91298, 0.90929, 0.89327, 0.92818, 0.87074),
35-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.96113, 0.83142, 0.98194, 0.78283, 0.99179, 0.72219),
36-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(1.00000, 0.67165, 1.00000, 0.61704, 1.00000, 0.56886),
37-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.99995, 0.51962, 0.99997, 0.45839, 0.99239, 0.39676),
38-
PND_PATH_ELEMENT_ADD_LINE_TO_POINT(0.99242, 0.39676),
39-
PND_PATH_ELEMENT_ADD_LINE_TO_POINT(0.99242, 0.39676),
40-
PND_PATH_ELEMENT_CLOSE_SUBPATH(),
41-
PND_PATH_ELEMENT_MOVE_TO_POINT(0.49996, 0.92858),
42-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.07555, 0.92858, 0.07136, 0.77301, 0.07136, 0.56882),
43-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.07136, 0.47892, 0.07179, 0.37177, 0.10865, 0.27996),
44-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.13780, 0.20735, 0.18976, 0.14435, 0.28235, 0.10711),
45-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.33858, 0.08449, 0.40979, 0.07137, 0.49998, 0.07137),
46-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.59015, 0.07137, 0.66137, 0.08453, 0.71758, 0.10722),
47-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.79114, 0.13689, 0.83904, 0.18284, 0.87027, 0.23693),
48-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.84175, 0.22324, 0.80980, 0.21558, 0.77606, 0.21558),
49-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.65562, 0.21558, 0.55799, 0.31319, 0.55799, 0.43361),
50-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.55799, 0.55407, 0.65558, 0.65165, 0.77604, 0.65164),
51-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.83542, 0.65164, 0.88925, 0.62790, 0.92858, 0.58940),
52-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.92780, 0.78239, 0.90996, 0.92861, 0.49996, 0.92858),
53-
PND_PATH_ELEMENT_ADD_LINE_TO_POINT(0.49996, 0.92858),
54-
PND_PATH_ELEMENT_ADD_LINE_TO_POINT(0.49996, 0.92858),
55-
PND_PATH_ELEMENT_CLOSE_SUBPATH(),
56-
PND_PATH_ELEMENT_MOVE_TO_POINT(0.78422, 0.49776),
57-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.78422, 0.53701, 0.75240, 0.56883, 0.71315, 0.56881),
58-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.67390, 0.56881, 0.64209, 0.53699, 0.64209, 0.49774),
59-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.64209, 0.45850, 0.67390, 0.42668, 0.71315, 0.42668),
60-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.75242, 0.42671, 0.78427, 0.45850, 0.78427, 0.49777),
61-
PND_PATH_ELEMENT_ADD_LINE_TO_POINT(0.78422, 0.49776),
62-
PND_PATH_ELEMENT_ADD_LINE_TO_POINT(0.78422, 0.49776),
63-
PND_PATH_ELEMENT_CLOSE_SUBPATH(),
64-
PND_PATH_ELEMENT_MOVE_TO_POINT(0.49996, 0.56880),
65-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.53920, 0.56880, 0.57101, 0.58473, 0.57101, 0.60437),
66-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.57101, 0.62402, 0.53920, 0.63995, 0.49996, 0.63995),
67-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.46073, 0.63995, 0.42892, 0.62402, 0.42892, 0.60437),
68-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.42892, 0.58473, 0.46073, 0.56880, 0.49996, 0.56880),
69-
PND_PATH_ELEMENT_ADD_LINE_TO_POINT(0.49996, 0.56880),
70-
PND_PATH_ELEMENT_CLOSE_SUBPATH(),
71-
PND_PATH_ELEMENT_MOVE_TO_POINT(0.28682, 0.42671),
72-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.32606, 0.42671, 0.35787, 0.45851, 0.35787, 0.49775),
73-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.35787, 0.53699, 0.32606, 0.56880, 0.28682, 0.56880),
74-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.24758, 0.56880, 0.21577, 0.53699, 0.21577, 0.49775),
75-
PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(0.21577, 0.45851, 0.24758, 0.42671, 0.28682, 0.42671),
76-
PND_PATH_ELEMENT_ADD_LINE_TO_POINT(0.28682, 0.42671),
77-
PND_PATH_ELEMENT_CLOSE_SUBPATH()
13+
PND_PATH_ELEMENT(PNDPathElementTypeMoveToPoint, 0.99242, 0.39676),
14+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.98536, 0.33900, 0.97266, 0.28893, 0.95382, 0.24485),
15+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.98069, 0.21900, 0.99742, 0.18267, 0.99742, 0.14244),
16+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.99743, 0.06401, 0.93384, 0.00032, 0.85532, 0.00032),
17+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.81483, 0.00032, 0.77830, 0.01725, 0.75241, 0.04442),
18+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.72266, 0.03175, 0.69013, 0.02173, 0.65529, 0.01453),
19+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.60863, 0.00489, 0.55640, -0.00002, 0.49997, 0.00000),
20+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.44356, 0.00000, 0.39132, 0.00487, 0.34471, 0.01447),
21+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.30982, 0.02165, 0.27724, 0.03167, 0.24746, 0.04436),
22+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.22159, 0.01715, 0.18510, 0.00031, 0.14462, 0.00031),
23+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.06612, 0.00031, 0.00249, 0.06394, 0.00249, 0.14244),
24+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.00249, 0.18259, 0.01911, 0.21883, 0.04599, 0.24471),
25+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.02722, 0.28868, 0.01457, 0.33865, 0.00753, 0.39628),
26+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.00000, 0.45791, 0.00000, 0.51939, 0.00000, 0.56880),
27+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.00000, 0.61721, 0.00000, 0.67197, 0.00825, 0.72261),
28+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.01810, 0.78328, 0.03892, 0.83191, 0.07194, 0.87118),
29+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.09083, 0.89371, 0.11410, 0.91334, 0.14098, 0.92964),
30+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.16756, 0.94569, 0.19875, 0.95919, 0.23377, 0.96956),
31+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.30298, 0.99009, 0.39003, 1.00001, 0.50001, 1.00000),
32+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.60996, 1.00000, 0.69709, 0.98998, 0.76637, 0.96938),
33+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.80139, 0.95897, 0.83262, 0.94550, 0.85922, 0.92933),
34+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.88610, 0.91298, 0.90929, 0.89327, 0.92818, 0.87074),
35+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.96113, 0.83142, 0.98194, 0.78283, 0.99179, 0.72219),
36+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 1.00000, 0.67165, 1.00000, 0.61704, 1.00000, 0.56886),
37+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.99995, 0.51962, 0.99997, 0.45839, 0.99239, 0.39676),
38+
PND_PATH_ELEMENT(PNDPathElementTypeAddLineToPoint, 0.99242, 0.39676),
39+
PND_PATH_ELEMENT(PNDPathElementTypeAddLineToPoint, 0.99242, 0.39676),
40+
PND_PATH_ELEMENT(PNDPathElementTypeCloseSubpath),
41+
PND_PATH_ELEMENT(PNDPathElementTypeMoveToPoint, 0.49996, 0.92858),
42+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.07555, 0.92858, 0.07136, 0.77301, 0.07136, 0.56882),
43+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.07136, 0.47892, 0.07179, 0.37177, 0.10865, 0.27996),
44+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.13780, 0.20735, 0.18976, 0.14435, 0.28235, 0.10711),
45+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.33858, 0.08449, 0.40979, 0.07137, 0.49998, 0.07137),
46+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.59015, 0.07137, 0.66137, 0.08453, 0.71758, 0.10722),
47+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.79114, 0.13689, 0.83904, 0.18284, 0.87027, 0.23693),
48+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.84175, 0.22324, 0.80980, 0.21558, 0.77606, 0.21558),
49+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.65562, 0.21558, 0.55799, 0.31319, 0.55799, 0.43361),
50+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.55799, 0.55407, 0.65558, 0.65165, 0.77604, 0.65164),
51+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.83542, 0.65164, 0.88925, 0.62790, 0.92858, 0.58940),
52+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.92780, 0.78239, 0.90996, 0.92861, 0.49996, 0.92858),
53+
PND_PATH_ELEMENT(PNDPathElementTypeAddLineToPoint, 0.49996, 0.92858),
54+
PND_PATH_ELEMENT(PNDPathElementTypeAddLineToPoint, 0.49996, 0.92858),
55+
PND_PATH_ELEMENT(PNDPathElementTypeCloseSubpath),
56+
PND_PATH_ELEMENT(PNDPathElementTypeMoveToPoint, 0.78422, 0.49776),
57+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.78422, 0.53701, 0.75240, 0.56883, 0.71315, 0.56881),
58+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.67390, 0.56881, 0.64209, 0.53699, 0.64209, 0.49774),
59+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.64209, 0.45850, 0.67390, 0.42668, 0.71315, 0.42668),
60+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.75242, 0.42671, 0.78427, 0.45850, 0.78427, 0.49777),
61+
PND_PATH_ELEMENT(PNDPathElementTypeAddLineToPoint, 0.78422, 0.49776),
62+
PND_PATH_ELEMENT(PNDPathElementTypeAddLineToPoint, 0.78422, 0.49776),
63+
PND_PATH_ELEMENT(PNDPathElementTypeCloseSubpath),
64+
PND_PATH_ELEMENT(PNDPathElementTypeMoveToPoint, 0.49996, 0.56880),
65+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.53920, 0.56880, 0.57101, 0.58473, 0.57101, 0.60437),
66+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.57101, 0.62402, 0.53920, 0.63995, 0.49996, 0.63995),
67+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.46073, 0.63995, 0.42892, 0.62402, 0.42892, 0.60437),
68+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.42892, 0.58473, 0.46073, 0.56880, 0.49996, 0.56880),
69+
PND_PATH_ELEMENT(PNDPathElementTypeAddLineToPoint, 0.49996, 0.56880),
70+
PND_PATH_ELEMENT(PNDPathElementTypeCloseSubpath),
71+
PND_PATH_ELEMENT(PNDPathElementTypeMoveToPoint, 0.28682, 0.42671),
72+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.32606, 0.42671, 0.35787, 0.45851, 0.35787, 0.49775),
73+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.35787, 0.53699, 0.32606, 0.56880, 0.28682, 0.56880),
74+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.24758, 0.56880, 0.21577, 0.53699, 0.21577, 0.49775),
75+
PND_PATH_ELEMENT(PNDPathElementTypeAddCurveToPoint, 0.21577, 0.45851, 0.24758, 0.42671, 0.28682, 0.42671),
76+
PND_PATH_ELEMENT(PNDPathElementTypeAddLineToPoint, 0.28682, 0.42671),
77+
PND_PATH_ELEMENT(PNDPathElementTypeCloseSubpath)
7878
};
7979

8080
CGAffineTransform transform = CGAffineTransformMakeScale(size.width, size.height);
81-
return PNDPathCreateWithElements(elements, sizeof(elements)/sizeof(*elements), &transform);
81+
return PNDPathCreateWithElements(elements, PND_PATH_ELEMENTS_COUNT(elements), &transform);
8282
}

PNDPathCreateWithElements.h

+44-44
Original file line numberDiff line numberDiff line change
@@ -5,59 +5,59 @@
55
// Copyright (c) 2013 Pandamonia LLC. All rights reserved.
66
//
77

8-
#define PND_PATH_ELEMENT_MOVE_TO_POINT(x, y) \
9-
((PNDPathElement){ \
10-
.type = PNDPathElementTypeMoveToPoint, \
11-
.points = { \
12-
{ (x), (y) } \
13-
} \
14-
})
15-
16-
#define PND_PATH_ELEMENT_ADD_LINE_TO_POINT(x, y) \
17-
((PNDPathElement){ \
18-
.type = PNDPathElementTypeAddLineToPoint, \
19-
.points = { \
20-
{ (x), (y) } \
21-
} \
22-
})
23-
24-
#define PND_PATH_ELEMENT_ADD_QUAD_CURVE_TO_POINT(cpx, cpy, x, y) \
25-
((PNDPathElement){ \
26-
.type = PNDPathElementTypeAddQuadCurveToPoint, \
27-
.points = { \
28-
{ (cpx), (cpy) }, \
29-
{ (x), (y) } \
30-
} \
31-
})
32-
33-
#define PND_PATH_ELEMENT_ADD_CURVE_TO_POINT(cp1x, cp1y, cp2x, cp2y, x, y) \
34-
((PNDPathElement){ \
35-
.type = PNDPathElementTypeAddCurveToPoint, \
36-
.points = { \
37-
{ (cp1x), (cp1y) }, \
38-
{ (cp2x), (cp2y) }, \
39-
{ (x), (y) } \
40-
} \
41-
})
8+
@import CoreFoundation;
9+
@import CoreGraphics;
4210

43-
#define PND_PATH_ELEMENT_CLOSE_SUBPATH() \
11+
#define PND_PATH_ELEMENT(_type, ...) \
4412
((PNDPathElement){ \
45-
.type = PNDPathElementTypeCloseSubpath, \
46-
.points = {} \
13+
.type = _type, \
14+
.values = { __VA_ARGS__ } \
4715
})
4816

17+
#define PND_PATH_ELEMENTS_COUNT(elements) (sizeof(elements)/sizeof(*elements))
4918

50-
typedef NS_ENUM(NSUInteger, PNDPathElementType) {
51-
PNDPathElementTypeMoveToPoint = kCGPathElementMoveToPoint,
52-
PNDPathElementTypeAddLineToPoint = kCGPathElementAddLineToPoint,
19+
typedef CF_ENUM(CFIndex, PNDPathElementType) {
20+
// A path element that calls CGPathMoveToPoint.
21+
PNDPathElementTypeMoveToPoint = kCGPathElementMoveToPoint,
22+
23+
// A path element that calls CGPathAddLineToPoint.
24+
PNDPathElementTypeAddLineToPoint = kCGPathElementAddLineToPoint,
25+
26+
// A path element that calls CGPathAddQuadCurveToPoint.
5327
PNDPathElementTypeAddQuadCurveToPoint = kCGPathElementAddQuadCurveToPoint,
54-
PNDPathElementTypeAddCurveToPoint = kCGPathElementAddCurveToPoint,
55-
PNDPathElementTypeCloseSubpath = kCGPathElementCloseSubpath
28+
29+
// A path element that calls CGPathAddCurveToPoint.
30+
PNDPathElementTypeAddCurveToPoint = kCGPathElementAddCurveToPoint,
31+
32+
// A path element that calls CGPathCloseSubpath.
33+
PNDPathElementTypeCloseSubpath = kCGPathElementCloseSubpath,
34+
35+
// A path element that calls CGPathAddRoundedRect.
36+
PNDPathElementTypeAddRoundedRect = 1000,
37+
38+
// A path element that calls CGPathAddRect.
39+
PNDPathElementTypeAddRect,
40+
41+
// A path element that calls CGPathAddEllipseInRect.
42+
PNDPathElementTypeAddEllipseInRect,
43+
44+
// A path element that calls CGPathAddRelativeArc.
45+
PNDPathElementTypeAddRelativeArc,
46+
47+
// A path element that calls CGPathAddArc with the clockwise argument set to true.
48+
PNDPathElementTypeAddArcClockwise,
49+
50+
// A path element that calls CGPathAddArc with the clockwise argument set to false.
51+
PNDPathElementTypeAddArcCounterclockwise,
52+
53+
// A path element that calls CGPathAddArcToPoint.
54+
PNDPathElementTypeAddArcToPoint
5655
};
5756

57+
// A data structure that provides information about a path element.
5858
typedef struct PNDPathElement {
5959
PNDPathElementType type;
60-
CGPoint points[3];
60+
CGFloat values[6];
6161
} PNDPathElement;
6262

63-
extern CGPathRef PNDPathCreateWithElements(const PNDPathElement elements[], size_t count, const CGAffineTransform *transform);
63+
CG_EXTERN CGPathRef PNDPathCreateWithElements(const PNDPathElement elements[], size_t count, const CGAffineTransform *transform);

PNDPathCreateWithElements.m

+37-7
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,54 @@ CGPathRef PNDPathCreateWithElements(const PNDPathElement elements[], size_t coun
1414
for (size_t i = 0; i < count; i++) {
1515
PNDPathElement element = elements[i];
1616
switch (element.type) {
17-
case PNDPathElementTypeAddCurveToPoint:
18-
CGPathAddCurveToPoint(mutablePath, NULL, element.points[0].x, element.points[0].y, element.points[1].x, element.points[1].y, element.points[2].x, element.points[2].y);
17+
case PNDPathElementTypeMoveToPoint:
18+
CGPathMoveToPoint(mutablePath, NULL, element.values[0], element.values[1]);
1919
break;
20-
20+
2121
case PNDPathElementTypeAddLineToPoint:
22-
CGPathAddLineToPoint(mutablePath, NULL, element.points[0].x, element.points[0].y);
22+
CGPathAddLineToPoint(mutablePath, NULL, element.values[0], element.values[1]);
2323
break;
2424

2525
case PNDPathElementTypeAddQuadCurveToPoint:
26-
CGPathAddQuadCurveToPoint(mutablePath, NULL, element.points[0].x, element.points[0].y, element.points[1].x, element.points[1].y);
26+
CGPathAddQuadCurveToPoint(mutablePath, NULL, element.values[0], element.values[1], element.values[2], element.values[3]);
2727
break;
28+
29+
case PNDPathElementTypeAddCurveToPoint:
30+
CGPathAddCurveToPoint(mutablePath, NULL, element.values[0], element.values[1], element.values[2], element.values[3], element.values[4], element.values[5]);
31+
break;
32+
2833

2934
case PNDPathElementTypeCloseSubpath:
3035
CGPathCloseSubpath(mutablePath);
3136
break;
3237

33-
case PNDPathElementTypeMoveToPoint:
34-
CGPathMoveToPoint(mutablePath, NULL, element.points[0].x, element.points[0].y);
38+
39+
case PNDPathElementTypeAddRoundedRect:
40+
CGPathAddRoundedRect(mutablePath, NULL, (CGRect){ element.values[0], element.values[1], element.values[2], element.values[3] }, element.values[4], element.values[5]);
41+
break;
42+
43+
case PNDPathElementTypeAddRect:
44+
CGPathAddRect(mutablePath, NULL, (CGRect){ element.values[0], element.values[1], element.values[2], element.values[3] });
45+
break;
46+
47+
case PNDPathElementTypeAddEllipseInRect:
48+
CGPathAddEllipseInRect(mutablePath, NULL, (CGRect){ element.values[0], element.values[1], element.values[2], element.values[3] });
49+
break;
50+
51+
case PNDPathElementTypeAddRelativeArc:
52+
CGPathAddRelativeArc(mutablePath, NULL, element.values[0], element.values[1], element.values[2], element.values[3], element.values[4]);
53+
break;
54+
55+
case PNDPathElementTypeAddArcClockwise:
56+
CGPathAddArc(mutablePath, NULL, element.values[0], element.values[1], element.values[2], element.values[3], element.values[4], true);
57+
break;
58+
59+
case PNDPathElementTypeAddArcCounterclockwise:
60+
CGPathAddArc(mutablePath, NULL, element.values[0], element.values[1], element.values[2], element.values[3], element.values[4], false);
61+
break;
62+
63+
case PNDPathElementTypeAddArcToPoint:
64+
CGPathAddArcToPoint(mutablePath, NULL, element.values[0], element.values[1], element.values[2], element.values[3], element.values[4]);
3565
break;
3666
}
3767
}

0 commit comments

Comments
 (0)