OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkPdfRenderer.h" | 8 #include "SkPdfRenderer.h" |
9 | 9 |
10 #include "SkBitmapDevice.h" | 10 #include "SkBitmapDevice.h" |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 NotOwnedString::init(&strings_DeviceCMYK, "DeviceCMYK"); | 201 NotOwnedString::init(&strings_DeviceCMYK, "DeviceCMYK"); |
202 } | 202 } |
203 }; | 203 }; |
204 | 204 |
205 // TODO(edisonn): this will not work in chrome! Find another solution! | 205 // TODO(edisonn): this will not work in chrome! Find another solution! |
206 StringsInit gStringsInit; | 206 StringsInit gStringsInit; |
207 | 207 |
208 // TODO(edisonn): Document SkPdfTokenLooper and subclasses. | 208 // TODO(edisonn): Document SkPdfTokenLooper and subclasses. |
209 class PdfInlineImageLooper : public SkPdfTokenLooper { | 209 class PdfInlineImageLooper : public SkPdfTokenLooper { |
210 public: | 210 public: |
211 PdfInlineImageLooper() | 211 explicit PdfInlineImageLooper(SkPdfTokenLooper* parent) |
212 : SkPdfTokenLooper(NULL, NULL, NULL, NULL) {} | 212 : INHERITED(parent) {} |
213 | 213 |
214 virtual SkPdfResult consumeToken(PdfToken& token); | 214 virtual SkPdfResult consumeToken(PdfToken& token) SK_OVERRIDE; |
215 virtual void loop(); | 215 virtual void loop() SK_OVERRIDE; |
216 SkPdfResult done(); | 216 |
| 217 private: |
| 218 typedef SkPdfTokenLooper INHERITED; |
217 }; | 219 }; |
218 | 220 |
219 class PdfCompatibilitySectionLooper : public SkPdfTokenLooper { | 221 class PdfCompatibilitySectionLooper : public SkPdfTokenLooper { |
220 public: | 222 public: |
221 PdfCompatibilitySectionLooper() | 223 explicit PdfCompatibilitySectionLooper(SkPdfTokenLooper* parent) |
222 : SkPdfTokenLooper(NULL, NULL, NULL, NULL) {} | 224 : INHERITED (parent) {} |
223 | 225 |
224 virtual SkPdfResult consumeToken(PdfToken& token); | 226 virtual SkPdfResult consumeToken(PdfToken& token) SK_OVERRIDE; |
225 virtual void loop(); | 227 virtual void loop() SK_OVERRIDE; |
| 228 |
| 229 private: |
| 230 typedef SkPdfTokenLooper INHERITED; |
226 }; | 231 }; |
227 | 232 |
228 // Utilities | 233 // Utilities |
229 static void setup_bitmap(SkBitmap* bitmap, int width, int height, SkColor color
= SK_ColorWHITE) { | 234 static void setup_bitmap(SkBitmap* bitmap, int width, int height, SkColor color
= SK_ColorWHITE) { |
230 bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height); | 235 bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height); |
231 | 236 |
232 bitmap->allocPixels(); | 237 bitmap->allocPixels(); |
233 bitmap->eraseColor(color); | 238 bitmap->eraseColor(color); |
234 } | 239 } |
235 | 240 |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
340 // } | 345 // } |
341 | 346 |
342 pdfContext->fGraphicsState.applyGraphicsState(&paint, false); | 347 pdfContext->fGraphicsState.applyGraphicsState(&paint, false); |
343 | 348 |
344 skfont->drawText(decoded, &paint, pdfContext, canvas); | 349 skfont->drawText(decoded, &paint, pdfContext, canvas); |
345 | 350 |
346 return kOK_SkPdfResult; | 351 return kOK_SkPdfResult; |
347 } | 352 } |
348 | 353 |
349 // TODO(edisonn): create header files with declarations! | 354 // TODO(edisonn): create header files with declarations! |
350 SkPdfResult PdfOp_q(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper
** looper); | 355 SkPdfResult PdfOp_q(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper
* parentLooper); |
351 SkPdfResult PdfOp_Q(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper
** looper); | 356 SkPdfResult PdfOp_Q(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper
* parentLooper); |
352 SkPdfResult PdfOp_Tw(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLoope
r** looper); | 357 SkPdfResult PdfOp_Tw(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLoope
r* parentLooper); |
353 SkPdfResult PdfOp_Tc(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLoope
r** looper); | 358 SkPdfResult PdfOp_Tc(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLoope
r* parentLooper); |
354 | 359 |
355 // TODO(edisonn): perf!!! | 360 // TODO(edisonn): perf!!! |
356 static SkColorTable* getGrayColortable() { | 361 static SkColorTable* getGrayColortable() { |
357 static SkColorTable* grayColortable = NULL; | 362 static SkColorTable* grayColortable = NULL; |
358 if (grayColortable == NULL) { | 363 if (grayColortable == NULL) { |
359 SkPMColor* colors = new SkPMColor[256]; | 364 SkPMColor* colors = new SkPMColor[256]; |
360 for (int i = 0 ; i < 256; i++) { | 365 for (int i = 0 ; i < 256; i++) { |
361 colors[i] = SkPreMultiplyARGB(255, i, i, i); | 366 colors[i] = SkPreMultiplyARGB(255, i, i, i); |
362 } | 367 } |
363 grayColortable = new SkColorTable(colors, 256); | 368 grayColortable = new SkColorTable(colors, 256); |
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
908 canvas->save(); | 913 canvas->save(); |
909 } | 914 } |
910 | 915 |
911 pdfContext->parseStream(stream, canvas); | 916 pdfContext->parseStream(stream, canvas); |
912 | 917 |
913 canvas->restore(); | 918 canvas->restore(); |
914 PdfOp_Q(pdfContext, canvas, NULL); | 919 PdfOp_Q(pdfContext, canvas, NULL); |
915 return kPartial_SkPdfResult; | 920 return kPartial_SkPdfResult; |
916 } | 921 } |
917 | 922 |
918 SkPdfResult PdfOp_q(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper
** looper) { | 923 SkPdfResult PdfOp_q(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper
*) { |
919 pdfContext->fStateStack.push(pdfContext->fGraphicsState); | 924 pdfContext->fStateStack.push(pdfContext->fGraphicsState); |
920 canvas->save(); | 925 canvas->save(); |
921 pdfContext->fObjectStack.nest(); | 926 pdfContext->fObjectStack.nest(); |
922 return kOK_SkPdfResult; | 927 return kOK_SkPdfResult; |
923 } | 928 } |
924 | 929 |
925 SkPdfResult PdfOp_Q(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper
** looper) { | 930 SkPdfResult PdfOp_Q(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper
*) { |
926 if (pdfContext->fStateStack.count() > 0) { | 931 if (pdfContext->fStateStack.count() > 0) { |
927 pdfContext->fGraphicsState = pdfContext->fStateStack.top(); | 932 pdfContext->fGraphicsState = pdfContext->fStateStack.top(); |
928 pdfContext->fStateStack.pop(); | 933 pdfContext->fStateStack.pop(); |
929 canvas->restore(); | 934 canvas->restore(); |
930 | 935 |
931 if (pdfContext->fObjectStack.nestingLevel() == 0) { | 936 if (pdfContext->fObjectStack.nestingLevel() == 0) { |
932 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kStackNestingOverflow_S
kPdfIssue, | 937 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kStackNestingOverflow_S
kPdfIssue, |
933 "stack nesting overflow (q/Q)", NULL, pdfContext); | 938 "stack nesting overflow (q/Q)", NULL, pdfContext); |
934 return kIgnoreError_SkPdfResult; | 939 return kIgnoreError_SkPdfResult; |
935 } else { | 940 } else { |
936 pdfContext->fObjectStack.unnest(); | 941 pdfContext->fObjectStack.unnest(); |
937 } | 942 } |
938 } else { | 943 } else { |
939 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kStackOverflow_SkPdfIssue, | 944 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kStackOverflow_SkPdfIssue, |
940 "stack overflow (q/Q)", NULL, pdfContext); | 945 "stack overflow (q/Q)", NULL, pdfContext); |
941 return kIgnoreError_SkPdfResult; | 946 return kIgnoreError_SkPdfResult; |
942 } | 947 } |
943 | 948 |
944 return kOK_SkPdfResult; | 949 return kOK_SkPdfResult; |
945 } | 950 } |
946 | 951 |
947 static SkPdfResult PdfOp_cm(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 952 static SkPdfResult PdfOp_cm(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
948 EXPECT_OPERANDS("cm", pdfContext, 6); | 953 EXPECT_OPERANDS("cm", pdfContext, 6); |
949 POP_NUMBER(pdfContext, f); | 954 POP_NUMBER(pdfContext, f); |
950 POP_NUMBER(pdfContext, e); | 955 POP_NUMBER(pdfContext, e); |
951 POP_NUMBER(pdfContext, d); | 956 POP_NUMBER(pdfContext, d); |
952 POP_NUMBER(pdfContext, c); | 957 POP_NUMBER(pdfContext, c); |
953 POP_NUMBER(pdfContext, b); | 958 POP_NUMBER(pdfContext, b); |
954 POP_NUMBER(pdfContext, a); | 959 POP_NUMBER(pdfContext, a); |
955 CHECK_PARAMETERS(); | 960 CHECK_PARAMETERS(); |
956 double array[6] = {a, b, c, d, e, f}; | 961 double array[6] = {a, b, c, d, e, f}; |
957 | 962 |
(...skipping 20 matching lines...) Expand all Loading... |
978 printf("\n"); | 983 printf("\n"); |
979 SkTraceMatrix(pdfContext->fGraphicsState.fCTM, "cm"); | 984 SkTraceMatrix(pdfContext->fGraphicsState.fCTM, "cm"); |
980 #endif | 985 #endif |
981 | 986 |
982 return kOK_SkPdfResult; | 987 return kOK_SkPdfResult; |
983 } | 988 } |
984 | 989 |
985 //leading TL Set the text leading, Tl | 990 //leading TL Set the text leading, Tl |
986 //, to leading, which is a number expressed in unscaled text | 991 //, to leading, which is a number expressed in unscaled text |
987 //space units. Text leading is used only by the T*, ', and " operators. Initial
value: 0. | 992 //space units. Text leading is used only by the T*, ', and " operators. Initial
value: 0. |
988 static SkPdfResult PdfOp_TL(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 993 static SkPdfResult PdfOp_TL(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
989 EXPECT_OPERANDS("TL", pdfContext, 1); | 994 EXPECT_OPERANDS("TL", pdfContext, 1); |
990 POP_NUMBER(pdfContext, ty); | 995 POP_NUMBER(pdfContext, ty); |
991 CHECK_PARAMETERS(); | 996 CHECK_PARAMETERS(); |
992 | 997 |
993 pdfContext->fGraphicsState.fTextLeading = ty; | 998 pdfContext->fGraphicsState.fTextLeading = ty; |
994 | 999 |
995 return kOK_SkPdfResult; | 1000 return kOK_SkPdfResult; |
996 } | 1001 } |
997 | 1002 |
998 static SkPdfResult PdfOp_Td(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1003 static SkPdfResult PdfOp_Td(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
999 EXPECT_OPERANDS("Td", pdfContext, 2); | 1004 EXPECT_OPERANDS("Td", pdfContext, 2); |
1000 POP_NUMBER(pdfContext, ty); | 1005 POP_NUMBER(pdfContext, ty); |
1001 POP_NUMBER(pdfContext, tx); | 1006 POP_NUMBER(pdfContext, tx); |
1002 CHECK_PARAMETERS(); | 1007 CHECK_PARAMETERS(); |
1003 | 1008 |
1004 double array[6] = {1, 0, 0, 1, tx, -ty}; | 1009 double array[6] = {1, 0, 0, 1, tx, -ty}; |
1005 SkMatrix matrix = SkMatrixFromPdfMatrix(array); | 1010 SkMatrix matrix = SkMatrixFromPdfMatrix(array); |
1006 | 1011 |
1007 pdfContext->fGraphicsState.fMatrixTm.preConcat(matrix); | 1012 pdfContext->fGraphicsState.fMatrixTm.preConcat(matrix); |
1008 pdfContext->fGraphicsState.fMatrixTlm.preConcat(matrix); | 1013 pdfContext->fGraphicsState.fMatrixTlm.preConcat(matrix); |
1009 | 1014 |
1010 return kPartial_SkPdfResult; | 1015 return kPartial_SkPdfResult; |
1011 } | 1016 } |
1012 | 1017 |
1013 static SkPdfResult PdfOp_TD(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1018 static SkPdfResult PdfOp_TD(SkPdfContext* pdfContext, SkCanvas* canvas, |
| 1019 SkPdfTokenLooper* parentLooper) { |
1014 EXPECT_OPERANDS("TD", pdfContext, 2) | 1020 EXPECT_OPERANDS("TD", pdfContext, 2) |
1015 POP_NUMBER(pdfContext, ty); | 1021 POP_NUMBER(pdfContext, ty); |
1016 POP_NUMBER(pdfContext, tx); | 1022 POP_NUMBER(pdfContext, tx); |
1017 CHECK_PARAMETERS(); | 1023 CHECK_PARAMETERS(); |
1018 | 1024 |
1019 // TODO(edisonn): Create factory methods or constructors so native is hidden | 1025 // TODO(edisonn): Create factory methods or constructors so native is hidden |
1020 SkPdfReal* _ty = pdfContext->fPdfDoc->createReal(-ty); | 1026 SkPdfReal* _ty = pdfContext->fPdfDoc->createReal(-ty); |
1021 pdfContext->fObjectStack.push(_ty); | 1027 pdfContext->fObjectStack.push(_ty); |
1022 | 1028 |
1023 PdfOp_TL(pdfContext, canvas, looper); | 1029 PdfOp_TL(pdfContext, canvas, parentLooper); |
1024 | 1030 |
1025 SkPdfReal* vtx = pdfContext->fPdfDoc->createReal(tx); | 1031 SkPdfReal* vtx = pdfContext->fPdfDoc->createReal(tx); |
1026 pdfContext->fObjectStack.push(vtx); | 1032 pdfContext->fObjectStack.push(vtx); |
1027 | 1033 |
1028 SkPdfReal* vty = pdfContext->fPdfDoc->createReal(ty); | 1034 SkPdfReal* vty = pdfContext->fPdfDoc->createReal(ty); |
1029 pdfContext->fObjectStack.push(vty); | 1035 pdfContext->fObjectStack.push(vty); |
1030 | 1036 |
1031 SkPdfResult ret = PdfOp_Td(pdfContext, canvas, looper); | 1037 SkPdfResult ret = PdfOp_Td(pdfContext, canvas, parentLooper); |
1032 | 1038 |
1033 return ret; | 1039 return ret; |
1034 } | 1040 } |
1035 | 1041 |
1036 static SkPdfResult PdfOp_Tm(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1042 static SkPdfResult PdfOp_Tm(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1037 EXPECT_OPERANDS("Tm", pdfContext, 6); | 1043 EXPECT_OPERANDS("Tm", pdfContext, 6); |
1038 POP_NUMBER(pdfContext, f); | 1044 POP_NUMBER(pdfContext, f); |
1039 POP_NUMBER(pdfContext, e); | 1045 POP_NUMBER(pdfContext, e); |
1040 POP_NUMBER(pdfContext, d); | 1046 POP_NUMBER(pdfContext, d); |
1041 POP_NUMBER(pdfContext, c); | 1047 POP_NUMBER(pdfContext, c); |
1042 POP_NUMBER(pdfContext, b); | 1048 POP_NUMBER(pdfContext, b); |
1043 POP_NUMBER(pdfContext, a); | 1049 POP_NUMBER(pdfContext, a); |
1044 CHECK_PARAMETERS(); | 1050 CHECK_PARAMETERS(); |
1045 | 1051 |
1046 double array[6]; | 1052 double array[6]; |
(...skipping 15 matching lines...) Expand all Loading... |
1062 pdfContext->fGraphicsState.fMatrixTm = matrix; | 1068 pdfContext->fGraphicsState.fMatrixTm = matrix; |
1063 pdfContext->fGraphicsState.fMatrixTlm = matrix;; | 1069 pdfContext->fGraphicsState.fMatrixTlm = matrix;; |
1064 | 1070 |
1065 return kPartial_SkPdfResult; | 1071 return kPartial_SkPdfResult; |
1066 } | 1072 } |
1067 | 1073 |
1068 //— T* Move to the start of the next line. This operator has the same effect as
the code | 1074 //— T* Move to the start of the next line. This operator has the same effect as
the code |
1069 //0 Tl Td | 1075 //0 Tl Td |
1070 //where Tl is the current leading parameter in the text state | 1076 //where Tl is the current leading parameter in the text state |
1071 static SkPdfResult PdfOp_T_star(SkPdfContext* pdfContext, SkCanvas* canvas, | 1077 static SkPdfResult PdfOp_T_star(SkPdfContext* pdfContext, SkCanvas* canvas, |
1072 SkPdfTokenLooper** looper) { | 1078 SkPdfTokenLooper* parentLooper) { |
1073 SkPdfReal* zero = pdfContext->fPdfDoc->createReal(0.0); | 1079 SkPdfReal* zero = pdfContext->fPdfDoc->createReal(0.0); |
1074 SkPdfReal* tl = pdfContext->fPdfDoc->createReal(pdfContext->fGraphicsState.f
TextLeading); | 1080 SkPdfReal* tl = pdfContext->fPdfDoc->createReal(pdfContext->fGraphicsState.f
TextLeading); |
1075 | 1081 |
1076 pdfContext->fObjectStack.push(zero); | 1082 pdfContext->fObjectStack.push(zero); |
1077 pdfContext->fObjectStack.push(tl); | 1083 pdfContext->fObjectStack.push(tl); |
1078 | 1084 |
1079 SkPdfResult ret = PdfOp_Td(pdfContext, canvas, looper); | 1085 SkPdfResult ret = PdfOp_Td(pdfContext, canvas, parentLooper); |
1080 | 1086 |
1081 return ret; | 1087 return ret; |
1082 } | 1088 } |
1083 | 1089 |
1084 static SkPdfResult PdfOp_m(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1090 static SkPdfResult PdfOp_m(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1085 if (pdfContext->fGraphicsState.fPathClosed) { | 1091 if (pdfContext->fGraphicsState.fPathClosed) { |
1086 pdfContext->fGraphicsState.fPath.reset(); | 1092 pdfContext->fGraphicsState.fPath.reset(); |
1087 pdfContext->fGraphicsState.fPathClosed = false; | 1093 pdfContext->fGraphicsState.fPathClosed = false; |
1088 } | 1094 } |
1089 | 1095 |
1090 EXPECT_OPERANDS("m", pdfContext, 2); | 1096 EXPECT_OPERANDS("m", pdfContext, 2); |
1091 POP_NUMBER(pdfContext, y); | 1097 POP_NUMBER(pdfContext, y); |
1092 POP_NUMBER(pdfContext, x); | 1098 POP_NUMBER(pdfContext, x); |
1093 CHECK_PARAMETERS(); | 1099 CHECK_PARAMETERS(); |
1094 | 1100 |
1095 pdfContext->fGraphicsState.fCurPosY = y; | 1101 pdfContext->fGraphicsState.fCurPosY = y; |
1096 pdfContext->fGraphicsState.fCurPosX = x; | 1102 pdfContext->fGraphicsState.fCurPosX = x; |
1097 | 1103 |
1098 pdfContext->fGraphicsState.fPath.moveTo(SkDoubleToScalar(pdfContext->fGraphi
csState.fCurPosX), | 1104 pdfContext->fGraphicsState.fPath.moveTo(SkDoubleToScalar(pdfContext->fGraphi
csState.fCurPosX), |
1099 SkDoubleToScalar(pdfContext->fGraphi
csState.fCurPosY)); | 1105 SkDoubleToScalar(pdfContext->fGraphi
csState.fCurPosY)); |
1100 | 1106 |
1101 return kOK_SkPdfResult; | 1107 return kOK_SkPdfResult; |
1102 } | 1108 } |
1103 | 1109 |
1104 static SkPdfResult PdfOp_l(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1110 static SkPdfResult PdfOp_l(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1105 if (pdfContext->fGraphicsState.fPathClosed) { | 1111 if (pdfContext->fGraphicsState.fPathClosed) { |
1106 pdfContext->fGraphicsState.fPath.reset(); | 1112 pdfContext->fGraphicsState.fPath.reset(); |
1107 pdfContext->fGraphicsState.fPathClosed = false; | 1113 pdfContext->fGraphicsState.fPathClosed = false; |
1108 } | 1114 } |
1109 | 1115 |
1110 EXPECT_OPERANDS("l", pdfContext, 2); | 1116 EXPECT_OPERANDS("l", pdfContext, 2); |
1111 POP_NUMBER(pdfContext, y); | 1117 POP_NUMBER(pdfContext, y); |
1112 POP_NUMBER(pdfContext, x); | 1118 POP_NUMBER(pdfContext, x); |
1113 CHECK_PARAMETERS(); | 1119 CHECK_PARAMETERS(); |
1114 | 1120 |
1115 pdfContext->fGraphicsState.fCurPosY = y; | 1121 pdfContext->fGraphicsState.fCurPosY = y; |
1116 pdfContext->fGraphicsState.fCurPosX = x; | 1122 pdfContext->fGraphicsState.fCurPosX = x; |
1117 | 1123 |
1118 pdfContext->fGraphicsState.fPath.lineTo(SkDoubleToScalar(pdfContext->fGraphi
csState.fCurPosX), | 1124 pdfContext->fGraphicsState.fPath.lineTo(SkDoubleToScalar(pdfContext->fGraphi
csState.fCurPosX), |
1119 SkDoubleToScalar(pdfContext->fGraphi
csState.fCurPosY)); | 1125 SkDoubleToScalar(pdfContext->fGraphi
csState.fCurPosY)); |
1120 | 1126 |
1121 return kOK_SkPdfResult; | 1127 return kOK_SkPdfResult; |
1122 } | 1128 } |
1123 | 1129 |
1124 static SkPdfResult PdfOp_c(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1130 static SkPdfResult PdfOp_c(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1125 if (pdfContext->fGraphicsState.fPathClosed) { | 1131 if (pdfContext->fGraphicsState.fPathClosed) { |
1126 pdfContext->fGraphicsState.fPath.reset(); | 1132 pdfContext->fGraphicsState.fPath.reset(); |
1127 pdfContext->fGraphicsState.fPathClosed = false; | 1133 pdfContext->fGraphicsState.fPathClosed = false; |
1128 } | 1134 } |
1129 | 1135 |
1130 EXPECT_OPERANDS("c", pdfContext, 6); | 1136 EXPECT_OPERANDS("c", pdfContext, 6); |
1131 POP_NUMBER(pdfContext, y3); | 1137 POP_NUMBER(pdfContext, y3); |
1132 POP_NUMBER(pdfContext, x3); | 1138 POP_NUMBER(pdfContext, x3); |
1133 POP_NUMBER(pdfContext, y2); | 1139 POP_NUMBER(pdfContext, y2); |
1134 POP_NUMBER(pdfContext, x2); | 1140 POP_NUMBER(pdfContext, x2); |
1135 POP_NUMBER(pdfContext, y1); | 1141 POP_NUMBER(pdfContext, y1); |
1136 POP_NUMBER(pdfContext, x1); | 1142 POP_NUMBER(pdfContext, x1); |
1137 CHECK_PARAMETERS(); | 1143 CHECK_PARAMETERS(); |
1138 | 1144 |
1139 pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToSca
lar(y1), | 1145 pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToSca
lar(y1), |
1140 SkDoubleToScalar(x2), SkDoubleToSca
lar(y2), | 1146 SkDoubleToScalar(x2), SkDoubleToSca
lar(y2), |
1141 SkDoubleToScalar(x3), SkDoubleToSca
lar(y3)); | 1147 SkDoubleToScalar(x3), SkDoubleToSca
lar(y3)); |
1142 | 1148 |
1143 pdfContext->fGraphicsState.fCurPosX = x3; | 1149 pdfContext->fGraphicsState.fCurPosX = x3; |
1144 pdfContext->fGraphicsState.fCurPosY = y3; | 1150 pdfContext->fGraphicsState.fCurPosY = y3; |
1145 | 1151 |
1146 return kOK_SkPdfResult; | 1152 return kOK_SkPdfResult; |
1147 } | 1153 } |
1148 | 1154 |
1149 static SkPdfResult PdfOp_v(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1155 static SkPdfResult PdfOp_v(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1150 if (pdfContext->fGraphicsState.fPathClosed) { | 1156 if (pdfContext->fGraphicsState.fPathClosed) { |
1151 pdfContext->fGraphicsState.fPath.reset(); | 1157 pdfContext->fGraphicsState.fPath.reset(); |
1152 pdfContext->fGraphicsState.fPathClosed = false; | 1158 pdfContext->fGraphicsState.fPathClosed = false; |
1153 } | 1159 } |
1154 | 1160 |
1155 EXPECT_OPERANDS("v", pdfContext, 4); | 1161 EXPECT_OPERANDS("v", pdfContext, 4); |
1156 POP_NUMBER(pdfContext, y3); | 1162 POP_NUMBER(pdfContext, y3); |
1157 POP_NUMBER(pdfContext, x3); | 1163 POP_NUMBER(pdfContext, x3); |
1158 POP_NUMBER(pdfContext, y2); | 1164 POP_NUMBER(pdfContext, y2); |
1159 POP_NUMBER(pdfContext, x2); | 1165 POP_NUMBER(pdfContext, x2); |
1160 CHECK_PARAMETERS(); | 1166 CHECK_PARAMETERS(); |
1161 | 1167 |
1162 double y1 = pdfContext->fGraphicsState.fCurPosY; | 1168 double y1 = pdfContext->fGraphicsState.fCurPosY; |
1163 double x1 = pdfContext->fGraphicsState.fCurPosX; | 1169 double x1 = pdfContext->fGraphicsState.fCurPosX; |
1164 | 1170 |
1165 pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToSca
lar(y1), | 1171 pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToSca
lar(y1), |
1166 SkDoubleToScalar(x2), SkDoubleToSca
lar(y2), | 1172 SkDoubleToScalar(x2), SkDoubleToSca
lar(y2), |
1167 SkDoubleToScalar(x3), SkDoubleToSca
lar(y3)); | 1173 SkDoubleToScalar(x3), SkDoubleToSca
lar(y3)); |
1168 | 1174 |
1169 pdfContext->fGraphicsState.fCurPosX = x3; | 1175 pdfContext->fGraphicsState.fCurPosX = x3; |
1170 pdfContext->fGraphicsState.fCurPosY = y3; | 1176 pdfContext->fGraphicsState.fCurPosY = y3; |
1171 | 1177 |
1172 return kOK_SkPdfResult; | 1178 return kOK_SkPdfResult; |
1173 } | 1179 } |
1174 | 1180 |
1175 static SkPdfResult PdfOp_y(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1181 static SkPdfResult PdfOp_y(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1176 if (pdfContext->fGraphicsState.fPathClosed) { | 1182 if (pdfContext->fGraphicsState.fPathClosed) { |
1177 pdfContext->fGraphicsState.fPath.reset(); | 1183 pdfContext->fGraphicsState.fPath.reset(); |
1178 pdfContext->fGraphicsState.fPathClosed = false; | 1184 pdfContext->fGraphicsState.fPathClosed = false; |
1179 } | 1185 } |
1180 | 1186 |
1181 EXPECT_OPERANDS("y", pdfContext, 4); | 1187 EXPECT_OPERANDS("y", pdfContext, 4); |
1182 POP_NUMBER(pdfContext, y3); | 1188 POP_NUMBER(pdfContext, y3); |
1183 POP_NUMBER(pdfContext, x3); | 1189 POP_NUMBER(pdfContext, x3); |
1184 POP_NUMBER(pdfContext, y1); | 1190 POP_NUMBER(pdfContext, y1); |
1185 POP_NUMBER(pdfContext, x1); | 1191 POP_NUMBER(pdfContext, x1); |
1186 CHECK_PARAMETERS(); | 1192 CHECK_PARAMETERS(); |
1187 | 1193 |
1188 double y2 = pdfContext->fGraphicsState.fCurPosY; | 1194 double y2 = pdfContext->fGraphicsState.fCurPosY; |
1189 double x2 = pdfContext->fGraphicsState.fCurPosX; | 1195 double x2 = pdfContext->fGraphicsState.fCurPosX; |
1190 | 1196 |
1191 pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToSca
lar(y1), | 1197 pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToSca
lar(y1), |
1192 SkDoubleToScalar(x2), SkDoubleToSca
lar(y2), | 1198 SkDoubleToScalar(x2), SkDoubleToSca
lar(y2), |
1193 SkDoubleToScalar(x3), SkDoubleToSca
lar(y3)); | 1199 SkDoubleToScalar(x3), SkDoubleToSca
lar(y3)); |
1194 | 1200 |
1195 pdfContext->fGraphicsState.fCurPosX = x3; | 1201 pdfContext->fGraphicsState.fCurPosX = x3; |
1196 pdfContext->fGraphicsState.fCurPosY = y3; | 1202 pdfContext->fGraphicsState.fCurPosY = y3; |
1197 | 1203 |
1198 return kOK_SkPdfResult; | 1204 return kOK_SkPdfResult; |
1199 } | 1205 } |
1200 | 1206 |
1201 static SkPdfResult PdfOp_re(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1207 static SkPdfResult PdfOp_re(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1202 if (pdfContext->fGraphicsState.fPathClosed) { | 1208 if (pdfContext->fGraphicsState.fPathClosed) { |
1203 pdfContext->fGraphicsState.fPath.reset(); | 1209 pdfContext->fGraphicsState.fPath.reset(); |
1204 pdfContext->fGraphicsState.fPathClosed = false; | 1210 pdfContext->fGraphicsState.fPathClosed = false; |
1205 } | 1211 } |
1206 | 1212 |
1207 EXPECT_OPERANDS("re", pdfContext, 4); | 1213 EXPECT_OPERANDS("re", pdfContext, 4); |
1208 POP_NUMBER(pdfContext, height); | 1214 POP_NUMBER(pdfContext, height); |
1209 POP_NUMBER(pdfContext, width); | 1215 POP_NUMBER(pdfContext, width); |
1210 POP_NUMBER(pdfContext, y); | 1216 POP_NUMBER(pdfContext, y); |
1211 POP_NUMBER(pdfContext, x); | 1217 POP_NUMBER(pdfContext, x); |
1212 CHECK_PARAMETERS(); | 1218 CHECK_PARAMETERS(); |
1213 | 1219 |
1214 pdfContext->fGraphicsState.fPath.addRect(SkDoubleToScalar(x), | 1220 pdfContext->fGraphicsState.fPath.addRect(SkDoubleToScalar(x), |
1215 SkDoubleToScalar(y), | 1221 SkDoubleToScalar(y), |
1216 SkDoubleToScalar(x + width), | 1222 SkDoubleToScalar(x + width), |
1217 SkDoubleToScalar(y + height)); | 1223 SkDoubleToScalar(y + height)); |
1218 | 1224 |
1219 pdfContext->fGraphicsState.fCurPosX = x; | 1225 pdfContext->fGraphicsState.fCurPosX = x; |
1220 pdfContext->fGraphicsState.fCurPosY = y + height; | 1226 pdfContext->fGraphicsState.fCurPosY = y + height; |
1221 | 1227 |
1222 return kOK_SkPdfResult; | 1228 return kOK_SkPdfResult; |
1223 } | 1229 } |
1224 | 1230 |
1225 static SkPdfResult PdfOp_h(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1231 static SkPdfResult PdfOp_h(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1226 pdfContext->fGraphicsState.fPath.close(); | 1232 pdfContext->fGraphicsState.fPath.close(); |
1227 return kOK_SkPdfResult; | 1233 return kOK_SkPdfResult; |
1228 } | 1234 } |
1229 | 1235 |
1230 static SkPdfResult PdfOp_fillAndStroke(SkPdfContext* pdfContext, SkCanvas* canva
s, | 1236 static SkPdfResult PdfOp_fillAndStroke(SkPdfContext* pdfContext, SkCanvas* canva
s, |
1231 bool fill, bool stroke, bool close, bool
evenOdd) { | 1237 bool fill, bool stroke, bool close, bool
evenOdd) { |
1232 SkPath path = pdfContext->fGraphicsState.fPath; | 1238 SkPath path = pdfContext->fGraphicsState.fPath; |
1233 | 1239 |
1234 if (close) { | 1240 if (close) { |
1235 path.close(); | 1241 path.close(); |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1365 #endif | 1371 #endif |
1366 } | 1372 } |
1367 | 1373 |
1368 //pdfContext->fGraphicsState.fClipPath.reset(); | 1374 //pdfContext->fGraphicsState.fClipPath.reset(); |
1369 pdfContext->fGraphicsState.fHasClipPathToApply = false; | 1375 pdfContext->fGraphicsState.fHasClipPathToApply = false; |
1370 | 1376 |
1371 return kOK_SkPdfResult; | 1377 return kOK_SkPdfResult; |
1372 | 1378 |
1373 } | 1379 } |
1374 | 1380 |
1375 static SkPdfResult PdfOp_S(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1381 static SkPdfResult PdfOp_S(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1376 return PdfOp_fillAndStroke(pdfContext, canvas, false, true, false, false); | 1382 return PdfOp_fillAndStroke(pdfContext, canvas, false, true, false, false); |
1377 } | 1383 } |
1378 | 1384 |
1379 static SkPdfResult PdfOp_s(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1385 static SkPdfResult PdfOp_s(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1380 return PdfOp_fillAndStroke(pdfContext, canvas, false, true, true, false); | 1386 return PdfOp_fillAndStroke(pdfContext, canvas, false, true, true, false); |
1381 } | 1387 } |
1382 | 1388 |
1383 static SkPdfResult PdfOp_F(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1389 static SkPdfResult PdfOp_F(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1384 return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, false); | 1390 return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, false); |
1385 } | 1391 } |
1386 | 1392 |
1387 static SkPdfResult PdfOp_f(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1393 static SkPdfResult PdfOp_f(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1388 return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, false); | 1394 return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, false); |
1389 } | 1395 } |
1390 | 1396 |
1391 static SkPdfResult PdfOp_f_star(SkPdfContext* pdfContext, SkCanvas* canvas, | 1397 static SkPdfResult PdfOp_f_star(SkPdfContext* pdfContext, SkCanvas* canvas, |
1392 SkPdfTokenLooper** looper) { | 1398 SkPdfTokenLooper*) { |
1393 return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, true); | 1399 return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, true); |
1394 } | 1400 } |
1395 | 1401 |
1396 static SkPdfResult PdfOp_B(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1402 static SkPdfResult PdfOp_B(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1397 return PdfOp_fillAndStroke(pdfContext, canvas, true, true, false, false); | 1403 return PdfOp_fillAndStroke(pdfContext, canvas, true, true, false, false); |
1398 } | 1404 } |
1399 | 1405 |
1400 static SkPdfResult PdfOp_B_star(SkPdfContext* pdfContext, SkCanvas* canvas, | 1406 static SkPdfResult PdfOp_B_star(SkPdfContext* pdfContext, SkCanvas* canvas, |
1401 SkPdfTokenLooper** looper) { | 1407 SkPdfTokenLooper*) { |
1402 return PdfOp_fillAndStroke(pdfContext, canvas, true, true, false, true); | 1408 return PdfOp_fillAndStroke(pdfContext, canvas, true, true, false, true); |
1403 } | 1409 } |
1404 | 1410 |
1405 static SkPdfResult PdfOp_b(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1411 static SkPdfResult PdfOp_b(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1406 return PdfOp_fillAndStroke(pdfContext, canvas, true, true, true, false); | 1412 return PdfOp_fillAndStroke(pdfContext, canvas, true, true, true, false); |
1407 } | 1413 } |
1408 | 1414 |
1409 static SkPdfResult PdfOp_b_star(SkPdfContext* pdfContext, SkCanvas* canvas, | 1415 static SkPdfResult PdfOp_b_star(SkPdfContext* pdfContext, SkCanvas* canvas, |
1410 SkPdfTokenLooper** looper) { | 1416 SkPdfTokenLooper*) { |
1411 return PdfOp_fillAndStroke(pdfContext, canvas, true, true, true, true); | 1417 return PdfOp_fillAndStroke(pdfContext, canvas, true, true, true, true); |
1412 } | 1418 } |
1413 | 1419 |
1414 static SkPdfResult PdfOp_n(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1420 static SkPdfResult PdfOp_n(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1415 canvas->setMatrix(pdfContext->fGraphicsState.fCTM); | 1421 canvas->setMatrix(pdfContext->fGraphicsState.fCTM); |
1416 if (pdfContext->fGraphicsState.fHasClipPathToApply) { | 1422 if (pdfContext->fGraphicsState.fHasClipPathToApply) { |
1417 #ifndef PDF_DEBUG_NO_CLIPING | 1423 #ifndef PDF_DEBUG_NO_CLIPING |
1418 canvas->clipPath(pdfContext->fGraphicsState.fClipPath, SkRegion::kInters
ect_Op, true); | 1424 canvas->clipPath(pdfContext->fGraphicsState.fClipPath, SkRegion::kInters
ect_Op, true); |
1419 #endif | 1425 #endif |
1420 } | 1426 } |
1421 | 1427 |
1422 pdfContext->fGraphicsState.fHasClipPathToApply = false; | 1428 pdfContext->fGraphicsState.fHasClipPathToApply = false; |
1423 | 1429 |
1424 pdfContext->fGraphicsState.fPathClosed = true; | 1430 pdfContext->fGraphicsState.fPathClosed = true; |
1425 | 1431 |
1426 return kOK_SkPdfResult; | 1432 return kOK_SkPdfResult; |
1427 } | 1433 } |
1428 | 1434 |
1429 static SkPdfResult PdfOp_BT(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1435 static SkPdfResult PdfOp_BT(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1430 pdfContext->fGraphicsState.fTextBlock = true; | 1436 pdfContext->fGraphicsState.fTextBlock = true; |
1431 SkMatrix matrix = pdfContext->fGraphicsState.fCTM; | 1437 SkMatrix matrix = pdfContext->fGraphicsState.fCTM; |
1432 matrix.preScale(SkDoubleToScalar(1), SkDoubleToScalar(-1)); | 1438 matrix.preScale(SkDoubleToScalar(1), SkDoubleToScalar(-1)); |
1433 pdfContext->fGraphicsState.fMatrixTm = matrix; | 1439 pdfContext->fGraphicsState.fMatrixTm = matrix; |
1434 pdfContext->fGraphicsState.fMatrixTlm = matrix; | 1440 pdfContext->fGraphicsState.fMatrixTlm = matrix; |
1435 | 1441 |
1436 return kPartial_SkPdfResult; | 1442 return kPartial_SkPdfResult; |
1437 } | 1443 } |
1438 | 1444 |
1439 static SkPdfResult PdfOp_ET(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1445 static SkPdfResult PdfOp_ET(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1440 if (!pdfContext->fGraphicsState.fTextBlock) { | 1446 if (!pdfContext->fGraphicsState.fTextBlock) { |
1441 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kMissingBT_SkPdfIssue, "ET
without BT", NULL, | 1447 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kMissingBT_SkPdfIssue, "ET
without BT", NULL, |
1442 pdfContext); | 1448 pdfContext); |
1443 | 1449 |
1444 return kIgnoreError_SkPdfResult; | 1450 return kIgnoreError_SkPdfResult; |
1445 } | 1451 } |
1446 | 1452 |
1447 pdfContext->fGraphicsState.fTextBlock = false; | 1453 pdfContext->fGraphicsState.fTextBlock = false; |
1448 | 1454 |
1449 // TODO(edisonn): anything else to be done once we are done with draw text?
Like restore stack? | 1455 // TODO(edisonn): anything else to be done once we are done with draw text?
Like restore stack? |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1482 } | 1488 } |
1483 pdfContext->fGraphicsState.fCurFontSize = fontSize; | 1489 pdfContext->fGraphicsState.fCurFontSize = fontSize; |
1484 return kOK_SkPdfResult; | 1490 return kOK_SkPdfResult; |
1485 } | 1491 } |
1486 | 1492 |
1487 //font size Tf Set the text font, Tf | 1493 //font size Tf Set the text font, Tf |
1488 //, to font and the text font size, Tfs, to size. font is the name of a | 1494 //, to font and the text font size, Tfs, to size. font is the name of a |
1489 //font resource in the Fontsubdictionary of the current resource dictionary; siz
e is | 1495 //font resource in the Fontsubdictionary of the current resource dictionary; siz
e is |
1490 //a number representing a scale factor. There is no initial value for either fon
t or | 1496 //a number representing a scale factor. There is no initial value for either fon
t or |
1491 //size; they must be specified explicitly using Tf before any text is shown. | 1497 //size; they must be specified explicitly using Tf before any text is shown. |
1492 static SkPdfResult PdfOp_Tf(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1498 static SkPdfResult PdfOp_Tf(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1493 EXPECT_OPERANDS("Tf", pdfContext, 2); | 1499 EXPECT_OPERANDS("Tf", pdfContext, 2); |
1494 POP_NUMBER(pdfContext, fontSize); | 1500 POP_NUMBER(pdfContext, fontSize); |
1495 POP_NAME(pdfContext, fontName); | 1501 POP_NAME(pdfContext, fontName); |
1496 CHECK_PARAMETERS(); | 1502 CHECK_PARAMETERS(); |
1497 | 1503 |
1498 return skpdfGraphicsStateApplyFontCore(pdfContext, fontName, fontSize); | 1504 return skpdfGraphicsStateApplyFontCore(pdfContext, fontName, fontSize); |
1499 } | 1505 } |
1500 | 1506 |
1501 static SkPdfResult PdfOp_Tj(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1507 static SkPdfResult PdfOp_Tj(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1502 EXPECT_OPERANDS("Tj", pdfContext, 1); | 1508 EXPECT_OPERANDS("Tj", pdfContext, 1); |
1503 POP_STRING(pdfContext, str); | 1509 POP_STRING(pdfContext, str); |
1504 CHECK_PARAMETERS(); | 1510 CHECK_PARAMETERS(); |
1505 | 1511 |
1506 if (!pdfContext->fGraphicsState.fTextBlock) { | 1512 if (!pdfContext->fGraphicsState.fTextBlock) { |
1507 // TODO(edisonn): try to recover and draw it any way? | 1513 // TODO(edisonn): try to recover and draw it any way? |
1508 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kMissingBT_SkPdfIssue, "Tj
without BT", NULL, | 1514 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kMissingBT_SkPdfIssue, "Tj
without BT", NULL, |
1509 pdfContext); | 1515 pdfContext); |
1510 return kIgnoreError_SkPdfResult; | 1516 return kIgnoreError_SkPdfResult; |
1511 } | 1517 } |
1512 | 1518 |
1513 SkPdfResult ret = DrawText(pdfContext, str, canvas); | 1519 SkPdfResult ret = DrawText(pdfContext, str, canvas); |
1514 | 1520 |
1515 return ret; | 1521 return ret; |
1516 } | 1522 } |
1517 | 1523 |
1518 static SkPdfResult PdfOp_quote(SkPdfContext* pdfContext, SkCanvas* canvas, | 1524 static SkPdfResult PdfOp_quote(SkPdfContext* pdfContext, SkCanvas* canvas, |
1519 SkPdfTokenLooper** looper) { | 1525 SkPdfTokenLooper* parentLooper) { |
1520 if (!pdfContext->fGraphicsState.fTextBlock) { | 1526 if (!pdfContext->fGraphicsState.fTextBlock) { |
1521 // TODO(edisonn): try to recover and draw it any way? | 1527 // TODO(edisonn): try to recover and draw it any way? |
1522 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kMissingBT_SkPdfIssue, | 1528 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kMissingBT_SkPdfIssue, |
1523 "' without BT", NULL, pdfContext); | 1529 "' without BT", NULL, pdfContext); |
1524 return kIgnoreError_SkPdfResult; | 1530 return kIgnoreError_SkPdfResult; |
1525 } | 1531 } |
1526 | 1532 |
1527 PdfOp_T_star(pdfContext, canvas, looper); | 1533 PdfOp_T_star(pdfContext, canvas, parentLooper); |
1528 // Do not pop, and push, just transfer the param to Tj | 1534 // Do not pop, and push, just transfer the param to Tj |
1529 return PdfOp_Tj(pdfContext, canvas, looper); | 1535 return PdfOp_Tj(pdfContext, canvas, parentLooper); |
1530 } | 1536 } |
1531 | 1537 |
1532 static SkPdfResult PdfOp_doublequote(SkPdfContext* pdfContext, SkCanvas* canvas, | 1538 static SkPdfResult PdfOp_doublequote(SkPdfContext* pdfContext, SkCanvas* canvas, |
1533 SkPdfTokenLooper** looper) { | 1539 SkPdfTokenLooper* parentLooper) { |
1534 if (!pdfContext->fGraphicsState.fTextBlock) { | 1540 if (!pdfContext->fGraphicsState.fTextBlock) { |
1535 // TODO(edisonn): try to recover and draw it any way? | 1541 // TODO(edisonn): try to recover and draw it any way? |
1536 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kMissingBT_SkPdfIssue, | 1542 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kMissingBT_SkPdfIssue, |
1537 "\" without BT", NULL, pdfContext); | 1543 "\" without BT", NULL, pdfContext); |
1538 return kIgnoreError_SkPdfResult; | 1544 return kIgnoreError_SkPdfResult; |
1539 } | 1545 } |
1540 | 1546 |
1541 EXPECT_OPERANDS("\"", pdfContext, 3); | 1547 EXPECT_OPERANDS("\"", pdfContext, 3); |
1542 POP_OBJ(pdfContext, str); | 1548 POP_OBJ(pdfContext, str); |
1543 POP_OBJ(pdfContext, ac); | 1549 POP_OBJ(pdfContext, ac); |
1544 POP_OBJ(pdfContext, aw); | 1550 POP_OBJ(pdfContext, aw); |
1545 CHECK_PARAMETERS(); | 1551 CHECK_PARAMETERS(); |
1546 | 1552 |
1547 pdfContext->fObjectStack.push(aw); | 1553 pdfContext->fObjectStack.push(aw); |
1548 PdfOp_Tw(pdfContext, canvas, looper); | 1554 PdfOp_Tw(pdfContext, canvas, parentLooper); |
1549 | 1555 |
1550 pdfContext->fObjectStack.push(ac); | 1556 pdfContext->fObjectStack.push(ac); |
1551 PdfOp_Tc(pdfContext, canvas, looper); | 1557 PdfOp_Tc(pdfContext, canvas, parentLooper); |
1552 | 1558 |
1553 pdfContext->fObjectStack.push(str); | 1559 pdfContext->fObjectStack.push(str); |
1554 PdfOp_quote(pdfContext, canvas, looper); | 1560 PdfOp_quote(pdfContext, canvas, parentLooper); |
1555 | 1561 |
1556 return kPartial_SkPdfResult; | 1562 return kPartial_SkPdfResult; |
1557 } | 1563 } |
1558 | 1564 |
1559 static SkPdfResult PdfOp_TJ(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1565 static SkPdfResult PdfOp_TJ(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1560 EXPECT_OPERANDS("Tf", pdfContext, 1); | 1566 EXPECT_OPERANDS("Tf", pdfContext, 1); |
1561 POP_ARRAY(pdfContext, array); | 1567 POP_ARRAY(pdfContext, array); |
1562 CHECK_PARAMETERS(); | 1568 CHECK_PARAMETERS(); |
1563 | 1569 |
1564 if (!pdfContext->fGraphicsState.fTextBlock) { | 1570 if (!pdfContext->fGraphicsState.fTextBlock) { |
1565 // TODO(edisonn): try to recover and draw it any way? | 1571 // TODO(edisonn): try to recover and draw it any way? |
1566 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kMissingBT_SkPdfIssue, "TJ
without BT", NULL, | 1572 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kMissingBT_SkPdfIssue, "TJ
without BT", NULL, |
1567 pdfContext); | 1573 pdfContext); |
1568 return kIgnoreError_SkPdfResult; | 1574 return kIgnoreError_SkPdfResult; |
1569 } | 1575 } |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1663 return kPartial_SkPdfResult; | 1669 return kPartial_SkPdfResult; |
1664 } | 1670 } |
1665 return kNYI_SkPdfResult; | 1671 return kNYI_SkPdfResult; |
1666 } | 1672 } |
1667 } | 1673 } |
1668 } | 1674 } |
1669 | 1675 |
1670 return kPartial_SkPdfResult; | 1676 return kPartial_SkPdfResult; |
1671 } | 1677 } |
1672 | 1678 |
1673 static SkPdfResult PdfOp_CS(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1679 static SkPdfResult PdfOp_CS(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1674 return PdfOp_CS_cs(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking
); | 1680 return PdfOp_CS_cs(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking
); |
1675 } | 1681 } |
1676 | 1682 |
1677 static SkPdfResult PdfOp_cs(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1683 static SkPdfResult PdfOp_cs(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1678 return PdfOp_CS_cs(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStrok
ing); | 1684 return PdfOp_CS_cs(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStrok
ing); |
1679 } | 1685 } |
1680 | 1686 |
1681 static SkPdfResult PdfOp_SC_sc(SkPdfContext* pdfContext, SkCanvas* canvas, | 1687 static SkPdfResult PdfOp_SC_sc(SkPdfContext* pdfContext, SkCanvas* canvas, |
1682 SkPdfColorOperator* colorOperator) { | 1688 SkPdfColorOperator* colorOperator) { |
1683 double c[4]; | 1689 double c[4]; |
1684 // int64_t v[4]; | 1690 // int64_t v[4]; |
1685 | 1691 |
1686 int n = GetColorSpaceComponents(colorOperator->fColorSpace); | 1692 int n = GetColorSpaceComponents(colorOperator->fColorSpace); |
1687 | 1693 |
(...skipping 22 matching lines...) Expand all Loading... |
1710 // TODO(edisonn): support also abbreviations /DeviceRGB == /RGB | 1716 // TODO(edisonn): support also abbreviations /DeviceRGB == /RGB |
1711 if (colorOperator->fColorSpace.equals("DeviceRGB") || | 1717 if (colorOperator->fColorSpace.equals("DeviceRGB") || |
1712 colorOperator->fColorSpace.equals("RGB")) { | 1718 colorOperator->fColorSpace.equals("RGB")) { |
1713 colorOperator->setRGBColor(SkColorSetRGB((U8CPU)(255*c[0]), | 1719 colorOperator->setRGBColor(SkColorSetRGB((U8CPU)(255*c[0]), |
1714 (U8CPU)(255*c[1]), | 1720 (U8CPU)(255*c[1]), |
1715 (U8CPU)(255*c[2]))); | 1721 (U8CPU)(255*c[2]))); |
1716 } | 1722 } |
1717 return kPartial_SkPdfResult; | 1723 return kPartial_SkPdfResult; |
1718 } | 1724 } |
1719 | 1725 |
1720 static SkPdfResult PdfOp_SC(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1726 static SkPdfResult PdfOp_SC(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1721 return PdfOp_SC_sc(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking
); | 1727 return PdfOp_SC_sc(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking
); |
1722 } | 1728 } |
1723 | 1729 |
1724 static SkPdfResult PdfOp_sc(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1730 static SkPdfResult PdfOp_sc(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1725 return PdfOp_SC_sc(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStrok
ing); | 1731 return PdfOp_SC_sc(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStrok
ing); |
1726 } | 1732 } |
1727 | 1733 |
1728 static SkPdfResult PdfOp_SCN_scn(SkPdfContext* pdfContext, SkCanvas* canvas, | 1734 static SkPdfResult PdfOp_SCN_scn(SkPdfContext* pdfContext, SkCanvas* canvas, |
1729 SkPdfColorOperator* colorOperator) { | 1735 SkPdfColorOperator* colorOperator) { |
1730 if (pdfContext->fObjectStack.count() > 0 && pdfContext->fObjectStack.top()->
isName()) { | 1736 if (pdfContext->fObjectStack.count() > 0 && pdfContext->fObjectStack.top()->
isName()) { |
1731 SkPdfNativeObject* name = pdfContext->fObjectStack.top(); pdfContext-
>fObjectStack.pop(); | 1737 SkPdfNativeObject* name = pdfContext->fObjectStack.top(); pdfContext-
>fObjectStack.pop(); |
1732 | 1738 |
1733 SkPdfDictionary* patternResources | 1739 SkPdfDictionary* patternResources |
1734 = pdfContext->fGraphicsState.fResources->Pattern(pdfContext->fPd
fDoc); | 1740 = pdfContext->fGraphicsState.fResources->Pattern(pdfContext->fPd
fDoc); |
1735 | 1741 |
1736 if (patternResources == NULL) { | 1742 if (patternResources == NULL) { |
1737 #ifdef PDF_TRACE | 1743 #ifdef PDF_TRACE |
1738 printf("ExtGState is NULL!\n"); | 1744 printf("ExtGState is NULL!\n"); |
1739 #endif | 1745 #endif |
1740 return kIgnoreError_SkPdfResult; | 1746 return kIgnoreError_SkPdfResult; |
1741 } | 1747 } |
1742 | 1748 |
1743 colorOperator->setPatternColorSpace( | 1749 colorOperator->setPatternColorSpace( |
1744 pdfContext->fPdfDoc->resolveReference(patternResources->get(name
))); | 1750 pdfContext->fPdfDoc->resolveReference(patternResources->get(name
))); |
1745 } | 1751 } |
1746 | 1752 |
1747 // TODO(edisonn): SCN supports more color spaces than SCN. Read and implemen
t spec. | 1753 // TODO(edisonn): SCN supports more color spaces than SCN. Read and implemen
t spec. |
1748 PdfOp_SC_sc(pdfContext, canvas, colorOperator); | 1754 PdfOp_SC_sc(pdfContext, canvas, colorOperator); |
1749 | 1755 |
1750 return kPartial_SkPdfResult; | 1756 return kPartial_SkPdfResult; |
1751 } | 1757 } |
1752 | 1758 |
1753 static SkPdfResult PdfOp_SCN(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTo
kenLooper** looper) { | 1759 static SkPdfResult PdfOp_SCN(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTo
kenLooper*) { |
1754 return PdfOp_SCN_scn(pdfContext, canvas, &pdfContext->fGraphicsState.fStroki
ng); | 1760 return PdfOp_SCN_scn(pdfContext, canvas, &pdfContext->fGraphicsState.fStroki
ng); |
1755 } | 1761 } |
1756 | 1762 |
1757 static SkPdfResult PdfOp_scn(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTo
kenLooper** looper) { | 1763 static SkPdfResult PdfOp_scn(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTo
kenLooper*) { |
1758 return PdfOp_SCN_scn(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStr
oking); | 1764 return PdfOp_SCN_scn(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStr
oking); |
1759 } | 1765 } |
1760 | 1766 |
1761 static SkPdfResult PdfOp_G_g(SkPdfContext* pdfContext, SkCanvas* canvas, | 1767 static SkPdfResult PdfOp_G_g(SkPdfContext* pdfContext, SkCanvas* canvas, |
1762 SkPdfColorOperator* colorOperator) { | 1768 SkPdfColorOperator* colorOperator) { |
1763 EXPECT_OPERANDS("G/g", pdfContext, 1); | 1769 EXPECT_OPERANDS("G/g", pdfContext, 1); |
1764 POP_NUMBER(pdfContext, gray); | 1770 POP_NUMBER(pdfContext, gray); |
1765 CHECK_PARAMETERS(); | 1771 CHECK_PARAMETERS(); |
1766 | 1772 |
1767 // TODO(edisonn): limit gray in [0, 1] | 1773 // TODO(edisonn): limit gray in [0, 1] |
1768 | 1774 |
1769 // TODO(edisonn): HACK - it should be device gray, but not suported right no
w | 1775 // TODO(edisonn): HACK - it should be device gray, but not suported right no
w |
1770 colorOperator->fColorSpace = strings_DeviceRGB; | 1776 colorOperator->fColorSpace = strings_DeviceRGB; |
1771 colorOperator->setRGBColor(SkColorSetRGB((U8CPU)(255 * gray), | 1777 colorOperator->setRGBColor(SkColorSetRGB((U8CPU)(255 * gray), |
1772 (U8CPU)(255 * gray), | 1778 (U8CPU)(255 * gray), |
1773 (U8CPU)(255 * gray))); | 1779 (U8CPU)(255 * gray))); |
1774 | 1780 |
1775 return kPartial_SkPdfResult; | 1781 return kPartial_SkPdfResult; |
1776 } | 1782 } |
1777 | 1783 |
1778 static SkPdfResult PdfOp_G(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1784 static SkPdfResult PdfOp_G(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1779 return PdfOp_G_g(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking); | 1785 return PdfOp_G_g(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking); |
1780 } | 1786 } |
1781 | 1787 |
1782 static SkPdfResult PdfOp_g(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1788 static SkPdfResult PdfOp_g(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1783 return PdfOp_G_g(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStrokin
g); | 1789 return PdfOp_G_g(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStrokin
g); |
1784 } | 1790 } |
1785 | 1791 |
1786 static SkPdfResult PdfOp_RG_rg(SkPdfContext* pdfContext, SkCanvas* canvas, | 1792 static SkPdfResult PdfOp_RG_rg(SkPdfContext* pdfContext, SkCanvas* canvas, |
1787 SkPdfColorOperator* colorOperator) { | 1793 SkPdfColorOperator* colorOperator) { |
1788 EXPECT_OPERANDS("RG/rg", pdfContext, 3); | 1794 EXPECT_OPERANDS("RG/rg", pdfContext, 3); |
1789 POP_NUMBER(pdfContext, b); | 1795 POP_NUMBER(pdfContext, b); |
1790 POP_NUMBER(pdfContext, g); | 1796 POP_NUMBER(pdfContext, g); |
1791 POP_NUMBER(pdfContext, r); | 1797 POP_NUMBER(pdfContext, r); |
1792 CHECK_PARAMETERS(); | 1798 CHECK_PARAMETERS(); |
1793 | 1799 |
1794 colorOperator->fColorSpace = strings_DeviceRGB; | 1800 colorOperator->fColorSpace = strings_DeviceRGB; |
1795 colorOperator->setRGBColor(SkColorSetRGB((U8CPU)(255*r), (U8CPU)(255*g), (U8
CPU)(255*b))); | 1801 colorOperator->setRGBColor(SkColorSetRGB((U8CPU)(255*r), (U8CPU)(255*g), (U8
CPU)(255*b))); |
1796 return kOK_SkPdfResult; | 1802 return kOK_SkPdfResult; |
1797 } | 1803 } |
1798 | 1804 |
1799 static SkPdfResult PdfOp_RG(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1805 static SkPdfResult PdfOp_RG(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1800 return PdfOp_RG_rg(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking
); | 1806 return PdfOp_RG_rg(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking
); |
1801 } | 1807 } |
1802 | 1808 |
1803 static SkPdfResult PdfOp_rg(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1809 static SkPdfResult PdfOp_rg(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1804 return PdfOp_RG_rg(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStrok
ing); | 1810 return PdfOp_RG_rg(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStrok
ing); |
1805 } | 1811 } |
1806 | 1812 |
1807 static SkPdfResult PdfOp_K_k(SkPdfContext* pdfContext, SkCanvas* canvas, | 1813 static SkPdfResult PdfOp_K_k(SkPdfContext* pdfContext, SkCanvas* canvas, |
1808 SkPdfColorOperator* colorOperator) { | 1814 SkPdfColorOperator* colorOperator) { |
1809 // TODO(edisonn): spec has some rules about overprint, implement them. | 1815 // TODO(edisonn): spec has some rules about overprint, implement them. |
1810 EXPECT_OPERANDS("K/k", pdfContext, 4); | 1816 EXPECT_OPERANDS("K/k", pdfContext, 4); |
1811 POP_NUMBER(pdfContext, k); | 1817 POP_NUMBER(pdfContext, k); |
1812 POP_NUMBER(pdfContext, y); | 1818 POP_NUMBER(pdfContext, y); |
1813 POP_NUMBER(pdfContext, m); | 1819 POP_NUMBER(pdfContext, m); |
1814 POP_NUMBER(pdfContext, c); | 1820 POP_NUMBER(pdfContext, c); |
1815 CHECK_PARAMETERS(); | 1821 CHECK_PARAMETERS(); |
1816 | 1822 |
1817 // TODO(edisonn): really silly quick way to remove compiler warning | 1823 // TODO(edisonn): really silly quick way to remove compiler warning |
1818 if (k + y + m + c == 0) { | 1824 if (k + y + m + c == 0) { |
1819 return kNYI_SkPdfResult; | 1825 return kNYI_SkPdfResult; |
1820 } | 1826 } |
1821 | 1827 |
1822 //colorOperator->fColorSpace = strings_DeviceCMYK; | 1828 //colorOperator->fColorSpace = strings_DeviceCMYK; |
1823 // TODO(edisonn): Set color. | 1829 // TODO(edisonn): Set color. |
1824 return kNYI_SkPdfResult; | 1830 return kNYI_SkPdfResult; |
1825 } | 1831 } |
1826 | 1832 |
1827 static SkPdfResult PdfOp_K(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1833 static SkPdfResult PdfOp_K(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1828 return PdfOp_K_k(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking); | 1834 return PdfOp_K_k(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking); |
1829 } | 1835 } |
1830 | 1836 |
1831 static SkPdfResult PdfOp_k(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1837 static SkPdfResult PdfOp_k(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1832 return PdfOp_K_k(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStrokin
g); | 1838 return PdfOp_K_k(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStrokin
g); |
1833 } | 1839 } |
1834 | 1840 |
1835 static SkPdfResult PdfOp_W(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 1841 static SkPdfResult PdfOp_W(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
1836 pdfContext->fGraphicsState.fClipPath = pdfContext->fGraphicsState.fPath; | 1842 pdfContext->fGraphicsState.fClipPath = pdfContext->fGraphicsState.fPath; |
1837 pdfContext->fGraphicsState.fHasClipPathToApply = true; | 1843 pdfContext->fGraphicsState.fHasClipPathToApply = true; |
1838 | 1844 |
1839 return kOK_SkPdfResult; | 1845 return kOK_SkPdfResult; |
1840 } | 1846 } |
1841 | 1847 |
1842 static SkPdfResult PdfOp_W_star(SkPdfContext* pdfContext, SkCanvas* canvas, | 1848 static SkPdfResult PdfOp_W_star(SkPdfContext* pdfContext, SkCanvas* canvas, SkPd
fTokenLooper*) { |
1843 SkPdfTokenLooper** looper) { | |
1844 pdfContext->fGraphicsState.fClipPath = pdfContext->fGraphicsState.fPath; | 1849 pdfContext->fGraphicsState.fClipPath = pdfContext->fGraphicsState.fPath; |
1845 | 1850 |
1846 pdfContext->fGraphicsState.fClipPath.setFillType(SkPath::kEvenOdd_FillType); | 1851 pdfContext->fGraphicsState.fClipPath.setFillType(SkPath::kEvenOdd_FillType); |
1847 pdfContext->fGraphicsState.fHasClipPathToApply = true; | 1852 pdfContext->fGraphicsState.fHasClipPathToApply = true; |
1848 | 1853 |
1849 return kOK_SkPdfResult; | 1854 return kOK_SkPdfResult; |
1850 } | 1855 } |
1851 | 1856 |
1852 static SkPdfResult PdfOp_BX(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1857 static SkPdfResult PdfOp_BX(SkPdfContext* pdfContext, SkCanvas* canvas, |
1853 *looper = new PdfCompatibilitySectionLooper(); | 1858 SkPdfTokenLooper* parentLooper) { |
| 1859 PdfCompatibilitySectionLooper looper(parentLooper); |
| 1860 looper.loop(); |
1854 return kOK_SkPdfResult; | 1861 return kOK_SkPdfResult; |
1855 } | 1862 } |
1856 | 1863 |
1857 static SkPdfResult PdfOp_EX(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1864 static SkPdfResult PdfOp_EX(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1858 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kNullObject_SkPdfIssue, | 1865 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kNullObject_SkPdfIssue, |
1859 "EX operator should not be called, it is handled in a looper, " | 1866 "EX operator should not be called, it is handled in a looper, " |
1860 "unless the file is corrupted, we should assert", | 1867 "unless the file is corrupted, we should assert", |
1861 NULL, pdfContext); | 1868 NULL, pdfContext); |
1862 | 1869 |
1863 return kIgnoreError_SkPdfResult; | 1870 return kIgnoreError_SkPdfResult; |
1864 } | 1871 } |
1865 | 1872 |
1866 static SkPdfResult PdfOp_BI(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1873 static SkPdfResult PdfOp_BI(SkPdfContext* pdfContext, SkCanvas* canvas, |
1867 *looper = new PdfInlineImageLooper(); | 1874 SkPdfTokenLooper* parentLooper) { |
| 1875 PdfInlineImageLooper looper(parentLooper); |
| 1876 looper.loop(); |
1868 return kOK_SkPdfResult; | 1877 return kOK_SkPdfResult; |
1869 } | 1878 } |
1870 | 1879 |
1871 static SkPdfResult PdfOp_ID(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1880 static SkPdfResult PdfOp_ID(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1872 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kNullObject_SkPdfIssue, | 1881 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kNullObject_SkPdfIssue, |
1873 "ID operator should not be called, it is habdled in a looper, " | 1882 "ID operator should not be called, it is habdled in a looper, " |
1874 "unless the file is corrupted, we should assert", | 1883 "unless the file is corrupted, we should assert", |
1875 NULL, pdfContext); | 1884 NULL, pdfContext); |
1876 return kIgnoreError_SkPdfResult; | 1885 return kIgnoreError_SkPdfResult; |
1877 } | 1886 } |
1878 | 1887 |
1879 static SkPdfResult PdfOp_EI(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 1888 static SkPdfResult PdfOp_EI(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
1880 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kNullObject_SkPdfIssue, | 1889 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kNullObject_SkPdfIssue, |
1881 "EI operator should not be called, it is habdled in a looper, " | 1890 "EI operator should not be called, it is habdled in a looper, " |
1882 "unless the file is corrupted, we should assert", | 1891 "unless the file is corrupted, we should assert", |
1883 NULL, pdfContext); | 1892 NULL, pdfContext); |
1884 return kIgnoreError_SkPdfResult; | 1893 return kIgnoreError_SkPdfResult; |
1885 } | 1894 } |
1886 | 1895 |
1887 static SkPdfResult skpdfGraphicsStateApply_ca(SkPdfContext* pdfContext, double c
a) { | 1896 static SkPdfResult skpdfGraphicsStateApply_ca(SkPdfContext* pdfContext, double c
a) { |
1888 pdfContext->fGraphicsState.fNonStroking.fOpacity = ca; | 1897 pdfContext->fGraphicsState.fNonStroking.fOpacity = ca; |
1889 return kOK_SkPdfResult; | 1898 return kOK_SkPdfResult; |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2034 SkPdfNativeObject::_kNumber_PdfObjectType, pdf
Context); | 2043 SkPdfNativeObject::_kNumber_PdfObjectType, pdf
Context); |
2035 return; | 2044 return; |
2036 } | 2045 } |
2037 | 2046 |
2038 skpdfGraphicsStateApplyFontCore(pdfContext, fontAndSize->objAtAIndex(0), | 2047 skpdfGraphicsStateApplyFontCore(pdfContext, fontAndSize->objAtAIndex(0), |
2039 fontAndSize->objAtAIndex(1)->numberValue()); | 2048 fontAndSize->objAtAIndex(1)->numberValue()); |
2040 } | 2049 } |
2041 | 2050 |
2042 | 2051 |
2043 //lineWidth w Set the line width in the graphics state (see “Line Width” on page
152). | 2052 //lineWidth w Set the line width in the graphics state (see “Line Width” on page
152). |
2044 static SkPdfResult PdfOp_w(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 2053 static SkPdfResult PdfOp_w(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
2045 EXPECT_OPERANDS("w", pdfContext, 1); | 2054 EXPECT_OPERANDS("w", pdfContext, 1); |
2046 POP_NUMBER(pdfContext, lw); | 2055 POP_NUMBER(pdfContext, lw); |
2047 CHECK_PARAMETERS(); | 2056 CHECK_PARAMETERS(); |
2048 | 2057 |
2049 return skpdfGraphicsStateApplyLW(pdfContext, lw); | 2058 return skpdfGraphicsStateApplyLW(pdfContext, lw); |
2050 } | 2059 } |
2051 | 2060 |
2052 //lineCap J Set the line cap style in the graphics state (see “Line Cap Style” o
n page 153). | 2061 //lineCap J Set the line cap style in the graphics state (see “Line Cap Style” o
n page 153). |
2053 static SkPdfResult PdfOp_J(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 2062 static SkPdfResult PdfOp_J(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
2054 // TODO(edisonn): round/ceil to int? | 2063 // TODO(edisonn): round/ceil to int? |
2055 EXPECT_OPERANDS("J", pdfContext, 1); | 2064 EXPECT_OPERANDS("J", pdfContext, 1); |
2056 POP_NUMBER(pdfContext, lc); | 2065 POP_NUMBER(pdfContext, lc); |
2057 CHECK_PARAMETERS(); | 2066 CHECK_PARAMETERS(); |
2058 | 2067 |
2059 return skpdfGraphicsStateApplyLC(pdfContext, (int)lc); | 2068 return skpdfGraphicsStateApplyLC(pdfContext, (int)lc); |
2060 } | 2069 } |
2061 | 2070 |
2062 //lineJoin j Set the line join style in the graphics state (see “Line Join Style
” on page 153). | 2071 //lineJoin j Set the line join style in the graphics state (see “Line Join Style
” on page 153). |
2063 static SkPdfResult PdfOp_j(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 2072 static SkPdfResult PdfOp_j(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
2064 // TODO(edisonn): round/ceil to int? | 2073 // TODO(edisonn): round/ceil to int? |
2065 EXPECT_OPERANDS("j", pdfContext, 1); | 2074 EXPECT_OPERANDS("j", pdfContext, 1); |
2066 POP_NUMBER(pdfContext, lj); | 2075 POP_NUMBER(pdfContext, lj); |
2067 CHECK_PARAMETERS(); | 2076 CHECK_PARAMETERS(); |
2068 | 2077 |
2069 return skpdfGraphicsStateApplyLJ(pdfContext, (int)lj); | 2078 return skpdfGraphicsStateApplyLJ(pdfContext, (int)lj); |
2070 } | 2079 } |
2071 | 2080 |
2072 //miterLimit M Set the miter limit in the graphics state (see “Miter Limit” on p
age 153). | 2081 //miterLimit M Set the miter limit in the graphics state (see “Miter Limit” on p
age 153). |
2073 static SkPdfResult PdfOp_M(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 2082 static SkPdfResult PdfOp_M(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
2074 EXPECT_OPERANDS("M", pdfContext, 1); | 2083 EXPECT_OPERANDS("M", pdfContext, 1); |
2075 POP_NUMBER(pdfContext, ml); | 2084 POP_NUMBER(pdfContext, ml); |
2076 CHECK_PARAMETERS(); | 2085 CHECK_PARAMETERS(); |
2077 return skpdfGraphicsStateApplyML(pdfContext, ml); | 2086 return skpdfGraphicsStateApplyML(pdfContext, ml); |
2078 } | 2087 } |
2079 | 2088 |
2080 //dashArray dashPhase d Set the line dash pattern in the graphics state (see “Li
ne Dash Pattern” on | 2089 //dashArray dashPhase d Set the line dash pattern in the graphics state (see “Li
ne Dash Pattern” on |
2081 //page 155). | 2090 //page 155). |
2082 static SkPdfResult PdfOp_d(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 2091 static SkPdfResult PdfOp_d(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
2083 EXPECT_OPERANDS("d", pdfContext, 2); | 2092 EXPECT_OPERANDS("d", pdfContext, 2); |
2084 POP_OBJ(pdfContext, phase); | 2093 POP_OBJ(pdfContext, phase); |
2085 POP_ARRAY(pdfContext, array); | 2094 POP_ARRAY(pdfContext, array); |
2086 CHECK_PARAMETERS(); | 2095 CHECK_PARAMETERS(); |
2087 | 2096 |
2088 return skpdfGraphicsStateApplyD(pdfContext, array, phase); | 2097 return skpdfGraphicsStateApplyD(pdfContext, array, phase); |
2089 } | 2098 } |
2090 | 2099 |
2091 //intent ri (PDF 1.1) Set the color rendering intent in the graphics state (see
“Rendering Intents” | 2100 //intent ri (PDF 1.1) Set the color rendering intent in the graphics state (see
“Rendering Intents” |
2092 // on page 197). | 2101 // on page 197). |
2093 static SkPdfResult PdfOp_ri(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 2102 static SkPdfResult PdfOp_ri(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
2094 pdfContext->fObjectStack.pop(); | 2103 pdfContext->fObjectStack.pop(); |
2095 | 2104 |
2096 SkPdfReport(kCodeWarning_SkPdfIssueSeverity, kNYI_SkPdfIssue, "render intent
NYI", NULL, | 2105 SkPdfReport(kCodeWarning_SkPdfIssueSeverity, kNYI_SkPdfIssue, "render intent
NYI", NULL, |
2097 pdfContext); | 2106 pdfContext); |
2098 | 2107 |
2099 return kNYI_SkPdfResult; | 2108 return kNYI_SkPdfResult; |
2100 } | 2109 } |
2101 | 2110 |
2102 //flatness i Set the flatness tolerance in the graphics state (see Section 6.5.1,
“Flatness | 2111 //flatness i Set the flatness tolerance in the graphics state (see Section 6.5.1,
“Flatness |
2103 //Tolerance”). flatness is a number in the range 0 to 100; a value of 0 speci- | 2112 //Tolerance”). flatness is a number in the range 0 to 100; a value of 0 speci- |
2104 //fies the output device’s default flatness tolerance. | 2113 //fies the output device’s default flatness tolerance. |
2105 static SkPdfResult PdfOp_i(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper** looper) { | 2114 static SkPdfResult PdfOp_i(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfToke
nLooper*) { |
2106 EXPECT_OPERANDS("i", pdfContext, 1); | 2115 EXPECT_OPERANDS("i", pdfContext, 1); |
2107 POP_NUMBER(pdfContext, flatness); | 2116 POP_NUMBER(pdfContext, flatness); |
2108 CHECK_PARAMETERS(); | 2117 CHECK_PARAMETERS(); |
2109 | 2118 |
2110 if (flatness < 0 || flatness > 100) { | 2119 if (flatness < 0 || flatness > 100) { |
2111 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kOutOfRange_SkPdfIssue, | 2120 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kOutOfRange_SkPdfIssue, |
2112 "flatness must be a real in [0, 100] range", flatness_obj, p
dfContext); | 2121 "flatness must be a real in [0, 100] range", flatness_obj, p
dfContext); |
2113 return kIgnoreError_SkPdfResult; | 2122 return kIgnoreError_SkPdfResult; |
2114 } | 2123 } |
2115 | 2124 |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2252 } | 2261 } |
2253 | 2262 |
2254 static void skpdfGraphicsStateApplyAIS(SkPdfContext* pdfContext, bool alphaSourc
e) { | 2263 static void skpdfGraphicsStateApplyAIS(SkPdfContext* pdfContext, bool alphaSourc
e) { |
2255 pdfContext->fGraphicsState.fAlphaSource = alphaSource; | 2264 pdfContext->fGraphicsState.fAlphaSource = alphaSource; |
2256 } | 2265 } |
2257 | 2266 |
2258 | 2267 |
2259 //dictName gs (PDF 1.2) Set the specified parameters in the graphics state. dictN
ame is | 2268 //dictName gs (PDF 1.2) Set the specified parameters in the graphics state. dictN
ame is |
2260 //the name of a graphics state parameter dictionary in the ExtGState subdictiona
ry of the current | 2269 //the name of a graphics state parameter dictionary in the ExtGState subdictiona
ry of the current |
2261 //resource dictionary (see the next section). | 2270 //resource dictionary (see the next section). |
2262 static SkPdfResult PdfOp_gs(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 2271 static SkPdfResult PdfOp_gs(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
2263 EXPECT_OPERANDS("gs", pdfContext, 1); | 2272 EXPECT_OPERANDS("gs", pdfContext, 1); |
2264 POP_NAME(pdfContext, name); | 2273 POP_NAME(pdfContext, name); |
2265 CHECK_PARAMETERS(); | 2274 CHECK_PARAMETERS(); |
2266 | 2275 |
2267 SkPdfDictionary* extGStateDictionary | 2276 SkPdfDictionary* extGStateDictionary |
2268 = pdfContext->fGraphicsState.fResources->ExtGState(pdfContext->fPdfD
oc); | 2277 = pdfContext->fGraphicsState.fResources->ExtGState(pdfContext->fPdfD
oc); |
2269 | 2278 |
2270 if (extGStateDictionary == NULL) { | 2279 if (extGStateDictionary == NULL) { |
2271 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kMissingExtGState_SkPdfIssu
e, NULL, | 2280 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kMissingExtGState_SkPdfIssu
e, NULL, |
2272 pdfContext->fGraphicsState.fResources, pdfContext); | 2281 pdfContext->fGraphicsState.fResources, pdfContext); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2354 | 2363 |
2355 // TODO(edisonn): make sure we loaded all those properties in graphic state. | 2364 // TODO(edisonn): make sure we loaded all those properties in graphic state. |
2356 | 2365 |
2357 return kOK_SkPdfResult; | 2366 return kOK_SkPdfResult; |
2358 } | 2367 } |
2359 | 2368 |
2360 //charSpace Tc Set the character spacing, Tc | 2369 //charSpace Tc Set the character spacing, Tc |
2361 //, to charSpace, which is a number expressed in unscaled text space units. | 2370 //, to charSpace, which is a number expressed in unscaled text space units. |
2362 // Character spacing is used by the Tj, TJ, and ' operators. | 2371 // Character spacing is used by the Tj, TJ, and ' operators. |
2363 //Initial value: 0. | 2372 //Initial value: 0. |
2364 SkPdfResult PdfOp_Tc(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLoope
r** looper) { | 2373 SkPdfResult PdfOp_Tc(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLoope
r*) { |
2365 EXPECT_OPERANDS("Tc", pdfContext, 1); | 2374 EXPECT_OPERANDS("Tc", pdfContext, 1); |
2366 POP_NUMBER(pdfContext, charSpace); | 2375 POP_NUMBER(pdfContext, charSpace); |
2367 CHECK_PARAMETERS(); | 2376 CHECK_PARAMETERS(); |
2368 | 2377 |
2369 pdfContext->fGraphicsState.fCharSpace = charSpace; | 2378 pdfContext->fGraphicsState.fCharSpace = charSpace; |
2370 | 2379 |
2371 return kOK_SkPdfResult; | 2380 return kOK_SkPdfResult; |
2372 } | 2381 } |
2373 | 2382 |
2374 //wordSpace Tw Set the word spacing, T | 2383 //wordSpace Tw Set the word spacing, T |
2375 //w | 2384 //w |
2376 //, to wordSpace, which is a number expressed in unscaled | 2385 //, to wordSpace, which is a number expressed in unscaled |
2377 //text space units. Word spacing is used by the Tj, TJ, and ' operators. Initial | 2386 //text space units. Word spacing is used by the Tj, TJ, and ' operators. Initial |
2378 //value: 0. | 2387 //value: 0. |
2379 SkPdfResult PdfOp_Tw(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLoope
r** looper) { | 2388 SkPdfResult PdfOp_Tw(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLoope
r*) { |
2380 EXPECT_OPERANDS("Tw", pdfContext, 1); | 2389 EXPECT_OPERANDS("Tw", pdfContext, 1); |
2381 POP_NUMBER(pdfContext, wordSpace); | 2390 POP_NUMBER(pdfContext, wordSpace); |
2382 CHECK_PARAMETERS(); | 2391 CHECK_PARAMETERS(); |
2383 | 2392 |
2384 pdfContext->fGraphicsState.fWordSpace = wordSpace; | 2393 pdfContext->fGraphicsState.fWordSpace = wordSpace; |
2385 | 2394 |
2386 return kOK_SkPdfResult; | 2395 return kOK_SkPdfResult; |
2387 } | 2396 } |
2388 | 2397 |
2389 //scale Tz Set the horizontal scaling, Th | 2398 //scale Tz Set the horizontal scaling, Th |
2390 //, to (scale ˜ 100). scale is a number specifying the | 2399 //, to (scale ˜ 100). scale is a number specifying the |
2391 //percentage of the normal width. Initial value: 100 (normal width). | 2400 //percentage of the normal width. Initial value: 100 (normal width). |
2392 static SkPdfResult PdfOp_Tz(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 2401 static SkPdfResult PdfOp_Tz(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
2393 EXPECT_OPERANDS("Tz", pdfContext, 1); | 2402 EXPECT_OPERANDS("Tz", pdfContext, 1); |
2394 POP_NUMBER(pdfContext, scale); | 2403 POP_NUMBER(pdfContext, scale); |
2395 CHECK_PARAMETERS(); | 2404 CHECK_PARAMETERS(); |
2396 | 2405 |
2397 if (scale < 0) { | 2406 if (scale < 0) { |
2398 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kOutOfRange_SkPdfIssue, | 2407 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kOutOfRange_SkPdfIssue, |
2399 "scale must a positive real number", scale_obj, pdfContext); | 2408 "scale must a positive real number", scale_obj, pdfContext); |
2400 return kError_SkPdfResult; | 2409 return kError_SkPdfResult; |
2401 } | 2410 } |
2402 | 2411 |
2403 return kNYI_SkPdfResult; | 2412 return kNYI_SkPdfResult; |
2404 } | 2413 } |
2405 | 2414 |
2406 //render Tr Set the text rendering mode, T | 2415 //render Tr Set the text rendering mode, T |
2407 //mode, to render, which is an integer. Initial value: 0. | 2416 //mode, to render, which is an integer. Initial value: 0. |
2408 static SkPdfResult PdfOp_Tr(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 2417 static SkPdfResult PdfOp_Tr(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
2409 EXPECT_OPERANDS("Tr", pdfContext, 1); | 2418 EXPECT_OPERANDS("Tr", pdfContext, 1); |
2410 POP_INTEGER(pdfContext, mode); | 2419 POP_INTEGER(pdfContext, mode); |
2411 CHECK_PARAMETERS(); | 2420 CHECK_PARAMETERS(); |
2412 | 2421 |
2413 if (mode < 0) { // TODO(edisonn): function/enums with supported modes | 2422 if (mode < 0) { // TODO(edisonn): function/enums with supported modes |
2414 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kOutOfRange_SkPdfIssue, | 2423 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kOutOfRange_SkPdfIssue, |
2415 "mode must a positive integer or 0", mode_obj, pdfContext); | 2424 "mode must a positive integer or 0", mode_obj, pdfContext); |
2416 return kError_SkPdfResult; | 2425 return kError_SkPdfResult; |
2417 } | 2426 } |
2418 | 2427 |
2419 return kNYI_SkPdfResult; | 2428 return kNYI_SkPdfResult; |
2420 } | 2429 } |
2421 //rise Ts Set the text rise, Trise, to rise, which is a number expressed in unsc
aled text space | 2430 //rise Ts Set the text rise, Trise, to rise, which is a number expressed in unsc
aled text space |
2422 //units. Initial value: 0. | 2431 //units. Initial value: 0. |
2423 static SkPdfResult PdfOp_Ts(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 2432 static SkPdfResult PdfOp_Ts(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
2424 EXPECT_OPERANDS("Ts", pdfContext, 1); | 2433 EXPECT_OPERANDS("Ts", pdfContext, 1); |
2425 POP_NUMBER(pdfContext, rise); | 2434 POP_NUMBER(pdfContext, rise); |
2426 CHECK_PARAMETERS(); | 2435 CHECK_PARAMETERS(); |
2427 | 2436 |
2428 if (rise < 0) { | 2437 if (rise < 0) { |
2429 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kOutOfRange_SkPdfIssue, | 2438 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kOutOfRange_SkPdfIssue, |
2430 "rise must a positive real number", rise_obj, pdfContext); | 2439 "rise must a positive real number", rise_obj, pdfContext); |
2431 return kNYI_SkPdfResult; | 2440 return kNYI_SkPdfResult; |
2432 } | 2441 } |
2433 | 2442 |
2434 return kNYI_SkPdfResult; | 2443 return kNYI_SkPdfResult; |
2435 } | 2444 } |
2436 | 2445 |
2437 //wx wy d0 | 2446 //wx wy d0 |
2438 static SkPdfResult PdfOp_d0(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 2447 static SkPdfResult PdfOp_d0(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
2439 EXPECT_OPERANDS("d0", pdfContext, 2); | 2448 EXPECT_OPERANDS("d0", pdfContext, 2); |
2440 POP_NUMBER(pdfContext, wy); | 2449 POP_NUMBER(pdfContext, wy); |
2441 POP_NUMBER(pdfContext, wx); | 2450 POP_NUMBER(pdfContext, wx); |
2442 CHECK_PARAMETERS(); | 2451 CHECK_PARAMETERS(); |
2443 | 2452 |
2444 if (wx < 0) { | 2453 if (wx < 0) { |
2445 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kOutOfRange_SkPdfIssue, | 2454 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kOutOfRange_SkPdfIssue, |
2446 "wx must a positive real number", wx_obj, pdfContext); | 2455 "wx must a positive real number", wx_obj, pdfContext); |
2447 return kError_SkPdfResult; | 2456 return kError_SkPdfResult; |
2448 } | 2457 } |
2449 | 2458 |
2450 if (wy < 0) { | 2459 if (wy < 0) { |
2451 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kOutOfRange_SkPdfIssue, | 2460 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kOutOfRange_SkPdfIssue, |
2452 "wy must a positive real number", wy_obj, pdfContext); | 2461 "wy must a positive real number", wy_obj, pdfContext); |
2453 return kError_SkPdfResult; | 2462 return kError_SkPdfResult; |
2454 } | 2463 } |
2455 | 2464 |
2456 return kNYI_SkPdfResult; | 2465 return kNYI_SkPdfResult; |
2457 } | 2466 } |
2458 | 2467 |
2459 //wx wy llx lly urx ury d1 | 2468 //wx wy llx lly urx ury d1 |
2460 static SkPdfResult PdfOp_d1(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 2469 static SkPdfResult PdfOp_d1(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
2461 EXPECT_OPERANDS("d1", pdfContext, 6); | 2470 EXPECT_OPERANDS("d1", pdfContext, 6); |
2462 POP_NUMBER(pdfContext, ury); | 2471 POP_NUMBER(pdfContext, ury); |
2463 POP_NUMBER(pdfContext, urx); | 2472 POP_NUMBER(pdfContext, urx); |
2464 POP_NUMBER(pdfContext, lly); | 2473 POP_NUMBER(pdfContext, lly); |
2465 POP_NUMBER(pdfContext, llx); | 2474 POP_NUMBER(pdfContext, llx); |
2466 POP_NUMBER(pdfContext, wy); | 2475 POP_NUMBER(pdfContext, wy); |
2467 POP_NUMBER(pdfContext, wx); | 2476 POP_NUMBER(pdfContext, wx); |
2468 CHECK_PARAMETERS(); | 2477 CHECK_PARAMETERS(); |
2469 | 2478 |
2470 // TODO(edisonn): really silly quick way to remove warning | 2479 // TODO(edisonn): really silly quick way to remove warning |
2471 if (wx + wy + llx + lly + urx + ury) { | 2480 if (wx + wy + llx + lly + urx + ury) { |
2472 return kNYI_SkPdfResult; | 2481 return kNYI_SkPdfResult; |
2473 } | 2482 } |
2474 | 2483 |
2475 return kNYI_SkPdfResult; | 2484 return kNYI_SkPdfResult; |
2476 } | 2485 } |
2477 | 2486 |
2478 //name sh | 2487 //name sh |
2479 static SkPdfResult PdfOp_sh(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 2488 static SkPdfResult PdfOp_sh(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
2480 EXPECT_OPERANDS("sh", pdfContext, 1); | 2489 EXPECT_OPERANDS("sh", pdfContext, 1); |
2481 POP_NAME(pdfContext, name); | 2490 POP_NAME(pdfContext, name); |
2482 CHECK_PARAMETERS(); | 2491 CHECK_PARAMETERS(); |
2483 | 2492 |
2484 if (name == NULL) { | 2493 if (name == NULL) { |
2485 SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, NULL, name, | 2494 SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, NULL, name, |
2486 SkPdfNativeObject::kName_PdfObjectType, pdfCon
text); | 2495 SkPdfNativeObject::kName_PdfObjectType, pdfCon
text); |
2487 return kError_SkPdfResult; | 2496 return kError_SkPdfResult; |
2488 } | 2497 } |
2489 | 2498 |
2490 return kNYI_SkPdfResult; | 2499 return kNYI_SkPdfResult; |
2491 } | 2500 } |
2492 | 2501 |
2493 //name Do | 2502 //name Do |
2494 static SkPdfResult PdfOp_Do(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 2503 static SkPdfResult PdfOp_Do(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
2495 EXPECT_OPERANDS("Do", pdfContext, 1); | 2504 EXPECT_OPERANDS("Do", pdfContext, 1); |
2496 POP_NAME(pdfContext, name); | 2505 POP_NAME(pdfContext, name); |
2497 CHECK_PARAMETERS(); | 2506 CHECK_PARAMETERS(); |
2498 | 2507 |
2499 SkPdfDictionary* xObject = pdfContext->fGraphicsState.fResources->XObject(p
dfContext->fPdfDoc); | 2508 SkPdfDictionary* xObject = pdfContext->fGraphicsState.fResources->XObject(p
dfContext->fPdfDoc); |
2500 | 2509 |
2501 if (xObject == NULL) { | 2510 if (xObject == NULL) { |
2502 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kMissingXObject_SkPdfIssue,
NULL, | 2511 SkPdfReport(kIgnoreError_SkPdfIssueSeverity, kMissingXObject_SkPdfIssue,
NULL, |
2503 pdfContext->fGraphicsState.fResources, pdfContext); | 2512 pdfContext->fGraphicsState.fResources, pdfContext); |
2504 return kIgnoreError_SkPdfResult; | 2513 return kIgnoreError_SkPdfResult; |
2505 } | 2514 } |
2506 | 2515 |
2507 SkPdfNativeObject* value = xObject->get(name); | 2516 SkPdfNativeObject* value = xObject->get(name); |
2508 value = pdfContext->fPdfDoc->resolveReference(value); | 2517 value = pdfContext->fPdfDoc->resolveReference(value); |
2509 | 2518 |
2510 return doXObject(pdfContext, canvas, value); | 2519 return doXObject(pdfContext, canvas, value); |
2511 } | 2520 } |
2512 | 2521 |
2513 //tag MP Designate a marked-content point. tag is a name object indicating the r
ole or | 2522 //tag MP Designate a marked-content point. tag is a name object indicating the r
ole or |
2514 //significance of the point. | 2523 //significance of the point. |
2515 static SkPdfResult PdfOp_MP(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 2524 static SkPdfResult PdfOp_MP(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
2516 EXPECT_OPERANDS("MP", pdfContext, 1); | 2525 EXPECT_OPERANDS("MP", pdfContext, 1); |
2517 POP_OBJ(pdfContext, tag); | 2526 POP_OBJ(pdfContext, tag); |
2518 CHECK_PARAMETERS(); | 2527 CHECK_PARAMETERS(); |
2519 | 2528 |
2520 if (tag == NULL) { | 2529 if (tag == NULL) { |
2521 SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, NULL, tag, | 2530 SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, NULL, tag, |
2522 SkPdfNativeObject::_kObject_PdfObjectType, pdf
Context); | 2531 SkPdfNativeObject::_kObject_PdfObjectType, pdf
Context); |
2523 return kNYI_SkPdfResult; | 2532 return kNYI_SkPdfResult; |
2524 } | 2533 } |
2525 | 2534 |
2526 SkPdfReport(kCodeWarning_SkPdfIssueSeverity, kNYI_SkPdfIssue, "MP NYI", NULL
, NULL); | 2535 SkPdfReport(kCodeWarning_SkPdfIssueSeverity, kNYI_SkPdfIssue, "MP NYI", NULL
, NULL); |
2527 return kNYI_SkPdfResult; | 2536 return kNYI_SkPdfResult; |
2528 } | 2537 } |
2529 | 2538 |
2530 //tag properties DP Designate a marked-content point with an associated property
list. tag is a | 2539 //tag properties DP Designate a marked-content point with an associated property
list. tag is a |
2531 //name object indicating the role or significance of the point; properties is | 2540 //name object indicating the role or significance of the point; properties is |
2532 //either an inline dictionary containing the property list or a name object | 2541 //either an inline dictionary containing the property list or a name object |
2533 //associated with it in the Properties subdictionary of the current resource | 2542 //associated with it in the Properties subdictionary of the current resource |
2534 //dictionary (see Section 9.5.1, “Property Lists”). | 2543 //dictionary (see Section 9.5.1, “Property Lists”). |
2535 static SkPdfResult PdfOp_DP(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper** looper) { | 2544 static SkPdfResult PdfOp_DP(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTok
enLooper*) { |
2536 EXPECT_OPERANDS("DP", pdfContext, 2); | 2545 EXPECT_OPERANDS("DP", pdfContext, 2); |
2537 POP_OBJ(pdfContext, properties); | 2546 POP_OBJ(pdfContext, properties); |
2538 POP_OBJ(pdfContext, tag); | 2547 POP_OBJ(pdfContext, tag); |
2539 CHECK_PARAMETERS(); | 2548 CHECK_PARAMETERS(); |
2540 | 2549 |
2541 if (tag == NULL) { | 2550 if (tag == NULL) { |
2542 SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, NULL, tag, | 2551 SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, NULL, tag, |
2543 SkPdfNativeObject::_kObject_PdfObjectType, pdf
Context); | 2552 SkPdfNativeObject::_kObject_PdfObjectType, pdf
Context); |
2544 return kNYI_SkPdfResult; | 2553 return kNYI_SkPdfResult; |
2545 } | 2554 } |
2546 | 2555 |
2547 if (properties == NULL) { | 2556 if (properties == NULL) { |
2548 SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, NULL, propert
ies, | 2557 SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, NULL, propert
ies, |
2549 SkPdfNativeObject::_kObject_PdfObjectType, pdf
Context); | 2558 SkPdfNativeObject::_kObject_PdfObjectType, pdf
Context); |
2550 return kNYI_SkPdfResult; | 2559 return kNYI_SkPdfResult; |
2551 } | 2560 } |
2552 | 2561 |
2553 SkPdfReport(kCodeWarning_SkPdfIssueSeverity, kNYI_SkPdfIssue, "DP NYI", NULL
, NULL); | 2562 SkPdfReport(kCodeWarning_SkPdfIssueSeverity, kNYI_SkPdfIssue, "DP NYI", NULL
, NULL); |
2554 return kNYI_SkPdfResult; | 2563 return kNYI_SkPdfResult; |
2555 } | 2564 } |
2556 | 2565 |
2557 //tag BMC Begin a marked-content sequence terminated by a balancing EMC operator
. | 2566 //tag BMC Begin a marked-content sequence terminated by a balancing EMC operator
. |
2558 //tag is a name object indicating the role or significance of the sequence. | 2567 //tag is a name object indicating the role or significance of the sequence. |
2559 static SkPdfResult PdfOp_BMC(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTo
kenLooper** looper) { | 2568 static SkPdfResult PdfOp_BMC(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTo
kenLooper*) { |
2560 EXPECT_OPERANDS("BMC", pdfContext, 1); | 2569 EXPECT_OPERANDS("BMC", pdfContext, 1); |
2561 POP_OBJ(pdfContext, tag); | 2570 POP_OBJ(pdfContext, tag); |
2562 CHECK_PARAMETERS(); | 2571 CHECK_PARAMETERS(); |
2563 | 2572 |
2564 if (tag == NULL) { | 2573 if (tag == NULL) { |
2565 SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, NULL, tag, | 2574 SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, NULL, tag, |
2566 SkPdfNativeObject::_kObject_PdfObjectType, pdf
Context); | 2575 SkPdfNativeObject::_kObject_PdfObjectType, pdf
Context); |
2567 return kNYI_SkPdfResult; | 2576 return kNYI_SkPdfResult; |
2568 } | 2577 } |
2569 | 2578 |
2570 SkPdfReport(kCodeWarning_SkPdfIssueSeverity, kNYI_SkPdfIssue, "BMC NYI", NUL
L, NULL); | 2579 SkPdfReport(kCodeWarning_SkPdfIssueSeverity, kNYI_SkPdfIssue, "BMC NYI", NUL
L, NULL); |
2571 return kNYI_SkPdfResult; | 2580 return kNYI_SkPdfResult; |
2572 } | 2581 } |
2573 | 2582 |
2574 //tag properties BDC Begin a marked-content sequence with an associated property
list, terminated | 2583 //tag properties BDC Begin a marked-content sequence with an associated property
list, terminated |
2575 //by a balancing EMCoperator. tag is a name object indicating the role or signif
icance of the | 2584 //by a balancing EMCoperator. tag is a name object indicating the role or signif
icance of the |
2576 // sequence; propertiesis either an inline dictionary containing the | 2585 // sequence; propertiesis either an inline dictionary containing the |
2577 //property list or a name object associated with it in the Properties subdiction
ary of the current | 2586 //property list or a name object associated with it in the Properties subdiction
ary of the current |
2578 //resource dictionary (see Section 9.5.1, “Property Lists”). | 2587 //resource dictionary (see Section 9.5.1, “Property Lists”). |
2579 static SkPdfResult PdfOp_BDC(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTo
kenLooper** looper) { | 2588 static SkPdfResult PdfOp_BDC(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTo
kenLooper*) { |
2580 EXPECT_OPERANDS("BDC", pdfContext, 2); | 2589 EXPECT_OPERANDS("BDC", pdfContext, 2); |
2581 POP_OBJ(pdfContext, properties); | 2590 POP_OBJ(pdfContext, properties); |
2582 POP_OBJ(pdfContext, tag); | 2591 POP_OBJ(pdfContext, tag); |
2583 CHECK_PARAMETERS(); | 2592 CHECK_PARAMETERS(); |
2584 | 2593 |
2585 if (tag == NULL) { | 2594 if (tag == NULL) { |
2586 SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, NULL, tag, | 2595 SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, NULL, tag, |
2587 SkPdfNativeObject::_kObject_PdfObjectType, pdf
Context); | 2596 SkPdfNativeObject::_kObject_PdfObjectType, pdf
Context); |
2588 return kNYI_SkPdfResult; | 2597 return kNYI_SkPdfResult; |
2589 } | 2598 } |
2590 | 2599 |
2591 if (properties == NULL) { | 2600 if (properties == NULL) { |
2592 SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, NULL, propert
ies, | 2601 SkPdfReportUnexpectedType(kIgnoreError_SkPdfIssueSeverity, NULL, propert
ies, |
2593 SkPdfNativeObject::_kObject_PdfObjectType, pdf
Context); | 2602 SkPdfNativeObject::_kObject_PdfObjectType, pdf
Context); |
2594 return kNYI_SkPdfResult; | 2603 return kNYI_SkPdfResult; |
2595 } | 2604 } |
2596 | 2605 |
2597 SkPdfReport(kCodeWarning_SkPdfIssueSeverity, kNYI_SkPdfIssue, "BDC NYI", NUL
L, NULL); | 2606 SkPdfReport(kCodeWarning_SkPdfIssueSeverity, kNYI_SkPdfIssue, "BDC NYI", NUL
L, NULL); |
2598 return kNYI_SkPdfResult; | 2607 return kNYI_SkPdfResult; |
2599 } | 2608 } |
2600 | 2609 |
2601 //— EMC End a marked-content sequence begun by a BMC or BDC operator. | 2610 //— EMC End a marked-content sequence begun by a BMC or BDC operator. |
2602 static SkPdfResult PdfOp_EMC(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTo
kenLooper** looper) { | 2611 static SkPdfResult PdfOp_EMC(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTo
kenLooper*) { |
2603 SkPdfReport(kCodeWarning_SkPdfIssueSeverity, kNYI_SkPdfIssue, "EMC NYI", NUL
L, NULL); | 2612 SkPdfReport(kCodeWarning_SkPdfIssueSeverity, kNYI_SkPdfIssue, "EMC NYI", NUL
L, NULL); |
2604 return kNYI_SkPdfResult; | 2613 return kNYI_SkPdfResult; |
2605 } | 2614 } |
2606 | 2615 |
2607 #include "SkPdfOps.h" | 2616 #include "SkPdfOps.h" |
2608 | 2617 |
2609 SkTDict<PdfOperatorRenderer> gPdfOps(100); | 2618 SkTDict<PdfOperatorRenderer> gPdfOps(100); |
2610 | 2619 |
2611 static void initPdfOperatorRenderes() { | 2620 static void initPdfOperatorRenderes() { |
2612 static bool gInitialized = false; | 2621 static bool gInitialized = false; |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2714 }; | 2723 }; |
2715 | 2724 |
2716 InitPdfOps gInitPdfOps; | 2725 InitPdfOps gInitPdfOps; |
2717 | 2726 |
2718 SkPdfResult PdfInlineImageLooper::consumeToken(PdfToken& token) { | 2727 SkPdfResult PdfInlineImageLooper::consumeToken(PdfToken& token) { |
2719 SkASSERT(false); | 2728 SkASSERT(false); |
2720 return kIgnoreError_SkPdfResult; | 2729 return kIgnoreError_SkPdfResult; |
2721 } | 2730 } |
2722 | 2731 |
2723 void PdfInlineImageLooper::loop() { | 2732 void PdfInlineImageLooper::loop() { |
| 2733 // FIXME (scroggo): Does this need to be looper? It does not consumeTokens, |
| 2734 // nor does it loop. The one thing it does is provide access to the |
| 2735 // protected members of SkPdfTokenLooper. |
2724 doXObject_Image(fPdfContext, fCanvas, fTokenizer->readInlineImage()); | 2736 doXObject_Image(fPdfContext, fCanvas, fTokenizer->readInlineImage()); |
2725 } | 2737 } |
2726 | 2738 |
2727 SkPdfResult PdfInlineImageLooper::done() { | |
2728 return kNYI_SkPdfResult; | |
2729 } | |
2730 | |
2731 SkPdfResult PdfCompatibilitySectionLooper::consumeToken(PdfToken& token) { | 2739 SkPdfResult PdfCompatibilitySectionLooper::consumeToken(PdfToken& token) { |
2732 return fParent->consumeToken(token); | 2740 return fParent->consumeToken(token); |
2733 } | 2741 } |
2734 | 2742 |
2735 void PdfCompatibilitySectionLooper::loop() { | 2743 void PdfCompatibilitySectionLooper::loop() { |
2736 PdfOp_q(fPdfContext, fCanvas, NULL); | 2744 PdfOp_q(fPdfContext, fCanvas, NULL); |
2737 | 2745 |
2738 PdfToken token; | 2746 PdfToken token; |
2739 while (fTokenizer->readToken(&token)) { | 2747 while (fTokenizer->readToken(&token)) { |
2740 if (token.fType == kKeyword_TokenType && strcmp(token.fKeyword, "BX") ==
0) { | 2748 if (token.fType == kKeyword_TokenType && strcmp(token.fKeyword, "BX") ==
0) { |
2741 SkPdfTokenLooper* looper = new PdfCompatibilitySectionLooper(); | 2749 PdfCompatibilitySectionLooper looper(this); |
2742 looper->setUp(this); | 2750 looper.loop(); |
2743 looper->loop(); | |
2744 delete looper; | |
2745 } else { | 2751 } else { |
2746 if (token.fType == kKeyword_TokenType && strcmp(token.fKeyword, "EX"
) == 0) break; | 2752 if (token.fType == kKeyword_TokenType && strcmp(token.fKeyword, "EX"
) == 0) { |
| 2753 break; |
| 2754 } |
2747 fParent->consumeToken(token); | 2755 fParent->consumeToken(token); |
2748 } | 2756 } |
2749 } | 2757 } |
2750 | 2758 |
2751 PdfOp_Q(fPdfContext, fCanvas, NULL); | 2759 PdfOp_Q(fPdfContext, fCanvas, NULL); |
2752 } | 2760 } |
2753 | 2761 |
2754 // TODO(edisonn): for debugging - remove or put it in a #ifdef | 2762 // TODO(edisonn): for debugging - remove or put it in a #ifdef |
2755 SkPdfContext* gPdfContext = NULL; | 2763 SkPdfContext* gPdfContext = NULL; |
2756 | 2764 |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2897 | 2905 |
2898 rect = SkRect::MakeWH(width, height); | 2906 rect = SkRect::MakeWH(width, height); |
2899 | 2907 |
2900 setup_bitmap(output, SkScalarCeilToInt(width), SkScalarCeilToInt(height)); | 2908 setup_bitmap(output, SkScalarCeilToInt(width), SkScalarCeilToInt(height)); |
2901 | 2909 |
2902 SkAutoTUnref<SkBaseDevice> device(SkNEW_ARGS(SkBitmapDevice, (*output))); | 2910 SkAutoTUnref<SkBaseDevice> device(SkNEW_ARGS(SkBitmapDevice, (*output))); |
2903 SkCanvas canvas(device); | 2911 SkCanvas canvas(device); |
2904 | 2912 |
2905 return renderer->renderPage(page, &canvas, rect); | 2913 return renderer->renderPage(page, &canvas, rect); |
2906 } | 2914 } |
OLD | NEW |