| Index: src/pdf/SkPDFUtils.cpp
|
| diff --git a/src/pdf/SkPDFUtils.cpp b/src/pdf/SkPDFUtils.cpp
|
| index d034270e07447f07503e603109868d72e9d252f9..e488f7da06956ede2d49139a788f3925ccd57b16 100644
|
| --- a/src/pdf/SkPDFUtils.cpp
|
| +++ b/src/pdf/SkPDFUtils.cpp
|
| @@ -93,6 +93,13 @@
|
| SkPDFScalar::Append(dstY, content);
|
| content->writeText(" ");
|
| content->writeText(cmd.c_str());
|
| +}
|
| +
|
| +static void append_quad(const SkPoint quad[], SkWStream* content) {
|
| + SkPoint cubic[4];
|
| + SkConvertQuadToCubic(quad, cubic);
|
| + SkPDFUtils::AppendCubic(cubic[1].fX, cubic[1].fY, cubic[2].fX, cubic[2].fY,
|
| + cubic[3].fX, cubic[3].fY, content);
|
| }
|
|
|
| // static
|
| @@ -130,9 +137,7 @@
|
| SkDynamicMemoryWStream currentSegment;
|
| SkPoint args[4];
|
| SkPath::Iter iter(path, false);
|
| - for (SkPath::Verb verb = iter.next(args);
|
| - verb != SkPath::kDone_Verb;
|
| - verb = iter.next(args)) {
|
| + for (SkPath::Verb verb = iter.next(args); verb != SkPath::kDone_Verb; verb = iter.next(args)) {
|
| // args gets all the points, even the implicit first point.
|
| switch (verb) {
|
| case SkPath::kMove_Verb:
|
| @@ -150,14 +155,18 @@
|
| fillState = kNonSingleLine_SkipFillState;
|
| }
|
| break;
|
| - case SkPath::kQuad_Verb: {
|
| - SkPoint cubic[4];
|
| - SkConvertQuadToCubic(args, cubic);
|
| - AppendCubic(cubic[1].fX, cubic[1].fY, cubic[2].fX, cubic[2].fY,
|
| - cubic[3].fX, cubic[3].fY, ¤tSegment);
|
| + case SkPath::kQuad_Verb:
|
| + append_quad(args, ¤tSegment);
|
| fillState = kNonSingleLine_SkipFillState;
|
| break;
|
| - }
|
| + case SkPath::kConic_Verb: {
|
| + const SkScalar tol = SK_Scalar1 / 4;
|
| + SkAutoConicToQuads converter;
|
| + const SkPoint* quads = converter.computeQuads(args, iter.conicWeight(), tol);
|
| + for (int i = 0; i < converter.countQuads(); ++i) {
|
| + append_quad(&quads[i * 2], ¤tSegment);
|
| + }
|
| + } break;
|
| case SkPath::kCubic_Verb:
|
| AppendCubic(args[1].fX, args[1].fY, args[2].fX, args[2].fY,
|
| args[3].fX, args[3].fY, ¤tSegment);
|
|
|