aboutsummaryrefslogtreecommitdiffhomepage
path: root/experimental/PdfViewer/SkPdfGraphicsState.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'experimental/PdfViewer/SkPdfGraphicsState.cpp')
-rw-r--r--experimental/PdfViewer/SkPdfGraphicsState.cpp43
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
+}