2013-07-23 17:43:18 +00:00
|
|
|
#include "SkPdfBasics.h"
|
|
|
|
#include "SkPdfNativeTokenizer.h"
|
|
|
|
|
2013-07-28 18:34:14 +00:00
|
|
|
#include "SkDashPathEffect.h"
|
|
|
|
|
2013-07-23 17:43:18 +00:00
|
|
|
PdfContext::PdfContext(SkNativeParsedPDF* doc)
|
|
|
|
: fPdfDoc(doc)
|
|
|
|
, fTmpPageAllocator(new SkPdfAllocator()) {
|
|
|
|
}
|
|
|
|
|
|
|
|
PdfContext::~PdfContext() {
|
|
|
|
delete fTmpPageAllocator;
|
|
|
|
}
|
2013-07-28 18:34:14 +00:00
|
|
|
|
|
|
|
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
|
2013-07-31 18:22:36 +00:00
|
|
|
if (fDashArrayLength > 0) {
|
2013-07-28 18:34:14 +00:00
|
|
|
paint->setPathEffect(new SkDashPathEffect(fDashArray, fDashArrayLength, fDashPhase))->unref();
|
|
|
|
}
|
|
|
|
}
|
2013-07-31 18:22:36 +00:00
|
|
|
|
|
|
|
// TODO(edisonn): NYI multiple blend modes
|
|
|
|
if (fBlendModesLength == 1 && fBlendModes[0] != SkXfermode::kSrc_Mode) {
|
|
|
|
paint->setXfermodeMode(fBlendModes[0]);
|
|
|
|
}
|
2013-08-01 20:06:42 +00:00
|
|
|
|
|
|
|
//paint->setStrokeMiter(SkDoubleToScalar(fMiterLimit));
|
|
|
|
// TODO(edisonn): impl cap and join
|
2013-07-28 18:34:14 +00:00
|
|
|
}
|