pdfviewer: gs operator implementation: dashing and font

Review URL: https://codereview.chromium.org/20810002

git-svn-id: http://skia.googlecode.com/svn/trunk@10403 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/PdfViewer/SkPdfBasics.cpp b/experimental/PdfViewer/SkPdfBasics.cpp
index e689b14..dc320a5 100644
--- a/experimental/PdfViewer/SkPdfBasics.cpp
+++ b/experimental/PdfViewer/SkPdfBasics.cpp
@@ -1,6 +1,8 @@
 #include "SkPdfBasics.h"
 #include "SkPdfNativeTokenizer.h"
 
+#include "SkDashPathEffect.h"
+
 PdfContext::PdfContext(SkNativeParsedPDF* doc)
     : fPdfDoc(doc)
     , fTmpPageAllocator(new SkPdfAllocator()) {
@@ -9,3 +11,25 @@
 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 && fDashPhase > 0) {
+            paint->setPathEffect(new SkDashPathEffect(fDashArray, fDashArrayLength, fDashPhase))->unref();
+        }
+    }
+}