MCPcopy Create free account
hub / github.com/MyGUI/mygui / shapeFromSkiaPath

Function shapeFromSkiaPath

MyGUIEngine/src/msdfgen/ext/resolve-shape-geometry.cpp:46–81  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

44}
45
46void shapeFromSkiaPath(Shape &shape, const SkPath &skPath) {
47 shape.contours.clear();
48 Contour *contour = &shape.addContour();
49 SkPath::Iter pathIterator(skPath, true);
50 SkPoint edgePoints[4];
51 for (SkPath::Verb op; (op = pathIterator.next(edgePoints)) != SkPath::kDone_Verb;) {
52 switch (op) {
53 case SkPath::kMove_Verb:
54 if (!contour->edges.empty())
55 contour = &shape.addContour();
56 break;
57 case SkPath::kLine_Verb:
58 contour->addEdge(EdgeHolder(pointFromSkiaPoint(edgePoints[0]), pointFromSkiaPoint(edgePoints[1])));
59 break;
60 case SkPath::kQuad_Verb:
61 contour->addEdge(EdgeHolder(pointFromSkiaPoint(edgePoints[0]), pointFromSkiaPoint(edgePoints[1]), pointFromSkiaPoint(edgePoints[2])));
62 break;
63 case SkPath::kCubic_Verb:
64 contour->addEdge(EdgeHolder(pointFromSkiaPoint(edgePoints[0]), pointFromSkiaPoint(edgePoints[1]), pointFromSkiaPoint(edgePoints[2]), pointFromSkiaPoint(edgePoints[3])));
65 break;
66 case SkPath::kConic_Verb:
67 {
68 SkPoint quadPoints[5];
69 SkPath::ConvertConicToQuads(edgePoints[0], edgePoints[1], edgePoints[2], pathIterator.conicWeight(), quadPoints, 1);
70 contour->addEdge(EdgeHolder(pointFromSkiaPoint(quadPoints[0]), pointFromSkiaPoint(quadPoints[1]), pointFromSkiaPoint(quadPoints[2])));
71 contour->addEdge(EdgeHolder(pointFromSkiaPoint(quadPoints[2]), pointFromSkiaPoint(quadPoints[3]), pointFromSkiaPoint(quadPoints[4])));
72 }
73 break;
74 case SkPath::kClose_Verb:
75 case SkPath::kDone_Verb:
76 break;
77 }
78 }
79 if (contour->edges.empty())
80 shape.contours.pop_back();
81}
82
83static void pruneCrossedQuadrilaterals(Shape &shape) {
84 int n = 0;

Callers 3

loadSvgShapeFunction · 0.85
parseSvgShapeFunction · 0.85
resolveShapeGeometryFunction · 0.85

Calls 7

EdgeHolderClass · 0.85
pointFromSkiaPointFunction · 0.85
addContourMethod · 0.80
clearMethod · 0.45
nextMethod · 0.45
emptyMethod · 0.45
addEdgeMethod · 0.45

Tested by

no test coverage detected