| Index: experimental/PdfViewer/SkPdfRenderer.cpp | 
| =================================================================== | 
| --- experimental/PdfViewer/SkPdfRenderer.cpp	(revision 10588) | 
| +++ experimental/PdfViewer/SkPdfRenderer.cpp	(working copy) | 
| @@ -236,11 +236,11 @@ | 
| bool ret = fTokenizer->readToken(token); | 
|  | 
| gReadOp++; | 
| - | 
| +    gLastOpKeyword++; | 
| #ifdef PDF_TRACE_DIFF_IN_PNG | 
| // TODO(edisonn): compare with old bitmap, and save only new bits are available, and save | 
| // the numbar and name of last operation, so the file name will reflect op that changed. | 
| -    if (hasVisualEffect(gLastKeyword)) {  // TODO(edisonn): and has dirty bits. | 
| +    if (gLastKeyword[0] && hasVisualEffect(gLastKeyword)) {  // TODO(edisonn): and has dirty bits. | 
| gDumpCanvas->flush(); | 
|  | 
| SkBitmap bitmap; | 
| @@ -311,6 +311,14 @@ | 
| out.appendf("/usr/local/google/home/edisonn/log_view2/step-%i-%s.png", gLastOpKeyword, gLastKeyword); | 
| SkImageEncoder::EncodeFile(out.c_str(), bitmap, SkImageEncoder::kPNG_Type, 100); | 
| } | 
| + | 
| +    if (ret && token->fType == kKeyword_TokenType && token->fKeyword && token->fKeywordLength > 0 && token->fKeywordLength < 100) { | 
| +        strncpy(gLastKeyword, token->fKeyword, token->fKeywordLength); | 
| +        gLastKeyword[token->fKeywordLength] = '\0'; | 
| +    } else { | 
| +        gLastKeyword[0] = '\0'; | 
| +    } | 
| + | 
| #endif | 
|  | 
| return ret; | 
| @@ -642,7 +650,6 @@ | 
| canvas->save(); | 
| canvas->setMatrix(pdfContext->fGraphicsState.fCTM); | 
|  | 
| -#if 1 | 
| SkScalar z = SkIntToScalar(0); | 
| SkScalar one = SkIntToScalar(1); | 
|  | 
| @@ -653,8 +660,17 @@ | 
| SkMatrix solveImageFlip = pdfContext->fGraphicsState.fCTM; | 
| solveImageFlip.preConcat(flip); | 
| canvas->setMatrix(solveImageFlip); | 
| -#endif | 
|  | 
| +#ifdef PDF_TRACE | 
| +    SkPoint final[4] = {SkPoint::Make(z, z), SkPoint::Make(one, z), SkPoint::Make(one, one), SkPoint::Make(z, one)}; | 
| +    solveImageFlip.mapPoints(final, 4); | 
| +    printf("IMAGE rect = "); | 
| +    for (int i = 0; i < 4; i++) { | 
| +        printf("(%f %f) ", SkScalarToDouble(final[i].x()), SkScalarToDouble(final[i].y())); | 
| +    } | 
| +    printf("\n"); | 
| +#endif  // PDF_TRACE | 
| + | 
| SkRect dst = SkRect::MakeXYWH(SkDoubleToScalar(0.0), SkDoubleToScalar(0.0), SkDoubleToScalar(1.0), SkDoubleToScalar(1.0)); | 
|  | 
| // TODO(edisonn): soft mask type? alpha/luminosity. | 
| @@ -746,6 +762,7 @@ | 
| } | 
|  | 
| SkTraceMatrix(pdfContext->fGraphicsState.fCTM, "Total matrix"); | 
| +    pdfContext->fGraphicsState.fContentStreamMatrix = pdfContext->fGraphicsState.fCTM; | 
|  | 
| canvas->setMatrix(pdfContext->fGraphicsState.fCTM); | 
|  | 
| @@ -803,18 +820,16 @@ | 
| pdfContext->fGraphicsState.fResources = skobj->Resources(pdfContext->fPdfDoc); | 
| } | 
|  | 
| -    SkTraceMatrix(pdfContext->fGraphicsState.fCTM, "Current matrix"); | 
| +    SkTraceMatrix(pdfContext->fGraphicsState.fContentStreamMatrix, "Current Content stream matrix"); | 
|  | 
| if (skobj->has_Matrix()) { | 
| -        pdfContext->fGraphicsState.fCTM.preConcat(skobj->Matrix(pdfContext->fPdfDoc)); | 
| -        pdfContext->fGraphicsState.fMatrixTm = pdfContext->fGraphicsState.fCTM; | 
| -        pdfContext->fGraphicsState.fMatrixTlm = pdfContext->fGraphicsState.fCTM; | 
| -        // TODO(edisonn) reset matrixTm and matricTlm also? | 
| +        pdfContext->fGraphicsState.fContentStreamMatrix.preConcat(skobj->Matrix(pdfContext->fPdfDoc)); | 
| } | 
|  | 
| -    SkTraceMatrix(pdfContext->fGraphicsState.fCTM, "Total matrix"); | 
| +    SkTraceMatrix(pdfContext->fGraphicsState.fContentStreamMatrix, "Total Content stream matrix"); | 
|  | 
| -    canvas->setMatrix(pdfContext->fGraphicsState.fCTM); | 
| +    canvas->setMatrix(pdfContext->fGraphicsState.fContentStreamMatrix); | 
| +    pdfContext->fGraphicsState.fCTM = pdfContext->fGraphicsState.fContentStreamMatrix; | 
|  | 
| SkRect bbox = skobj->BBox(pdfContext->fPdfDoc); | 
| canvas->clipRect(bbox, SkRegion::kIntersect_Op, true);  // TODO(edisonn): AA from settings. | 
| @@ -1323,17 +1338,17 @@ | 
| while (x < bounds.right()) { | 
| doXObject(pdfContext, canvas, pattern); | 
|  | 
| -                                pdfContext->fGraphicsState.fCTM.preTranslate(SkIntToScalar(xStep), SkIntToScalar(0)); | 
| +                                pdfContext->fGraphicsState.fContentStreamMatrix.preTranslate(SkIntToScalar(xStep), SkIntToScalar(0)); | 
| totalx += xStep; | 
| x += SkIntToScalar(xStep); | 
| } | 
| -                            pdfContext->fGraphicsState.fCTM.preTranslate(SkIntToScalar(-totalx), SkIntToScalar(0)); | 
| +                            pdfContext->fGraphicsState.fContentStreamMatrix.preTranslate(SkIntToScalar(-totalx), SkIntToScalar(0)); | 
|  | 
| -                            pdfContext->fGraphicsState.fCTM.preTranslate(SkIntToScalar(0), SkIntToScalar(-yStep)); | 
| +                            pdfContext->fGraphicsState.fContentStreamMatrix.preTranslate(SkIntToScalar(0), SkIntToScalar(-yStep)); | 
| totaly += yStep; | 
| y += SkIntToScalar(yStep); | 
| } | 
| -                        pdfContext->fGraphicsState.fCTM.preTranslate(SkIntToScalar(0), SkIntToScalar(totaly)); | 
| +                        pdfContext->fGraphicsState.fContentStreamMatrix.preTranslate(SkIntToScalar(0), SkIntToScalar(totaly)); | 
| } | 
| } | 
|  | 
| @@ -2534,8 +2549,8 @@ | 
| SkAssertResult(pdfContext.fOriginalMatrix.setPolyToPoly(pdfSpace, skiaSpace, 4)); | 
| SkTraceMatrix(pdfContext.fOriginalMatrix, "Original matrix"); | 
|  | 
| - | 
| pdfContext.fGraphicsState.fCTM = pdfContext.fOriginalMatrix; | 
| +    pdfContext.fGraphicsState.fContentStreamMatrix = pdfContext.fOriginalMatrix; | 
| pdfContext.fGraphicsState.fMatrixTm = pdfContext.fGraphicsState.fCTM; | 
| pdfContext.fGraphicsState.fMatrixTlm = pdfContext.fGraphicsState.fCTM; | 
|  | 
|  |