#include "SkPdfBasics.h" #include "SkPdfNativeTokenizer.h" #include "SkDashPathEffect.h" PdfContext::PdfContext(SkNativeParsedPDF* doc) : fPdfDoc(doc) , fTmpPageAllocator(new SkPdfAllocator()) { } PdfContext::~PdfContext() { 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 }