| OLD | NEW | 
|---|
| 1 | 1 | 
| 2 /* | 2 /* | 
| 3  * Copyright 2011 Google Inc. | 3  * Copyright 2011 Google Inc. | 
| 4  * | 4  * | 
| 5  * Use of this source code is governed by a BSD-style license that can be | 5  * Use of this source code is governed by a BSD-style license that can be | 
| 6  * found in the LICENSE file. | 6  * found in the LICENSE file. | 
| 7  */ | 7  */ | 
| 8 | 8 | 
| 9 | 9 | 
| 10 #include "SkData.h" | 10 #include "SkData.h" | 
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 88         SkPDFScalar::Append(ctl2Y, content); | 88         SkPDFScalar::Append(ctl2Y, content); | 
| 89         content->writeText(" "); | 89         content->writeText(" "); | 
| 90     } | 90     } | 
| 91     SkPDFScalar::Append(dstX, content); | 91     SkPDFScalar::Append(dstX, content); | 
| 92     content->writeText(" "); | 92     content->writeText(" "); | 
| 93     SkPDFScalar::Append(dstY, content); | 93     SkPDFScalar::Append(dstY, content); | 
| 94     content->writeText(" "); | 94     content->writeText(" "); | 
| 95     content->writeText(cmd.c_str()); | 95     content->writeText(cmd.c_str()); | 
| 96 } | 96 } | 
| 97 | 97 | 
| 98 static void append_quad(const SkPoint quad[], SkWStream* content) { |  | 
| 99     SkPoint cubic[4]; |  | 
| 100     SkConvertQuadToCubic(quad, cubic); |  | 
| 101     SkPDFUtils::AppendCubic(cubic[1].fX, cubic[1].fY, cubic[2].fX, cubic[2].fY, |  | 
| 102                             cubic[3].fX, cubic[3].fY, content); |  | 
| 103 } |  | 
| 104 |  | 
| 105 // static | 98 // static | 
| 106 void SkPDFUtils::AppendRectangle(const SkRect& rect, SkWStream* content) { | 99 void SkPDFUtils::AppendRectangle(const SkRect& rect, SkWStream* content) { | 
| 107     // Skia has 0,0 at top left, pdf at bottom left.  Do the right thing. | 100     // Skia has 0,0 at top left, pdf at bottom left.  Do the right thing. | 
| 108     SkScalar bottom = SkMinScalar(rect.fBottom, rect.fTop); | 101     SkScalar bottom = SkMinScalar(rect.fBottom, rect.fTop); | 
| 109 | 102 | 
| 110     SkPDFScalar::Append(rect.fLeft, content); | 103     SkPDFScalar::Append(rect.fLeft, content); | 
| 111     content->writeText(" "); | 104     content->writeText(" "); | 
| 112     SkPDFScalar::Append(bottom, content); | 105     SkPDFScalar::Append(bottom, content); | 
| 113     content->writeText(" "); | 106     content->writeText(" "); | 
| 114     SkPDFScalar::Append(rect.width(), content); | 107     SkPDFScalar::Append(rect.width(), content); | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 130         kNonSingleLine_SkipFillState = 2, | 123         kNonSingleLine_SkipFillState = 2, | 
| 131     }; | 124     }; | 
| 132     SkipFillState fillState = kEmpty_SkipFillState; | 125     SkipFillState fillState = kEmpty_SkipFillState; | 
| 133     if (paintStyle != SkPaint::kFill_Style) { | 126     if (paintStyle != SkPaint::kFill_Style) { | 
| 134         fillState = kNonSingleLine_SkipFillState; | 127         fillState = kNonSingleLine_SkipFillState; | 
| 135     } | 128     } | 
| 136     SkPoint lastMovePt = SkPoint::Make(0,0); | 129     SkPoint lastMovePt = SkPoint::Make(0,0); | 
| 137     SkDynamicMemoryWStream currentSegment; | 130     SkDynamicMemoryWStream currentSegment; | 
| 138     SkPoint args[4]; | 131     SkPoint args[4]; | 
| 139     SkPath::Iter iter(path, false); | 132     SkPath::Iter iter(path, false); | 
| 140     for (SkPath::Verb verb = iter.next(args); verb != SkPath::kDone_Verb; verb =
      iter.next(args)) { | 133     for (SkPath::Verb verb = iter.next(args); | 
|  | 134          verb != SkPath::kDone_Verb; | 
|  | 135          verb = iter.next(args)) { | 
| 141         // args gets all the points, even the implicit first point. | 136         // args gets all the points, even the implicit first point. | 
| 142         switch (verb) { | 137         switch (verb) { | 
| 143             case SkPath::kMove_Verb: | 138             case SkPath::kMove_Verb: | 
| 144                 MoveTo(args[0].fX, args[0].fY, ¤tSegment); | 139                 MoveTo(args[0].fX, args[0].fY, ¤tSegment); | 
| 145                 lastMovePt = args[0]; | 140                 lastMovePt = args[0]; | 
| 146                 fillState = kEmpty_SkipFillState; | 141                 fillState = kEmpty_SkipFillState; | 
| 147                 break; | 142                 break; | 
| 148             case SkPath::kLine_Verb: | 143             case SkPath::kLine_Verb: | 
| 149                 AppendLine(args[1].fX, args[1].fY, ¤tSegment); | 144                 AppendLine(args[1].fX, args[1].fY, ¤tSegment); | 
| 150                 if (fillState == kEmpty_SkipFillState) { | 145                 if (fillState == kEmpty_SkipFillState) { | 
| 151                    if (args[0] != lastMovePt) { | 146                    if (args[0] != lastMovePt) { | 
| 152                        fillState = kSingleLine_SkipFillState; | 147                        fillState = kSingleLine_SkipFillState; | 
| 153                    } | 148                    } | 
| 154                 } else if (fillState == kSingleLine_SkipFillState) { | 149                 } else if (fillState == kSingleLine_SkipFillState) { | 
| 155                     fillState = kNonSingleLine_SkipFillState; | 150                     fillState = kNonSingleLine_SkipFillState; | 
| 156                 } | 151                 } | 
| 157                 break; | 152                 break; | 
| 158             case SkPath::kQuad_Verb: | 153             case SkPath::kQuad_Verb: { | 
| 159                 append_quad(args, ¤tSegment); | 154                 SkPoint cubic[4]; | 
|  | 155                 SkConvertQuadToCubic(args, cubic); | 
|  | 156                 AppendCubic(cubic[1].fX, cubic[1].fY, cubic[2].fX, cubic[2].fY, | 
|  | 157                             cubic[3].fX, cubic[3].fY, ¤tSegment); | 
| 160                 fillState = kNonSingleLine_SkipFillState; | 158                 fillState = kNonSingleLine_SkipFillState; | 
| 161                 break; | 159                 break; | 
| 162             case SkPath::kConic_Verb: { | 160             } | 
| 163                 const SkScalar tol = SK_Scalar1 / 4; |  | 
| 164                 SkAutoConicToQuads converter; |  | 
| 165                 const SkPoint* quads = converter.computeQuads(args, iter.conicWe
     ight(), tol); |  | 
| 166                 for (int i = 0; i < converter.countQuads(); ++i) { |  | 
| 167                     append_quad(&quads[i * 2], ¤tSegment); |  | 
| 168                 } |  | 
| 169             } break; |  | 
| 170             case SkPath::kCubic_Verb: | 161             case SkPath::kCubic_Verb: | 
| 171                 AppendCubic(args[1].fX, args[1].fY, args[2].fX, args[2].fY, | 162                 AppendCubic(args[1].fX, args[1].fY, args[2].fX, args[2].fY, | 
| 172                             args[3].fX, args[3].fY, ¤tSegment); | 163                             args[3].fX, args[3].fY, ¤tSegment); | 
| 173                 fillState = kNonSingleLine_SkipFillState; | 164                 fillState = kNonSingleLine_SkipFillState; | 
| 174                 break; | 165                 break; | 
| 175             case SkPath::kClose_Verb: | 166             case SkPath::kClose_Verb: | 
| 176                 if (fillState != kSingleLine_SkipFillState) { | 167                 if (fillState != kSingleLine_SkipFillState) { | 
| 177                     ClosePath(¤tSegment); | 168                     ClosePath(¤tSegment); | 
| 178                     SkData* data = currentSegment.copyToData(); | 169                     SkData* data = currentSegment.copyToData(); | 
| 179                     content->write(data->data(), data->size()); | 170                     content->write(data->data(), data->size()); | 
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 249     // color (SCN, scn) | 240     // color (SCN, scn) | 
| 250     SkString resourceName = SkPDFResourceDict::getResourceName( | 241     SkString resourceName = SkPDFResourceDict::getResourceName( | 
| 251             SkPDFResourceDict::kPattern_ResourceType, | 242             SkPDFResourceDict::kPattern_ResourceType, | 
| 252             objectIndex); | 243             objectIndex); | 
| 253     content->writeText("/Pattern CS/Pattern cs/"); | 244     content->writeText("/Pattern CS/Pattern cs/"); | 
| 254     content->writeText(resourceName.c_str()); | 245     content->writeText(resourceName.c_str()); | 
| 255     content->writeText(" SCN/"); | 246     content->writeText(" SCN/"); | 
| 256     content->writeText(resourceName.c_str()); | 247     content->writeText(resourceName.c_str()); | 
| 257     content->writeText(" scn\n"); | 248     content->writeText(" scn\n"); | 
| 258 } | 249 } | 
| OLD | NEW | 
|---|