| 21 | } |
| 22 | |
| 23 | void shapeToSkiaPath(SkPath &skPath, const Shape &shape) { |
| 24 | for (std::vector<Contour>::const_iterator contour = shape.contours.begin(); contour != shape.contours.end(); ++contour) { |
| 25 | if (!contour->edges.empty()) { |
| 26 | const EdgeSegment *edge = contour->edges.back(); |
| 27 | skPath.moveTo(pointToSkiaPoint(*edge->controlPoints())); |
| 28 | for (std::vector<EdgeHolder>::const_iterator nextEdge = contour->edges.begin(); nextEdge != contour->edges.end(); edge = *nextEdge++) { |
| 29 | const Point2 *p = edge->controlPoints(); |
| 30 | switch (edge->type()) { |
| 31 | case (int) LinearSegment::EDGE_TYPE: |
| 32 | skPath.lineTo(pointToSkiaPoint(p[1])); |
| 33 | break; |
| 34 | case (int) QuadraticSegment::EDGE_TYPE: |
| 35 | skPath.quadTo(pointToSkiaPoint(p[1]), pointToSkiaPoint(p[2])); |
| 36 | break; |
| 37 | case (int) CubicSegment::EDGE_TYPE: |
| 38 | skPath.cubicTo(pointToSkiaPoint(p[1]), pointToSkiaPoint(p[2]), pointToSkiaPoint(p[3])); |
| 39 | break; |
| 40 | } |
| 41 | } |
| 42 | } |
| 43 | } |
| 44 | } |
| 45 | |
| 46 | void shapeFromSkiaPath(Shape &shape, const SkPath &skPath) { |
| 47 | shape.contours.clear(); |
no test coverage detected