Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Unified Diff: experimental/PdfViewer/SkPdfRenderer.cpp

Issue 21096006: pdfviewer: load files with missing xref (we need in order to help with testing, as most good pdfx i… (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « experimental/PdfViewer/SkPdfBasics.h ('k') | experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: experimental/PdfViewer/SkPdfRenderer.cpp
===================================================================
--- experimental/PdfViewer/SkPdfRenderer.cpp (revision 10419)
+++ experimental/PdfViewer/SkPdfRenderer.cpp (working copy)
@@ -615,6 +615,7 @@
SkRect dst = SkRect::MakeXYWH(SkDoubleToScalar(0.0), SkDoubleToScalar(0.0), SkDoubleToScalar(1.0), SkDoubleToScalar(1.0));
+ // TODO(edisonn): soft mask type? alpha/luminosity.
if (sMask.empty()) {
canvas->drawBitmapRect(image, dst, NULL);
} else {
@@ -622,6 +623,7 @@
canvas->drawBitmapRect(image, dst, NULL);
SkPaint xfer;
pdfContext->fGraphicsState.applyGraphicsState(&xfer, false);
+ // TODO(edisonn): is the blend mode specified already implicitly/explicitly in pdf?
xfer.setXfermodeMode(SkXfermode::kSrcOut_Mode); // SkXfermode::kSdtOut_Mode
canvas->drawBitmapRect(sMask, dst, &xfer);
canvas->restore();
@@ -632,15 +634,15 @@
return kPartial_PdfResult;
}
-
-
-
static PdfResult doXObject_Form(PdfContext* pdfContext, SkCanvas* canvas, SkPdfType1FormDictionary* skobj) {
if (!skobj || !skobj->hasStream()) {
return kIgnoreError_PdfResult;
}
PdfOp_q(pdfContext, canvas, NULL);
+
+
+
canvas->save();
@@ -841,7 +843,12 @@
}
static PdfResult PdfOp_Td(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+#ifdef PDF_TRACE
+ printf("stack size = %i\n", (int)pdfContext->fObjectStack.size());
+#endif
double ty = pdfContext->fObjectStack.top()->numberValue(); pdfContext->fObjectStack.pop();
+ SkPdfObject* obj = pdfContext->fObjectStack.top();
+ obj = obj;
double tx = pdfContext->fObjectStack.top()->numberValue(); pdfContext->fObjectStack.pop();
double array[6] = {1, 0, 0, 1, tx, ty};
@@ -1665,8 +1672,7 @@
void skpdfGraphicsStateApplySMask_dict(PdfContext* pdfContext, SkPdfDictionary* sMask) {
// TODO(edisonn): verify input
if (pdfContext->fPdfDoc->mapper()->mapSoftMaskDictionary(sMask)) {
- //SkPdfSoftMaskDictionary* smd = (SkPdfSoftMaskDictionary*)sMask;
- // TODO(edisonn): load soft mask
+ pdfContext->fGraphicsState.fSoftMaskDictionary = (SkPdfSoftMaskDictionary*)sMask;
} else if (pdfContext->fPdfDoc->mapper()->mapSoftMaskImageDictionary(sMask)) {
SkPdfSoftMaskImageDictionary* smid = (SkPdfSoftMaskImageDictionary*)sMask;
pdfContext->fGraphicsState.fSMask = getImageFromObject(pdfContext, smid, true);
@@ -1676,6 +1682,12 @@
}
void skpdfGraphicsStateApplySMask_name(PdfContext* pdfContext, const std::string& sMask) {
+ if (sMask == "None") {
+ pdfContext->fGraphicsState.fSoftMaskDictionary = NULL;
+ pdfContext->fGraphicsState.fSMask = SkBitmap();
+ return;
+ }
+
//Next, get the ExtGState Dictionary from the Resource Dictionary:
SkPdfDictionary* extGStateDictionary = pdfContext->fGraphicsState.fResources->ExtGState(pdfContext->fPdfDoc);
@@ -1692,6 +1704,10 @@
// TODO (edisonn): report error/warning
return;
}
+
+ pdfContext->fGraphicsState.fSoftMaskDictionary = NULL;
+ pdfContext->fGraphicsState.fSMask = SkBitmap();
+
skpdfGraphicsStateApplySMask_dict(pdfContext, obj->asDictionary());
}
@@ -2051,22 +2067,18 @@
}
PdfResult PdfMainLooper::consumeToken(PdfToken& token) {
- char keyword[256];
-
if (token.fType == kKeyword_TokenType && token.fKeywordLength < 256)
{
- strncpy(keyword, token.fKeyword, token.fKeywordLength);
- keyword[token.fKeywordLength] = '\0';
// TODO(edisonn): log trace flag (verbose, error, info, warning, ...)
PdfOperatorRenderer pdfOperatorRenderer = NULL;
- if (gPdfOps.find(keyword, &pdfOperatorRenderer) && pdfOperatorRenderer) {
+ if (gPdfOps.find(token.fKeyword, token.fKeywordLength, &pdfOperatorRenderer) && pdfOperatorRenderer) {
// caller, main work is done by pdfOperatorRenderer(...)
PdfTokenLooper* childLooper = NULL;
PdfResult result = pdfOperatorRenderer(fPdfContext, fCanvas, &childLooper);
int cnt = 0;
- gRenderStats[result].find(keyword, &cnt);
- gRenderStats[result].set(keyword, cnt + 1);
+ gRenderStats[result].find(token.fKeyword, token.fKeywordLength, &cnt);
+ gRenderStats[result].set(token.fKeyword, token.fKeywordLength, cnt + 1);
if (childLooper) {
childLooper->setUp(this);
@@ -2075,8 +2087,8 @@
}
} else {
int cnt = 0;
- gRenderStats[kUnsupported_PdfResult].find(keyword, &cnt);
- gRenderStats[kUnsupported_PdfResult].set(keyword, cnt + 1);
+ gRenderStats[kUnsupported_PdfResult].find(token.fKeyword, token.fKeywordLength, &cnt);
+ gRenderStats[kUnsupported_PdfResult].set(token.fKeyword, token.fKeywordLength, cnt + 1);
}
}
else if (token.fType == kObject_TokenType)
« no previous file with comments | « experimental/PdfViewer/SkPdfBasics.h ('k') | experimental/PdfViewer/pdfparser/native/SkNativeParsedPDF.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698