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

Unified Diff: experimental/PdfViewer/SkPdfRenderer.cpp

Issue 21252003: pdfviewer: more prerequired work to have examples working for transparency work items. (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 | « no previous file | experimental/PdfViewer/generate_code.py » ('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 10433)
+++ experimental/PdfViewer/SkPdfRenderer.cpp (working copy)
@@ -1526,117 +1526,86 @@
return kIgnoreError_PdfResult;
}
-//lineWidth w Set the line width in the graphics state (see “Line Width” on page 152).
-static PdfResult PdfOp_w(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
- double lineWidth = pdfContext->fObjectStack.top()->numberValue(); pdfContext->fObjectStack.pop();
- pdfContext->fGraphicsState.fLineWidth = lineWidth;
- return kOK_PdfResult;
-}
-
-//lineCap J Set the line cap style in the graphics state (see “Line Cap Style” on page 153).
-static PdfResult PdfOp_J(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
- pdfContext->fObjectStack.pop();
- //double lineCap = pdfContext->fObjectStack.top()->numberValue(); pdfContext->fObjectStack.pop();
-
- return kNYI_PdfResult;
-}
-
-//lineJoin j Set the line join style in the graphics state (see “Line Join Style” on page 153).
-static PdfResult PdfOp_j(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
- pdfContext->fObjectStack.pop();
- //double lineJoin = pdfContext->fObjectStack.top()->numberValue(); pdfContext->fObjectStack.pop();
-
- return kNYI_PdfResult;
-}
-
-//miterLimit M Set the miter limit in the graphics state (see “Miter Limit” on page 153).
-static PdfResult PdfOp_M(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
- pdfContext->fObjectStack.pop();
- //double miterLimit = pdfContext->fObjectStack.top()->numberValue(); pdfContext->fObjectStack.pop();
-
- return kNYI_PdfResult;
-}
-
-//dashArray dashPhase d Set the line dash pattern in the graphics state (see “Line Dash Pattern” on
-//page 155).
-static PdfResult PdfOp_d(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
- pdfContext->fObjectStack.pop();
- pdfContext->fObjectStack.pop();
-
- return kNYI_PdfResult;
-}
-
-//intent ri (PDF 1.1) Set the color rendering intent in the graphics state (see “Rendering Intents” on page 197).
-static PdfResult PdfOp_ri(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
- pdfContext->fObjectStack.pop();
-
- return kNYI_PdfResult;
-}
-
-//flatness i Set the flatness tolerance in the graphics state (see Section 6.5.1, “Flatness
-//Tolerance”). flatness is a number in the range 0 to 100; a value of 0 speci-
-//fies the output device’s default flatness tolerance.
-static PdfResult PdfOp_i(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
- pdfContext->fObjectStack.pop();
-
- return kNYI_PdfResult;
-}
-
-
// TODO(edisonn): security review here, make sure all parameters are valid, and safe.
-void skpdfGraphicsStateApply_ca(PdfContext* pdfContext, double ca) {
+PdfResult skpdfGraphicsStateApply_ca(PdfContext* pdfContext, double ca) {
pdfContext->fGraphicsState.fNonStroking.fOpacity = ca;
+ return kOK_PdfResult;
}
-void skpdfGraphicsStateApply_CA(PdfContext* pdfContext, double CA) {
+PdfResult skpdfGraphicsStateApply_CA(PdfContext* pdfContext, double CA) {
pdfContext->fGraphicsState.fStroking.fOpacity = CA;
+ return kOK_PdfResult;
}
-void skpdfGraphicsStateApplyLW(PdfContext* pdfContext, double lineWidth) {
+PdfResult skpdfGraphicsStateApplyLW(PdfContext* pdfContext, double lineWidth) {
pdfContext->fGraphicsState.fLineWidth = lineWidth;
+ return kOK_PdfResult;
}
-void skpdfGraphicsStateApplyLC(PdfContext* pdfContext, int64_t lineCap) {
+PdfResult skpdfGraphicsStateApplyLC(PdfContext* pdfContext, int64_t lineCap) {
pdfContext->fGraphicsState.fLineCap = (int)lineCap;
+ return kOK_PdfResult;
}
-void skpdfGraphicsStateApplyLJ(PdfContext* pdfContext, int64_t lineJoin) {
+PdfResult skpdfGraphicsStateApplyLJ(PdfContext* pdfContext, int64_t lineJoin) {
pdfContext->fGraphicsState.fLineJoin = (int)lineJoin;
+ return kOK_PdfResult;
}
-void skpdfGraphicsStateApplyML(PdfContext* pdfContext, double miterLimit) {
+PdfResult skpdfGraphicsStateApplyML(PdfContext* pdfContext, double miterLimit) {
pdfContext->fGraphicsState.fMiterLimit = miterLimit;
+ return kOK_PdfResult;
}
-void skpdfGraphicsStateApplyD(PdfContext* pdfContext, SkPdfArray* dash) {
- // TODO(edisonn): verify input
- if (!dash || dash->isArray() || dash->size() != 2 || !dash->objAtAIndex(0)->isArray() || !dash->objAtAIndex(1)->isNumber()) {
- // TODO(edisonn): report error/warning
- return;
- }
+// TODO(edisonn): implement all rules, as of now 3) and 5) and 6) do not seem suported by skia, but I am not sure
+/*
+1) [ ] 0 No dash; solid, unbroken lines
+2) [3] 0 3 units on, 3 units off, …
+3) [2] 1 1 on, 2 off, 2 on, 2 off, …
+4) [2 1] 0 2 on, 1 off, 2 on, 1 off, …
+5) [3 5] 6 2 off, 3 on, 5 off, 3 on, 5 off, …
+6) [2 3] 11 1 on, 3 off, 2 on, 3 off, 2 on, …
+ */
- SkPdfArray* intervals = (SkPdfArray*)dash->objAtAIndex(0);
+PdfResult skpdfGraphicsStateApplyD(PdfContext* pdfContext, SkPdfArray* intervals, SkPdfObject* phase) {
int cnt = intervals->size();
if (cnt >= 256) {
// TODO(edisonn): report error/warning, unsuported;
// TODO(edisonn): alloc memory
- return;
+ return kIgnoreError_PdfResult;
}
for (int i = 0; i < cnt; i++) {
if (!intervals->objAtAIndex(i)->isNumber()) {
// TODO(edisonn): report error/warning
- return;
+ return kIgnoreError_PdfResult;
}
}
- pdfContext->fGraphicsState.fDashPhase = dash->objAtAIndex(1)->scalarValue();
pdfContext->fGraphicsState.fDashArrayLength = cnt;
+ double total = 0;
for (int i = 0 ; i < cnt; i++) {
pdfContext->fGraphicsState.fDashArray[i] = intervals->objAtAIndex(i)->scalarValue();
+ total += pdfContext->fGraphicsState.fDashArray[i];
}
+ pdfContext->fGraphicsState.fDashPhase = phase->scalarValue();
+ if (pdfContext->fGraphicsState.fDashPhase == 0) {
+ // other rules, changes?
+ pdfContext->fGraphicsState.fDashPhase = total;
+ }
+
+ return kOK_PdfResult;
}
+PdfResult skpdfGraphicsStateApplyD(PdfContext* pdfContext, SkPdfArray* dash) {
+ // TODO(edisonn): verify input
+ if (!dash || dash->isArray() || dash->size() != 2 || !dash->objAtAIndex(0)->isArray() || !dash->objAtAIndex(1)->isNumber()) {
+ // TODO(edisonn): report error/warning
+ return kIgnoreError_PdfResult;
+ }
+ return skpdfGraphicsStateApplyD(pdfContext, (SkPdfArray*)dash->objAtAIndex(0), dash->objAtAIndex(1));
+}
+
void skpdfGraphicsStateApplyFont(PdfContext* pdfContext, SkPdfArray* fontAndSize) {
if (!fontAndSize || fontAndSize->isArray() || fontAndSize->size() != 2 || !fontAndSize->objAtAIndex(0)->isName() || !fontAndSize->objAtAIndex(1)->isNumber()) {
// TODO(edisonn): report error/warning
@@ -1645,6 +1614,60 @@
skpdfGraphicsStateApplyFontCore(pdfContext, fontAndSize->objAtAIndex(0), fontAndSize->objAtAIndex(1)->numberValue());
}
+
+//lineWidth w Set the line width in the graphics state (see “Line Width” on page 152).
+static PdfResult PdfOp_w(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+ double lw = pdfContext->fObjectStack.top()->numberValue(); pdfContext->fObjectStack.pop();
+ return skpdfGraphicsStateApplyLW(pdfContext, lw);
+}
+
+//lineCap J Set the line cap style in the graphics state (see “Line Cap Style” on page 153).
+static PdfResult PdfOp_J(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+ int64_t lc = pdfContext->fObjectStack.top()->numberValue(); pdfContext->fObjectStack.pop();
+ return skpdfGraphicsStateApplyLC(pdfContext, lc);
+}
+
+//lineJoin j Set the line join style in the graphics state (see “Line Join Style” on page 153).
+static PdfResult PdfOp_j(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+ double lj = pdfContext->fObjectStack.top()->numberValue(); pdfContext->fObjectStack.pop();
+ return skpdfGraphicsStateApplyLJ(pdfContext, lj);
+}
+
+//miterLimit M Set the miter limit in the graphics state (see “Miter Limit” on page 153).
+static PdfResult PdfOp_M(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+ double ml = pdfContext->fObjectStack.top()->numberValue(); pdfContext->fObjectStack.pop();
+ return skpdfGraphicsStateApplyML(pdfContext, ml);
+}
+
+//dashArray dashPhase d Set the line dash pattern in the graphics state (see “Line Dash Pattern” on
+//page 155).
+static PdfResult PdfOp_d(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+ SkPdfObject* phase = pdfContext->fObjectStack.top(); pdfContext->fObjectStack.pop();
+ SkPdfObject* array = pdfContext->fObjectStack.top(); pdfContext->fObjectStack.pop();
+
+ if (!array->isArray()) {
+ return kIgnoreError_PdfResult;
+ }
+
+ return skpdfGraphicsStateApplyD(pdfContext, (SkPdfArray*)array, phase);
+}
+
+//intent ri (PDF 1.1) Set the color rendering intent in the graphics state (see “Rendering Intents” on page 197).
+static PdfResult PdfOp_ri(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+ pdfContext->fObjectStack.pop();
+
+ return kNYI_PdfResult;
+}
+
+//flatness i Set the flatness tolerance in the graphics state (see Section 6.5.1, “Flatness
+//Tolerance”). flatness is a number in the range 0 to 100; a value of 0 speci-
+//fies the output device’s default flatness tolerance.
+static PdfResult PdfOp_i(PdfContext* pdfContext, SkCanvas* canvas, PdfTokenLooper** looper) {
+ pdfContext->fObjectStack.pop();
+
+ return kNYI_PdfResult;
+}
+
SkTDict<SkXfermode::Mode> gPdfBlendModes(20);
class InitBlendModes {
« no previous file with comments | « no previous file | experimental/PdfViewer/generate_code.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698