blob: 498a6a71e238a7fca56cb3726bf8b2bb7850eea2 [file] [log] [blame]
edisonn@google.comcf2cfa12013-08-21 16:31:37 +00001/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
edisonn@google.com3aa35552013-08-14 18:26:20 +00008#include "SkPdfGraphicsState.h"
edisonn@google.com2ccc3af2013-07-23 17:43:18 +00009#include "SkPdfNativeTokenizer.h"
10
edisonn@google.coma0cefa12013-07-28 18:34:14 +000011#include "SkDashPathEffect.h"
12
edisonn@google.com3aa35552013-08-14 18:26:20 +000013SkPdfContext::SkPdfContext(SkPdfNativeDoc* doc)
edisonn@google.com2ccc3af2013-07-23 17:43:18 +000014 : fPdfDoc(doc)
15 , fTmpPageAllocator(new SkPdfAllocator()) {
16}
17
edisonn@google.com3aa35552013-08-14 18:26:20 +000018SkPdfContext::~SkPdfContext() {
edisonn@google.com2ccc3af2013-07-23 17:43:18 +000019 delete fTmpPageAllocator;
20}
edisonn@google.coma0cefa12013-07-28 18:34:14 +000021
22void SkPdfGraphicsState::applyGraphicsState(SkPaint* paint, bool stroking) {
23 if (stroking) {
24 fStroking.applyGraphicsState(paint);
25 } else {
26 fNonStroking.applyGraphicsState(paint);
27 }
28
29 // TODO(edisonn): get this from pdfContext->options,
30 // or pdfContext->addPaintOptions(&paint);
31 paint->setAntiAlias(true);
32
33 // TODO(edisonn): miter, ...
34 if (stroking) {
35 paint->setStrokeWidth(SkDoubleToScalar(fLineWidth));
36 // TODO(edisonn): perf, two sets of allocs, create SkDashPathEffect constr that takes ownership
37 // of the intervals
edisonn@google.comf111a4b2013-07-31 18:22:36 +000038 if (fDashArrayLength > 0) {
edisonn@google.coma0cefa12013-07-28 18:34:14 +000039 paint->setPathEffect(new SkDashPathEffect(fDashArray, fDashArrayLength, fDashPhase))->unref();
40 }
41 }
edisonn@google.comf111a4b2013-07-31 18:22:36 +000042
43 // TODO(edisonn): NYI multiple blend modes
44 if (fBlendModesLength == 1 && fBlendModes[0] != SkXfermode::kSrc_Mode) {
45 paint->setXfermodeMode(fBlendModes[0]);
46 }
edisonn@google.com9a43c182013-08-01 20:06:42 +000047
48 //paint->setStrokeMiter(SkDoubleToScalar(fMiterLimit));
49 // TODO(edisonn): impl cap and join
edisonn@google.coma0cefa12013-07-28 18:34:14 +000050}