Lines Matching defs:pdfContext

44 #define EXPECT_OPERANDS(name,pdfContext,n) \
45 bool __failed = pdfContext->fObjectStack.count() < n; \
48 SkPdfReportIf(pdfContext->fObjectStack.count() < n, \
51 "Not enought parameters.", NULL, pdfContext); \
54 #define POP_OBJ(pdfContext,name) \
58 __failed = __failed || pdfContext->fObjectStack.count() == 0; \
59 if (pdfContext->fObjectStack.count() > 0) { \
60 name = pdfContext->fObjectStack.top(); \
61 pdfContext->fObjectStack.pop(); \
65 #define POP_NUMBER(pdfContext,name) \
70 __failed = __failed || pdfContext->fObjectStack.count() == 0; \
71 if (pdfContext->fObjectStack.count() > 0) { \
72 name##_obj = pdfContext->fObjectStack.top(); \
73 pdfContext->fObjectStack.pop(); \
86 #define POP_INTEGER(pdfContext,name) \
90 __failed = __failed || pdfContext->fObjectStack.count() == 0; \
92 if (pdfContext->fObjectStack.count() > 0) { \
93 name##_obj = pdfContext->fObjectStack.top(); \
94 pdfContext->fObjectStack.pop(); \
107 #define POP_NUMBER_INTO(pdfContext,var) \
110 __failed = __failed || pdfContext->fObjectStack.count() == 0; \
111 if (pdfContext->fObjectStack.count() > 0) { \
112 SkPdfNativeObject* tmp = pdfContext->fObjectStack.top(); \
113 pdfContext->fObjectStack.pop(); \
128 #define POP_NAME(pdfContext,name) \
132 __failed = __failed || pdfContext->fObjectStack.count() == 0; \
133 if (pdfContext->fObjectStack.count() > 0) { \
134 SkPdfNativeObject* tmp = pdfContext->fObjectStack.top(); \
135 pdfContext->fObjectStack.pop(); \
148 #define POP_STRING(pdfContext,name) \
152 __failed = __failed || pdfContext->fObjectStack.count() == 0; \
153 if (pdfContext->fObjectStack.count() > 0) { \
154 SkPdfNativeObject* tmp = pdfContext->fObjectStack.top(); \
155 pdfContext->fObjectStack.pop(); \
169 #define POP_ARRAY(pdfContext,name) \
173 __failed = __failed || pdfContext->fObjectStack.count() == 0; \
174 if (pdfContext->fObjectStack.count() > 0) { \
175 SkPdfNativeObject* tmp = pdfContext->fObjectStack.top(); \
176 pdfContext->fObjectStack.pop(); \
303 static SkPdfResult DrawText(SkPdfContext* pdfContext,
307 SkPdfFont* skfont = pdfContext->fGraphicsState.fSkFont;
317 pdfContext);
328 "draw text", _str, pdfContext);
336 if (pdfContext->fGraphicsState.fCurFontSize != 0) {
337 paint.setTextSize(SkDoubleToScalar(pdfContext->fGraphicsState.fCurFontSize));
345 pdfContext->fGraphicsState.applyGraphicsState(&paint, false);
347 skfont->drawText(decoded, &paint, pdfContext, canvas);
353 SkPdfResult PdfOp_q(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper* parentLooper);
354 SkPdfResult PdfOp_Q(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper* parentLooper);
355 SkPdfResult PdfOp_Tw(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper* parentLooper);
356 SkPdfResult PdfOp_Tc(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper* parentLooper);
429 static SkBitmap* getImageFromObjectCore(SkPdfContext* pdfContext,
433 SkPdfNativeObject::_kStream_PdfObjectType, pdfContext);
437 int bpc = (int)image->BitsPerComponent(pdfContext->fPdfDoc);
438 int width = (int)image->Width(pdfContext->fPdfDoc);
439 int height = (int)image->Height(pdfContext->fPdfDoc);
446 if (image->isColorSpaceAName(pdfContext->fPdfDoc)) {
447 colorSpace = image->getColorSpaceAsName(pdfContext->fPdfDoc);
448 } else if (image->isColorSpaceAArray(pdfContext->fPdfDoc)) {
449 SkPdfArray* array = image->getColorSpaceAsArray(pdfContext->fPdfDoc);
457 image, pdfContext);
462 "Color space feature NYI, cnt > 256", image, pdfContext);
468 "Image color table mismatch color space specs", array, pdfContext);
499 SkPdfNativeObject::_kStream_PdfObjectType, pdfContext);
545 static SkBitmap* getImageFromObject(SkPdfContext* pdfContext, SkPdfImageDictionary* image,
549 SkBitmap* bitmap = getImageFromObjectCore(pdfContext, image, transparencyMask);
554 return getImageFromObjectCore(pdfContext, image, transparencyMask);
558 static SkBitmap* getSmaskFromObject(SkPdfContext* pdfContext, SkPdfImageDictionary* obj) {
559 SkPdfImageDictionary* sMask = obj->SMask(pdfContext->fPdfDoc);
562 return getImageFromObject(pdfContext, sMask, true);
567 "implement GS SMask. Default to empty right now.", obj, pdfContext);
569 return pdfContext->fGraphicsState.fSMask;
572 static SkPdfResult doXObject_Image(SkPdfContext* pdfContext, SkCanvas* canvas,
578 SkBitmap* image = getImageFromObject(pdfContext, skpdfimage, false);
579 SkBitmap* sMask = getSmaskFromObject(pdfContext, skpdfimage);
582 canvas->setMatrix(pdfContext->fGraphicsState.fCTM);
593 SkMatrix solveImageFlip = pdfContext->fGraphicsState.fCTM;
613 "implement soft mask type", skpdfimage, pdfContext);
616 pdfContext->fGraphicsState.applyGraphicsState(&paint, false);
654 static void doGroup_before(SkPdfContext* pdfContext, SkCanvas* canvas, SkRect bbox,
658 bool isolatedGroup = tgroup->I(pdfContext->fPdfDoc);
659 // bool knockoutGroup = tgroup->K(pdfContext->fPdfDoc);
661 pdfContext->fGraphicsState.applyGraphicsState(&paint, false);
666 //static void doGroup_after(SkPdfContext* pdfContext, SkCanvas* canvas, SkRect bbox,
672 static SkPdfResult doXObject_Form(SkPdfContext* pdfContext, SkCanvas* canvas,
676 SkPdfNativeObject::_kStream_PdfObjectType, pdfContext);
682 skobj, pdfContext);
686 PdfOp_q(pdfContext, canvas, NULL);
689 if (skobj->Resources(pdfContext->fPdfDoc)) {
690 pdfContext->fGraphicsState.fResources = skobj->Resources(pdfContext->fPdfDoc);
693 SkTraceMatrix(pdfContext->fGraphicsState.fCTM, "Current matrix");
696 pdfContext->fGraphicsState.fCTM.preConcat(skobj->Matrix(pdfContext->fPdfDoc));
697 SkMatrix matrix = pdfContext->fGraphicsState.fCTM;
699 pdfContext->fGraphicsState.fMatrixTm = matrix;
700 pdfContext->fGraphicsState.fMatrixTlm = matrix;
704 SkTraceMatrix(pdfContext->fGraphicsState.fCTM, "Total matrix");
705 pdfContext->fGraphicsState.fContentStreamMatrix = pdfContext->fGraphicsState.fCTM;
707 canvas->setMatrix(pdfContext->fGraphicsState.fCTM);
709 SkRect bbox = skobj->BBox(pdfContext->fPdfDoc);
715 SkPdfTransparencyGroupDictionary* tgroup = skobj->Group(pdfContext->fPdfDoc);
716 doGroup_before(pdfContext, canvas, bbox, tgroup, false);
721 pdfContext->parseStream(stream, canvas);
727 PdfOp_Q(pdfContext, canvas, NULL);
731 static SkPdfResult doXObject_Pattern(SkPdfContext* pdfContext, SkCanvas* canvas,
735 skobj, SkPdfNativeObject::_kStream_PdfObjectType, pdfContext);
741 skobj, pdfContext);
745 PdfOp_q(pdfContext, canvas, NULL);
748 if (skobj->Resources(pdfContext->fPdfDoc)) {
749 pdfContext->fGraphicsState.fResources = skobj->Resources(pdfContext->fPdfDoc);
752 SkTraceMatrix(pdfContext->fGraphicsState.fContentStreamMatrix, "Current Content stream matrix");
755 pdfContext->fGraphicsState.fContentStreamMatrix.preConcat(
756 skobj->Matrix(pdfContext->fPdfDoc));
759 SkTraceMatrix(pdfContext->fGraphicsState.fContentStreamMatrix, "Total Content stream matrix");
761 canvas->setMatrix(pdfContext->fGraphicsState.fContentStreamMatrix);
762 pdfContext->fGraphicsState.fCTM = pdfContext->fGraphicsState.fContentStreamMatrix;
764 SkRect bbox = skobj->BBox(pdfContext->fPdfDoc);
770 pdfContext->parseStream(stream, canvas);
772 PdfOp_Q(pdfContext, canvas, NULL);
777 //static SkPdfResult doXObject_PS(SkPdfContext* pdfContext, SkCanvas* canvas,
782 SkPdfResult doType3Char(SkPdfContext* pdfContext, SkCanvas* canvas, const SkPdfNativeObject* skobj,
786 SkPdfNativeObject::_kStream_PdfObjectType, pdfContext);
790 PdfOp_q(pdfContext, canvas, NULL);
792 pdfContext->fGraphicsState.fMatrixTm.preConcat(matrix);
793 pdfContext->fGraphicsState.fMatrixTm.preScale(SkDoubleToScalar(textSize),
795 pdfContext->fGraphicsState.fMatrixTlm = pdfContext->fGraphicsState.fMatrixTm;
797 pdfContext->fGraphicsState.fCTM = pdfContext->fGraphicsState.fMatrixTm;
798 pdfContext->fGraphicsState.fCTM.preScale(SkDoubleToScalar(1), SkDoubleToScalar(-1));
800 SkTraceMatrix(pdfContext->fGraphicsState.fCTM, "Total matrix");
802 canvas->setMatrix(pdfContext->fGraphicsState.fCTM);
805 pdfContext->fGraphicsState.fCTM.mapRect(&rm);
814 pdfContext->parseStream(stream, canvas);
816 PdfOp_Q(pdfContext, canvas, NULL);
841 static SkPdfResult doXObject(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfNativeObject* obj) {
844 "Recursive reverencing is invalid in draw objects", obj, pdfContext);
850 switch (pdfContext->fPdfDoc->mapper()->mapXObjectDictionary(obj))
853 return doXObject_Image(pdfContext, canvas, (SkPdfImageDictionary*)obj);
855 return doXObject_Form(pdfContext, canvas, (SkPdfType1FormDictionary*)obj);
859 if (pdfContext->fPdfDoc->mapper()->mapType1PatternDictionary(obj) !=
862 return doXObject_Pattern(pdfContext, canvas, pattern);
865 obj, pdfContext);
871 static SkPdfResult doPage(SkPdfContext* pdfContext, SkCanvas* canvas,
873 if (!skobj || !skobj->isContentsAStream(pdfContext->fPdfDoc)) {
875 SkPdfNativeObject::_kStream_PdfObjectType, pdfContext);
879 SkPdfStream* stream = skobj->getContentsAsStream(pdfContext->fPdfDoc);
883 skobj, SkPdfNativeObject::_kStream_PdfObjectType, pdfContext);
888 pdfContext->fGraphicsState.fResources = skobj->Resources(pdfContext->fPdfDoc);
890 if (!pdfContext->fGraphicsState.fResources) {
897 "Recursive reverencing is invalid in draw objects", skobj, pdfContext);
904 PdfOp_q(pdfContext, canvas, NULL);
908 NULL, pdfContext);
909 SkRect bbox = skobj->MediaBox(pdfContext->fPdfDoc);
911 SkPdfTransparencyGroupDictionary* tgroup = skobj->Group(pdfContext->fPdfDoc);
912 doGroup_before(pdfContext, canvas, bbox, tgroup, true);
917 pdfContext->parseStream(stream, canvas);
920 PdfOp_Q(pdfContext, canvas, NULL);
924 SkPdfResult PdfOp_q(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
925 pdfContext->fStateStack.push(pdfContext->fGraphicsState);
927 pdfContext->fObjectStack.nest();
931 SkPdfResult PdfOp_Q(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
932 if (pdfContext->fStateStack.count() > 0) {
933 pdfContext->fGraphicsState = pdfContext->fStateStack.top();
934 pdfContext->fStateStack.pop();
937 if (pdfContext->fObjectStack.nestingLevel() == 0) {
939 "stack nesting overflow (q/Q)", NULL, pdfContext);
942 pdfContext->fObjectStack.unnest();
946 "stack overflow (q/Q)", NULL, pdfContext);
953 static SkPdfResult PdfOp_cm(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
954 EXPECT_OPERANDS("cm", pdfContext, 6);
955 POP_NUMBER(pdfContext, f);
956 POP_NUMBER(pdfContext, e);
957 POP_NUMBER(pdfContext, d);
958 POP_NUMBER(pdfContext, c);
959 POP_NUMBER(pdfContext, b);
960 POP_NUMBER(pdfContext, a);
977 pdfContext->fGraphicsState.fCTM.preConcat(matrix);
985 SkTraceMatrix(pdfContext->fGraphicsState.fCTM, "cm");
994 static SkPdfResult PdfOp_TL(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
995 EXPECT_OPERANDS("TL", pdfContext, 1);
996 POP_NUMBER(pdfContext, ty);
999 pdfContext->fGraphicsState.fTextLeading = ty;
1004 static SkPdfResult PdfOp_Td(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1005 EXPECT_OPERANDS("Td", pdfContext, 2);
1006 POP_NUMBER(pdfContext, ty);
1007 POP_NUMBER(pdfContext, tx);
1013 pdfContext->fGraphicsState.fMatrixTm.preConcat(matrix);
1014 pdfContext->fGraphicsState.fMatrixTlm.preConcat(matrix);
1019 static SkPdfResult PdfOp_TD(SkPdfContext* pdfContext, SkCanvas* canvas,
1021 EXPECT_OPERANDS("TD", pdfContext, 2)
1022 POP_NUMBER(pdfContext, ty);
1023 POP_NUMBER(pdfContext, tx);
1027 SkPdfReal* _ty = pdfContext->fPdfDoc->createReal(-ty);
1028 pdfContext->fObjectStack.push(_ty);
1030 PdfOp_TL(pdfContext, canvas, parentLooper);
1032 SkPdfReal* vtx = pdfContext->fPdfDoc->createReal(tx);
1033 pdfContext->fObjectStack.push(vtx);
1035 SkPdfReal* vty = pdfContext->fPdfDoc->createReal(ty);
1036 pdfContext->fObjectStack.push(vty);
1038 SkPdfResult ret = PdfOp_Td(pdfContext, canvas, parentLooper);
1043 static SkPdfResult PdfOp_Tm(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1044 EXPECT_OPERANDS("Tm", pdfContext, 6);
1045 POP_NUMBER(pdfContext, f);
1046 POP_NUMBER(pdfContext, e);
1047 POP_NUMBER(pdfContext, d);
1048 POP_NUMBER(pdfContext, c);
1049 POP_NUMBER(pdfContext, b);
1050 POP_NUMBER(pdfContext, a);
1062 matrix.postConcat(pdfContext->fGraphicsState.fCTM);
1067 "Text positioning not implemented for 2+ chars", NULL, pdfContext);
1069 pdfContext->fGraphicsState.fMatrixTm = matrix;
1070 pdfContext->fGraphicsState.fMatrixTlm = matrix;;
1078 static SkPdfResult PdfOp_T_star(SkPdfContext* pdfContext, SkCanvas* canvas,
1080 SkPdfReal* zero = pdfContext->fPdfDoc->createReal(0.0);
1081 SkPdfReal* tl = pdfContext->fPdfDoc->createReal(pdfContext->fGraphicsState.fTextLeading);
1083 pdfContext->fObjectStack.push(zero);
1084 pdfContext->fObjectStack.push(tl);
1086 SkPdfResult ret = PdfOp_Td(pdfContext, canvas, parentLooper);
1091 static SkPdfResult PdfOp_m(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1092 if (pdfContext->fGraphicsState.fPathClosed) {
1093 pdfContext->fGraphicsState.fPath.reset();
1094 pdfContext->fGraphicsState.fPathClosed = false;
1097 EXPECT_OPERANDS("m", pdfContext, 2);
1098 POP_NUMBER(pdfContext, y);
1099 POP_NUMBER(pdfContext, x);
1102 pdfContext->fGraphicsState.fCurPosY = y;
1103 pdfContext->fGraphicsState.fCurPosX = x;
1105 pdfContext->fGraphicsState.fPath.moveTo(SkDoubleToScalar(pdfContext->fGraphicsState.fCurPosX),
1106 SkDoubleToScalar(pdfContext->fGraphicsState.fCurPosY));
1111 static SkPdfResult PdfOp_l(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1112 if (pdfContext->fGraphicsState.fPathClosed) {
1113 pdfContext->fGraphicsState.fPath.reset();
1114 pdfContext->fGraphicsState.fPathClosed = false;
1117 EXPECT_OPERANDS("l", pdfContext, 2);
1118 POP_NUMBER(pdfContext, y);
1119 POP_NUMBER(pdfContext, x);
1122 pdfContext->fGraphicsState.fCurPosY = y;
1123 pdfContext->fGraphicsState.fCurPosX = x;
1125 pdfContext->fGraphicsState.fPath.lineTo(SkDoubleToScalar(pdfContext->fGraphicsState.fCurPosX),
1126 SkDoubleToScalar(pdfContext->fGraphicsState.fCurPosY));
1131 static SkPdfResult PdfOp_c(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1132 if (pdfContext->fGraphicsState.fPathClosed) {
1133 pdfContext->fGraphicsState.fPath.reset();
1134 pdfContext->fGraphicsState.fPathClosed = false;
1137 EXPECT_OPERANDS("c", pdfContext, 6);
1138 POP_NUMBER(pdfContext, y3);
1139 POP_NUMBER(pdfContext, x3);
1140 POP_NUMBER(pdfContext, y2);
1141 POP_NUMBER(pdfContext, x2);
1142 POP_NUMBER(pdfContext, y1);
1143 POP_NUMBER(pdfContext, x1);
1146 pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToScalar(y1),
1150 pdfContext->fGraphicsState.fCurPosX = x3;
1151 pdfContext->fGraphicsState.fCurPosY = y3;
1156 static SkPdfResult PdfOp_v(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1157 if (pdfContext->fGraphicsState.fPathClosed) {
1158 pdfContext->fGraphicsState.fPath.reset();
1159 pdfContext->fGraphicsState.fPathClosed = false;
1162 EXPECT_OPERANDS("v", pdfContext, 4);
1163 POP_NUMBER(pdfContext, y3);
1164 POP_NUMBER(pdfContext, x3);
1165 POP_NUMBER(pdfContext, y2);
1166 POP_NUMBER(pdfContext, x2);
1169 double y1 = pdfContext->fGraphicsState.fCurPosY;
1170 double x1 = pdfContext->fGraphicsState.fCurPosX;
1172 pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToScalar(y1),
1176 pdfContext->fGraphicsState.fCurPosX = x3;
1177 pdfContext->fGraphicsState.fCurPosY = y3;
1182 static SkPdfResult PdfOp_y(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1183 if (pdfContext->fGraphicsState.fPathClosed) {
1184 pdfContext->fGraphicsState.fPath.reset();
1185 pdfContext->fGraphicsState.fPathClosed = false;
1188 EXPECT_OPERANDS("y", pdfContext, 4);
1189 POP_NUMBER(pdfContext, y3);
1190 POP_NUMBER(pdfContext, x3);
1191 POP_NUMBER(pdfContext, y1);
1192 POP_NUMBER(pdfContext, x1);
1195 double y2 = pdfContext->fGraphicsState.fCurPosY;
1196 double x2 = pdfContext->fGraphicsState.fCurPosX;
1198 pdfContext->fGraphicsState.fPath.cubicTo(SkDoubleToScalar(x1), SkDoubleToScalar(y1),
1202 pdfContext->fGraphicsState.fCurPosX = x3;
1203 pdfContext->fGraphicsState.fCurPosY = y3;
1208 static SkPdfResult PdfOp_re(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1209 if (pdfContext->fGraphicsState.fPathClosed) {
1210 pdfContext->fGraphicsState.fPath.reset();
1211 pdfContext->fGraphicsState.fPathClosed = false;
1214 EXPECT_OPERANDS("re", pdfContext, 4);
1215 POP_NUMBER(pdfContext, height);
1216 POP_NUMBER(pdfContext, width);
1217 POP_NUMBER(pdfContext, y);
1218 POP_NUMBER(pdfContext, x);
1221 pdfContext->fGraphicsState.fPath.addRect(SkDoubleToScalar(x),
1226 pdfContext->fGraphicsState.fCurPosX = x;
1227 pdfContext->fGraphicsState.fCurPosY = y + height;
1232 static SkPdfResult PdfOp_h(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1233 pdfContext->fGraphicsState.fPath.close();
1237 static SkPdfResult PdfOp_fillAndStroke(SkPdfContext* pdfContext, SkCanvas* canvas,
1239 SkPath path = pdfContext->fGraphicsState.fPath;
1245 canvas->setMatrix(pdfContext->fGraphicsState.fCTM);
1254 pdfContext->fGraphicsState.applyGraphicsState(&paint, false);
1260 if (strncmp((char*)pdfContext->fGraphicsState.fNonStroking.fColorSpace.fBuffer,
1262 pdfContext->fGraphicsState.fNonStroking.fPattern != NULL) {
1266 PdfOp_q(pdfContext, canvas, NULL);
1273 if (pdfContext->fPdfDoc
1275 ->mapType1PatternDictionary(pdfContext->fGraphicsState
1280 = (SkPdfType1PatternDictionary*)pdfContext->fGraphicsState
1285 if (pattern->PaintType(pdfContext->fPdfDoc) == 1) {
1289 int xStep = abs((int)pattern->XStep(pdfContext->fPdfDoc));
1290 int yStep = abs((int)pattern->YStep(pdfContext->fPdfDoc));
1294 pattern, pdfContext);
1310 doXObject(pdfContext, canvas, pattern);
1312 pdfContext->fGraphicsState.fContentStreamMatrix.preTranslate(
1317 pdfContext->fGraphicsState.fContentStreamMatrix.preTranslate(
1320 pdfContext->fGraphicsState.fContentStreamMatrix.preTranslate(
1325 pdfContext->fGraphicsState.fContentStreamMatrix.preTranslate(
1330 PdfOp_Q(pdfContext, canvas, NULL);
1337 pdfContext->fGraphicsState.applyGraphicsState(&paint, false);
1344 if (false && strncmp((char*)pdfContext->fGraphicsState.fNonStroking.fColorSpace.fBuffer,
1357 pdfContext->fGraphicsState.applyGraphicsState(&paint, true);
1366 pdfContext->fGraphicsState.fPath.reset();
1369 if (pdfContext->fGraphicsState.fHasClipPathToApply) {
1371 canvas->clipPath(pdfContext->fGraphicsState.fClipPath, SkRegion::kIntersect_Op, true);
1375 //pdfContext->fGraphicsState.fClipPath.reset();
1376 pdfContext->fGraphicsState.fHasClipPathToApply = false;
1382 static SkPdfResult PdfOp_S(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1383 return PdfOp_fillAndStroke(pdfContext, canvas, false, true, false, false);
1386 static SkPdfResult PdfOp_s(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1387 return PdfOp_fillAndStroke(pdfContext, canvas, false, true, true, false);
1390 static SkPdfResult PdfOp_F(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1391 return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, false);
1394 static SkPdfResult PdfOp_f(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1395 return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, false);
1398 static SkPdfResult PdfOp_f_star(SkPdfContext* pdfContext, SkCanvas* canvas,
1400 return PdfOp_fillAndStroke(pdfContext, canvas, true, false, false, true);
1403 static SkPdfResult PdfOp_B(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1404 return PdfOp_fillAndStroke(pdfContext, canvas, true, true, false, false);
1407 static SkPdfResult PdfOp_B_star(SkPdfContext* pdfContext, SkCanvas* canvas,
1409 return PdfOp_fillAndStroke(pdfContext, canvas, true, true, false, true);
1412 static SkPdfResult PdfOp_b(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1413 return PdfOp_fillAndStroke(pdfContext, canvas, true, true, true, false);
1416 static SkPdfResult PdfOp_b_star(SkPdfContext* pdfContext, SkCanvas* canvas,
1418 return PdfOp_fillAndStroke(pdfContext, canvas, true, true, true, true);
1421 static SkPdfResult PdfOp_n(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1422 canvas->setMatrix(pdfContext->fGraphicsState.fCTM);
1423 if (pdfContext->fGraphicsState.fHasClipPathToApply) {
1425 canvas->clipPath(pdfContext->fGraphicsState.fClipPath, SkRegion::kIntersect_Op, true);
1429 pdfContext->fGraphicsState.fHasClipPathToApply = false;
1431 pdfContext->fGraphicsState.fPathClosed = true;
1436 static SkPdfResult PdfOp_BT(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1437 pdfContext->fGraphicsState.fTextBlock = true;
1438 SkMatrix matrix = pdfContext->fGraphicsState.fCTM;
1440 pdfContext->fGraphicsState.fMatrixTm = matrix;
1441 pdfContext->fGraphicsState.fMatrixTlm = matrix;
1446 static SkPdfResult PdfOp_ET(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1447 if (!pdfContext->fGraphicsState.fTextBlock) {
1449 pdfContext);
1454 pdfContext->fGraphicsState.fTextBlock = false;
1460 static SkPdfResult skpdfGraphicsStateApplyFontCore(SkPdfContext* pdfContext,
1466 if (!pdfContext->fGraphicsState.fResources->Font(pdfContext->fPdfDoc)) {
1469 "No font", fontName, pdfContext);
1474 = pdfContext->fGraphicsState.fResources->Font(pdfContext->fPdfDoc)->get(fontName);
1475 objFont = pdfContext->fPdfDoc->resolveReference(objFont);
1476 if (kNone_SkPdfNativeObjectType == pdfContext->fPdfDoc->mapper()->mapFontDictionary(objFont)) {
1479 "Invalid font", objFont, pdfContext);
1485 SkPdfFont* skfont = SkPdfFont::fontFromPdfDictionary(pdfContext->fPdfDoc, fd);
1488 pdfContext->fGraphicsState.fSkFont = skfont;
1490 pdfContext->fGraphicsState.fCurFontSize = fontSize;
1499 static SkPdfResult PdfOp_Tf(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1500 EXPECT_OPERANDS("Tf", pdfContext, 2);
1501 POP_NUMBER(pdfContext, fontSize);
1502 POP_NAME(pdfContext, fontName);
1505 return skpdfGraphicsStateApplyFontCore(pdfContext, fontName, fontSize);
1508 static SkPdfResult PdfOp_Tj(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1509 EXPECT_OPERANDS("Tj", pdfContext, 1);
1510 POP_STRING(pdfContext, str);
1513 if (!pdfContext->fGraphicsState.fTextBlock) {
1516 pdfContext);
1520 SkPdfResult ret = DrawText(pdfContext, str, canvas);
1525 static SkPdfResult PdfOp_quote(SkPdfContext* pdfContext, SkCanvas* canvas,
1527 if (!pdfContext->fGraphicsState.fTextBlock) {
1530 "' without BT", NULL, pdfContext);
1534 PdfOp_T_star(pdfContext, canvas, parentLooper);
1536 return PdfOp_Tj(pdfContext, canvas, parentLooper);
1539 static SkPdfResult PdfOp_doublequote(SkPdfContext* pdfContext, SkCanvas* canvas,
1541 if (!pdfContext->fGraphicsState.fTextBlock) {
1544 "\" without BT", NULL, pdfContext);
1548 EXPECT_OPERANDS("\"", pdfContext, 3);
1549 POP_OBJ(pdfContext, str);
1550 POP_OBJ(pdfContext, ac);
1551 POP_OBJ(pdfContext, aw);
1554 pdfContext->fObjectStack.push(aw);
1555 PdfOp_Tw(pdfContext, canvas, parentLooper);
1557 pdfContext->fObjectStack.push(ac);
1558 PdfOp_Tc(pdfContext, canvas, parentLooper);
1560 pdfContext->fObjectStack.push(str);
1561 PdfOp_quote(pdfContext, canvas, parentLooper);
1566 static SkPdfResult PdfOp_TJ(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1567 EXPECT_OPERANDS("Tf", pdfContext, 1);
1568 POP_ARRAY(pdfContext, array);
1571 if (!pdfContext->fGraphicsState.fTextBlock) {
1574 pdfContext);
1580 SkPdfNativeObject::kArray_PdfObjectType, pdfContext);
1592 pdfContext);
1595 DrawText(pdfContext, obj, canvas);
1610 pdfContext->fGraphicsState.fMatrixTm.preConcat(matrix);
1615 pdfContext);
1621 static SkPdfResult PdfOp_CS_cs(SkPdfContext* pdfContext, SkCanvas* canvas,
1623 EXPECT_OPERANDS("CS/cs", pdfContext, 1);
1624 POP_NAME(pdfContext, name);
1629 = pdfContext->fGraphicsState.fResources->ColorSpace(pdfContext->fPdfDoc);
1632 = colorSpaceResource ? pdfContext->fPdfDoc
1648 "color space has length 0", colorSpace, pdfContext);
1652 type = pdfContext->fPdfDoc->resolveReference(type);
1658 colorSpace, pdfContext);
1662 prop = pdfContext->fPdfDoc->resolveReference(prop);
1680 static SkPdfResult PdfOp_CS(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1681 return PdfOp_CS_cs(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
1684 static SkPdfResult PdfOp_cs(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1685 return PdfOp_CS_cs(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
1688 static SkPdfResult PdfOp_SC_sc(SkPdfContext* pdfContext, SkCanvas* canvas,
1704 EXPECT_OPERANDS("SC/sc", pdfContext, n);
1708 POP_NUMBER_INTO(pdfContext, c[i]);
1710 // v[i] = pdfContext->fObjectStack.top()->intValue(); pdfContext->fObjectStack.pop();
1727 static SkPdfResult PdfOp_SC(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1728 return PdfOp_SC_sc(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
1731 static SkPdfResult PdfOp_sc(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1732 return PdfOp_SC_sc(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
1735 static SkPdfResult PdfOp_SCN_scn(SkPdfContext* pdfContext, SkCanvas* canvas,
1737 if (pdfContext->fObjectStack.count() > 0 && pdfContext->fObjectStack.top()->isName()) {
1738 SkPdfNativeObject* name = pdfContext->fObjectStack.top(); pdfContext->fObjectStack.pop();
1741 = pdfContext->fGraphicsState.fResources->Pattern(pdfContext->fPdfDoc);
1751 pdfContext->fPdfDoc->resolveReference(patternResources->get(name)));
1755 PdfOp_SC_sc(pdfContext, canvas, colorOperator);
1760 static SkPdfResult PdfOp_SCN(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1761 return PdfOp_SCN_scn(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
1764 static SkPdfResult PdfOp_scn(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1765 return PdfOp_SCN_scn(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
1768 static SkPdfResult PdfOp_G_g(SkPdfContext* pdfContext, SkCanvas* canvas,
1770 EXPECT_OPERANDS("G/g", pdfContext, 1);
1771 POP_NUMBER(pdfContext, gray);
1785 static SkPdfResult PdfOp_G(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1786 return PdfOp_G_g(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
1789 static SkPdfResult PdfOp_g(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1790 return PdfOp_G_g(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
1793 static SkPdfResult PdfOp_RG_rg(SkPdfContext* pdfContext, SkCanvas* canvas,
1795 EXPECT_OPERANDS("RG/rg", pdfContext, 3);
1796 POP_NUMBER(pdfContext, b);
1797 POP_NUMBER(pdfContext, g);
1798 POP_NUMBER(pdfContext, r);
1806 static SkPdfResult PdfOp_RG(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1807 return PdfOp_RG_rg(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
1810 static SkPdfResult PdfOp_rg(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1811 return PdfOp_RG_rg(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
1814 static SkPdfResult PdfOp_K_k(SkPdfContext* pdfContext, SkCanvas* canvas,
1817 EXPECT_OPERANDS("K/k", pdfContext, 4);
1818 POP_NUMBER(pdfContext, k);
1819 POP_NUMBER(pdfContext, y);
1820 POP_NUMBER(pdfContext, m);
1821 POP_NUMBER(pdfContext, c);
1834 static SkPdfResult PdfOp_K(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1835 return PdfOp_K_k(pdfContext, canvas, &pdfContext->fGraphicsState.fStroking);
1838 static SkPdfResult PdfOp_k(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1839 return PdfOp_K_k(pdfContext, canvas, &pdfContext->fGraphicsState.fNonStroking);
1842 static SkPdfResult PdfOp_W(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1843 pdfContext->fGraphicsState.fClipPath = pdfContext->fGraphicsState.fPath;
1844 pdfContext->fGraphicsState.fHasClipPathToApply = true;
1849 static SkPdfResult PdfOp_W_star(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1850 pdfContext->fGraphicsState.fClipPath = pdfContext->fGraphicsState.fPath;
1852 pdfContext->fGraphicsState.fClipPath.setFillType(SkPath::kEvenOdd_FillType);
1853 pdfContext->fGraphicsState.fHasClipPathToApply = true;
1858 static SkPdfResult PdfOp_BX(SkPdfContext* pdfContext, SkCanvas* canvas,
1865 static SkPdfResult PdfOp_EX(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1869 NULL, pdfContext);
1874 static SkPdfResult PdfOp_BI(SkPdfContext* pdfContext, SkCanvas* canvas,
1881 static SkPdfResult PdfOp_ID(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1885 NULL, pdfContext);
1889 static SkPdfResult PdfOp_EI(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
1893 NULL, pdfContext);
1897 static SkPdfResult skpdfGraphicsStateApply_ca(SkPdfContext* pdfContext, double ca) {
1898 pdfContext->fGraphicsState.fNonStroking.fOpacity = ca;
1902 static SkPdfResult skpdfGraphicsStateApply_CA(SkPdfContext* pdfContext, double CA) {
1903 pdfContext->fGraphicsState.fStroking.fOpacity = CA;
1907 static SkPdfResult skpdfGraphicsStateApplyLW(SkPdfContext* pdfContext, double lineWidth) {
1908 pdfContext->fGraphicsState.fLineWidth = lineWidth;
1912 static SkPdfResult skpdfGraphicsStateApplyLC(SkPdfContext* pdfContext, int64_t lineCap) {
1913 pdfContext->fGraphicsState.fLineCap = (int)lineCap;
1917 static SkPdfResult skpdfGraphicsStateApplyLJ(SkPdfContext* pdfContext, int64_t lineJoin) {
1918 pdfContext->fGraphicsState.fLineJoin = (int)lineJoin;
1922 static SkPdfResult skpdfGraphicsStateApplyML(SkPdfContext* pdfContext, double miterLimit) {
1923 pdfContext->fGraphicsState.fMiterLimit = miterLimit;
1937 static SkPdfResult skpdfGraphicsStateApplyD(SkPdfContext* pdfContext, SkPdfArray* intervals,
1941 SkPdfNativeObject::_kNumber_PdfObjectType, pdfContext);
1947 SkPdfNativeObject::_kNumber_PdfObjectType, pdfContext);
1955 "dash array size unssuported, cnt > 256", intervals, pdfContext);
1969 pdfContext->fGraphicsState.fDashArray[i] = intervals->objAtAIndex(i)->scalarValue();
1970 total += pdfContext->fGraphicsState.fDashArray[i];
1974 pdfContext->fGraphicsState.fDashArray[1] = pdfContext->fGraphicsState.fDashArray[0];
1981 pdfContext->fGraphicsState.fDashArrayLength = cnt;
1982 pdfContext->fGraphicsState.fDashPhase = phase->scalarValue();
1983 if (pdfContext->fGraphicsState.fDashPhase == 0) {
1985 pdfContext->fGraphicsState.fDashPhase = SkDoubleToScalar(total);
1991 static SkPdfResult skpdfGraphicsStateApplyD(SkPdfContext* pdfContext, SkPdfArray* dash) {
1994 SkPdfNativeObject::kArray_PdfObjectType, pdfContext);
2000 "hash array must have 2 elements", dash, pdfContext);
2006 SkPdfNativeObject::kArray_PdfObjectType, pdfContext);
2012 SkPdfNativeObject::_kNumber_PdfObjectType, pdfContext);
2016 return skpdfGraphicsStateApplyD(pdfContext, (SkPdfArray*)dash->objAtAIndex(0),
2020 static void skpdfGraphicsStateApplyFont(SkPdfContext* pdfContext, SkPdfArray* fontAndSize) {
2023 SkPdfNativeObject::kArray_PdfObjectType, pdfContext);
2029 "font array must have 2 elements", fontAndSize, pdfContext);
2036 SkPdfNativeObject::kName_PdfObjectType, pdfContext);
2044 SkPdfNativeObject::_kNumber_PdfObjectType, pdfContext);
2048 skpdfGraphicsStateApplyFontCore(pdfContext, fontAndSize->objAtAIndex(0),
2054 static SkPdfResult PdfOp_w(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2055 EXPECT_OPERANDS("w", pdfContext, 1);
2056 POP_NUMBER(pdfContext, lw);
2059 return skpdfGraphicsStateApplyLW(pdfContext, lw);
2063 static SkPdfResult PdfOp_J(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2065 EXPECT_OPERANDS("J", pdfContext, 1);
2066 POP_NUMBER(pdfContext, lc);
2069 return skpdfGraphicsStateApplyLC(pdfContext, (int)lc);
2073 static SkPdfResult PdfOp_j(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2075 EXPECT_OPERANDS("j", pdfContext, 1);
2076 POP_NUMBER(pdfContext, lj);
2079 return skpdfGraphicsStateApplyLJ(pdfContext, (int)lj);
2083 static SkPdfResult PdfOp_M(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2084 EXPECT_OPERANDS("M", pdfContext, 1);
2085 POP_NUMBER(pdfContext, ml);
2087 return skpdfGraphicsStateApplyML(pdfContext, ml);
2092 static SkPdfResult PdfOp_d(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2093 EXPECT_OPERANDS("d", pdfContext, 2);
2094 POP_OBJ(pdfContext, phase);
2095 POP_ARRAY(pdfContext, array);
2098 return skpdfGraphicsStateApplyD(pdfContext, array, phase);
2103 static SkPdfResult PdfOp_ri(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2104 pdfContext->fObjectStack.pop();
2107 pdfContext);
2115 static SkPdfResult PdfOp_i(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2116 EXPECT_OPERANDS("i", pdfContext, 1);
2117 POP_NUMBER(pdfContext, flatness);
2122 "flatness must be a real in [0, 100] range", flatness_obj, pdfContext);
2168 static void skpdfGraphicsStateApplyBM_name(SkPdfContext* pdfContext, const SkString& blendMode) {
2171 pdfContext->fGraphicsState.fBlendModesLength = 1;
2172 pdfContext->fGraphicsState.fBlendModes[0] = mode;
2175 blendMode.c_str(), NULL, pdfContext);
2179 static void skpdfGraphicsStateApplyBM_array(SkPdfContext* pdfContext, SkPdfArray* blendModes) {
2182 SkPdfNativeObject::kArray_PdfObjectType, pdfContext);
2188 "length of blendmodes, 0, is an erro, 256+, is NYI", blendModes, pdfContext);
2198 SkPdfNativeObject::kName_PdfObjectType, pdfContext);
2204 pdfContext);
2209 pdfContext->fGraphicsState.fBlendModesLength = cnt;
2211 pdfContext->fGraphicsState.fBlendModes[i] = modes[i];
2215 static void skpdfGraphicsStateApplySMask_dict(SkPdfContext* pdfContext, SkPdfDictionary* sMask) {
2218 SkPdfNativeObject::kArray_PdfObjectType, pdfContext);
2222 if (pdfContext->fPdfDoc->mapper()->mapSoftMaskDictionary(sMask)) {
2223 pdfContext->fGraphicsState.fSoftMaskDictionary = (SkPdfSoftMaskDictionary*)sMask;
2224 } else if (pdfContext->fPdfDoc->mapper()->mapSoftMaskImageDictionary(sMask)) {
2226 pdfContext->fGraphicsState.fSMask = getImageFromObject(pdfContext, smid, true);
2230 sMask, SkPdfNativeObject::kDictionary_PdfObjectType, pdfContext);
2234 static void skpdfGraphicsStateApplySMask_name(SkPdfContext* pdfContext, const SkString& sMask) {
2236 pdfContext->fGraphicsState.fSoftMaskDictionary = NULL;
2237 pdfContext->fGraphicsState.fSMask = NULL;
2242 = pdfContext->fGraphicsState.fResources->ExtGState(pdfContext->fPdfDoc);
2246 pdfContext->fGraphicsState.fResources, pdfContext);
2251 = pdfContext->fPdfDoc->resolveReference(extGStateDictionary->get(sMask.c_str()));
2254 SkPdfNativeObject::kDictionary_PdfObjectType, pdfContext);
2258 pdfContext->fGraphicsState.fSoftMaskDictionary = NULL;
2259 pdfContext->fGraphicsState.fSMask = NULL;
2261 skpdfGraphicsStateApplySMask_dict(pdfContext, obj->asDictionary());
2264 static void skpdfGraphicsStateApplyAIS(SkPdfContext* pdfContext, bool alphaSource) {
2265 pdfContext->fGraphicsState.fAlphaSource = alphaSource;
2272 static SkPdfResult PdfOp_gs(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2273 EXPECT_OPERANDS("gs", pdfContext, 1);
2274 POP_NAME(pdfContext, name);
2278 = pdfContext->fGraphicsState.fResources->ExtGState(pdfContext->fPdfDoc);
2282 pdfContext->fGraphicsState.fResources, pdfContext);
2287 = pdfContext->fPdfDoc->resolveReference(extGStateDictionary->get(name));
2290 pdfContext->fPdfDoc->mapper()->mapGraphicsStateDictionary(value)) {
2297 gs, SkPdfNativeObject::kDictionary_PdfObjectType, pdfContext);
2302 skpdfGraphicsStateApplyLW(pdfContext, gs->LW(pdfContext->fPdfDoc));
2306 skpdfGraphicsStateApplyLC(pdfContext, gs->LC(pdfContext->fPdfDoc));
2310 skpdfGraphicsStateApplyLJ(pdfContext, gs->LJ(pdfContext->fPdfDoc));
2314 skpdfGraphicsStateApplyML(pdfContext, gs->ML(pdfContext->fPdfDoc));
2318 skpdfGraphicsStateApplyD(pdfContext, gs->D(pdfContext->fPdfDoc));
2322 skpdfGraphicsStateApplyFont(pdfContext, gs->Font(pdfContext->fPdfDoc));
2326 if (gs->isBMAName(pdfContext->fPdfDoc)) {
2327 skpdfGraphicsStateApplyBM_name(pdfContext, gs->getBMAsName(pdfContext->fPdfDoc));
2328 } else if (gs->isBMAArray(pdfContext->fPdfDoc)) {
2329 skpdfGraphicsStateApplyBM_array(pdfContext, gs->getBMAsArray(pdfContext->fPdfDoc));
2333 SkPdfNativeObject::kName_PdfObjectType, pdfContext);
2338 if (gs->isSMaskAName(pdfContext->fPdfDoc)) {
2339 skpdfGraphicsStateApplySMask_name(pdfContext, gs->getSMaskAsName(pdfContext->fPdfDoc));
2340 } else if (gs->isSMaskADictionary(pdfContext->fPdfDoc)) {
2341 skpdfGraphicsStateApplySMask_dict(pdfContext,
2342 gs->getSMaskAsDictionary(pdfContext->fPdfDoc));
2349 pdfContext);
2354 skpdfGraphicsStateApply_ca(pdfContext, gs->ca(pdfContext->fPdfDoc));
2358 skpdfGraphicsStateApply_CA(pdfContext, gs->CA(pdfContext->fPdfDoc));
2362 skpdfGraphicsStateApplyAIS(pdfContext, gs->AIS(pdfContext->fPdfDoc));
2374 SkPdfResult PdfOp_Tc(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2375 EXPECT_OPERANDS("Tc", pdfContext, 1);
2376 POP_NUMBER(pdfContext, charSpace);
2379 pdfContext->fGraphicsState.fCharSpace = charSpace;
2389 SkPdfResult PdfOp_Tw(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2390 EXPECT_OPERANDS("Tw", pdfContext, 1);
2391 POP_NUMBER(pdfContext, wordSpace);
2394 pdfContext->fGraphicsState.fWordSpace = wordSpace;
2402 static SkPdfResult PdfOp_Tz(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2403 EXPECT_OPERANDS("Tz", pdfContext, 1);
2404 POP_NUMBER(pdfContext, scale);
2409 "scale must a positive real number", scale_obj, pdfContext);
2418 static SkPdfResult PdfOp_Tr(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2419 EXPECT_OPERANDS("Tr", pdfContext, 1);
2420 POP_INTEGER(pdfContext, mode);
2425 "mode must a positive integer or 0", mode_obj, pdfContext);
2433 static SkPdfResult PdfOp_Ts(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2434 EXPECT_OPERANDS("Ts", pdfContext, 1);
2435 POP_NUMBER(pdfContext, rise);
2440 "rise must a positive real number", rise_obj, pdfContext);
2448 static SkPdfResult PdfOp_d0(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2449 EXPECT_OPERANDS("d0", pdfContext, 2);
2450 POP_NUMBER(pdfContext, wy);
2451 POP_NUMBER(pdfContext, wx);
2456 "wx must a positive real number", wx_obj, pdfContext);
2462 "wy must a positive real number", wy_obj, pdfContext);
2470 static SkPdfResult PdfOp_d1(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2471 EXPECT_OPERANDS("d1", pdfContext, 6);
2472 POP_NUMBER(pdfContext, ury);
2473 POP_NUMBER(pdfContext, urx);
2474 POP_NUMBER(pdfContext, lly);
2475 POP_NUMBER(pdfContext, llx);
2476 POP_NUMBER(pdfContext, wy);
2477 POP_NUMBER(pdfContext, wx);
2489 static SkPdfResult PdfOp_sh(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2490 EXPECT_OPERANDS("sh", pdfContext, 1);
2491 POP_NAME(pdfContext, name);
2496 SkPdfNativeObject::kName_PdfObjectType, pdfContext);
2504 static SkPdfResult PdfOp_Do(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2505 EXPECT_OPERANDS("Do", pdfContext, 1);
2506 POP_NAME(pdfContext, name);
2509 SkPdfDictionary* xObject = pdfContext->fGraphicsState.fResources->XObject(pdfContext->fPdfDoc);
2513 pdfContext->fGraphicsState.fResources, pdfContext);
2518 value = pdfContext->fPdfDoc->resolveReference(value);
2520 return doXObject(pdfContext, canvas, value);
2525 static SkPdfResult PdfOp_MP(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2526 EXPECT_OPERANDS("MP", pdfContext, 1);
2527 POP_OBJ(pdfContext, tag);
2532 SkPdfNativeObject::_kObject_PdfObjectType, pdfContext);
2545 static SkPdfResult PdfOp_DP(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2546 EXPECT_OPERANDS("DP", pdfContext, 2);
2547 POP_OBJ(pdfContext, properties);
2548 POP_OBJ(pdfContext, tag);
2553 SkPdfNativeObject::_kObject_PdfObjectType, pdfContext);
2559 SkPdfNativeObject::_kObject_PdfObjectType, pdfContext);
2569 static SkPdfResult PdfOp_BMC(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2570 EXPECT_OPERANDS("BMC", pdfContext, 1);
2571 POP_OBJ(pdfContext, tag);
2576 SkPdfNativeObject::_kObject_PdfObjectType, pdfContext);
2589 static SkPdfResult PdfOp_BDC(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2590 EXPECT_OPERANDS("BDC", pdfContext, 2);
2591 POP_OBJ(pdfContext, properties);
2592 POP_OBJ(pdfContext, tag);
2597 SkPdfNativeObject::_kObject_PdfObjectType, pdfContext);
2603 SkPdfNativeObject::_kObject_PdfObjectType, pdfContext);
2612 static SkPdfResult PdfOp_EMC(SkPdfContext* pdfContext, SkCanvas* canvas, SkPdfTokenLooper*) {
2775 SkPdfContext pdfContext(fPdfDoc);
2778 pdfContext.fOriginalMatrix = SkMatrix::I();
2779 pdfContext.fGraphicsState.fResources = fPdfDoc->pageResources(page);
2781 gPdfContext = &pdfContext;
2814 SkAssertResult(pdfContext.fOriginalMatrix.setPolyToPoly(pdfSpace, skiaSpace, 4));
2815 SkTraceMatrix(pdfContext.fOriginalMatrix, "Original matrix");
2819 pdfContext.fOriginalMatrix.postConcat(canvas->getTotalMatrix());
2821 pdfContext.fGraphicsState.fCTM = pdfContext.fOriginalMatrix;
2822 pdfContext.fGraphicsState.fContentStreamMatrix = pdfContext.fOriginalMatrix;
2823 pdfContext.fGraphicsState.fMatrixTm = pdfContext.fGraphicsState.fCTM;
2824 pdfContext.fGraphicsState.fMatrixTlm = pdfContext.fGraphicsState.fCTM;
2832 canvas->concat(pdfContext.fOriginalMatrix);
2834 doPage(&pdfContext, canvas, fPdfDoc->page(page));