diff options
Diffstat (limited to 'experimental/PdfViewer/SkPdfGraphicsState.cpp')
-rw-r--r-- | experimental/PdfViewer/SkPdfGraphicsState.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/experimental/PdfViewer/SkPdfGraphicsState.cpp b/experimental/PdfViewer/SkPdfGraphicsState.cpp new file mode 100644 index 0000000000..3e7f7a8d4e --- /dev/null +++ b/experimental/PdfViewer/SkPdfGraphicsState.cpp @@ -0,0 +1,43 @@ +#include "SkPdfGraphicsState.h" +#include "SkPdfNativeTokenizer.h" + +#include "SkDashPathEffect.h" + +SkPdfContext::SkPdfContext(SkPdfNativeDoc* doc) + : fPdfDoc(doc) + , fTmpPageAllocator(new SkPdfAllocator()) { +} + +SkPdfContext::~SkPdfContext() { + delete fTmpPageAllocator; +} + +void SkPdfGraphicsState::applyGraphicsState(SkPaint* paint, bool stroking) { + if (stroking) { + fStroking.applyGraphicsState(paint); + } else { + fNonStroking.applyGraphicsState(paint); + } + + // TODO(edisonn): get this from pdfContext->options, + // or pdfContext->addPaintOptions(&paint); + paint->setAntiAlias(true); + + // TODO(edisonn): miter, ... + if (stroking) { + paint->setStrokeWidth(SkDoubleToScalar(fLineWidth)); + // TODO(edisonn): perf, two sets of allocs, create SkDashPathEffect constr that takes ownership + // of the intervals + if (fDashArrayLength > 0) { + paint->setPathEffect(new SkDashPathEffect(fDashArray, fDashArrayLength, fDashPhase))->unref(); + } + } + + // TODO(edisonn): NYI multiple blend modes + if (fBlendModesLength == 1 && fBlendModes[0] != SkXfermode::kSrc_Mode) { + paint->setXfermodeMode(fBlendModes[0]); + } + + //paint->setStrokeMiter(SkDoubleToScalar(fMiterLimit)); + // TODO(edisonn): impl cap and join +} |