| 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 |