Index: src/pdf/SkPDFShader.cpp |
diff --git a/src/pdf/SkPDFShader.cpp b/src/pdf/SkPDFShader.cpp |
index f5e5b1e439186517275f219032579a0159ade491..a9f275422637f6476e967dc128e4ccafe9dd8740 100644 |
--- a/src/pdf/SkPDFShader.cpp |
+++ b/src/pdf/SkPDFShader.cpp |
@@ -12,6 +12,7 @@ |
#include "SkData.h" |
#include "SkPDFCanon.h" |
#include "SkPDFDevice.h" |
+#include "SkPDFDocument.h" |
#include "SkPDFFormXObject.h" |
#include "SkPDFGraphicState.h" |
#include "SkPDFResourceDict.h" |
@@ -485,10 +486,11 @@ SkPDFImageShader::~SkPDFImageShader() {} |
//////////////////////////////////////////////////////////////////////////////// |
static SkPDFObject* get_pdf_shader_by_state( |
- SkPDFCanon* canon, |
+ SkPDFDocument* doc, |
SkScalar dpi, |
SkAutoTDelete<SkPDFShader::State>* autoState) { |
const SkPDFShader::State& state = **autoState; |
+ SkPDFCanon* canon = doc->canon(); |
if (state.fType == SkShader::kNone_GradientType && state.fImage.isNull()) { |
// TODO(vandebo) This drops SKComposeShader on the floor. We could |
// handle compose shader by pulling things up to a layer, drawing with |
@@ -498,11 +500,11 @@ static SkPDFObject* get_pdf_shader_by_state( |
} else if (state.fType == SkShader::kNone_GradientType) { |
SkPDFObject* shader = canon->findImageShader(state); |
return shader ? SkRef(shader) |
- : SkPDFImageShader::Create(canon, dpi, autoState); |
+ : SkPDFImageShader::Create(doc, dpi, autoState); |
} else if (state.GradientHasAlpha()) { |
SkPDFObject* shader = canon->findAlphaShader(state); |
return shader ? SkRef(shader) |
- : SkPDFAlphaFunctionShader::Create(canon, dpi, autoState); |
+ : SkPDFAlphaFunctionShader::Create(doc, dpi, autoState); |
} else { |
SkPDFObject* shader = canon->findFunctionShader(state); |
return shader ? SkRef(shader) |
@@ -511,14 +513,14 @@ static SkPDFObject* get_pdf_shader_by_state( |
} |
// static |
-SkPDFObject* SkPDFShader::GetPDFShader(SkPDFCanon* canon, |
+SkPDFObject* SkPDFShader::GetPDFShader(SkPDFDocument* doc, |
SkScalar dpi, |
const SkShader& shader, |
const SkMatrix& matrix, |
const SkIRect& surfaceBBox, |
SkScalar rasterScale) { |
SkAutoTDelete<SkPDFShader::State> state(new State(shader, matrix, surfaceBBox, rasterScale)); |
- return get_pdf_shader_by_state(canon, dpi, &state); |
+ return get_pdf_shader_by_state(doc, dpi, &state); |
} |
static sk_sp<SkPDFDict> get_gradient_resource_dict( |
@@ -579,14 +581,14 @@ static SkStream* create_pattern_fill_content(int gsIndex, SkRect& bounds) { |
* luminosity mode. The shader pattern extends to the bbox. |
*/ |
static sk_sp<SkPDFObject> create_smask_graphic_state( |
- SkPDFCanon* canon, SkScalar dpi, const SkPDFShader::State& state) { |
+ SkPDFDocument* doc, SkScalar dpi, const SkPDFShader::State& state) { |
SkRect bbox; |
bbox.set(state.fBBox); |
SkAutoTDelete<SkPDFShader::State> alphaToLuminosityState( |
state.CreateAlphaToLuminosityState()); |
sk_sp<SkPDFObject> luminosityShader( |
- get_pdf_shader_by_state(canon, dpi, &alphaToLuminosityState)); |
+ get_pdf_shader_by_state(doc, dpi, &alphaToLuminosityState)); |
SkAutoTDelete<SkStream> alphaStream(create_pattern_fill_content(-1, bbox)); |
@@ -598,11 +600,11 @@ static sk_sp<SkPDFObject> create_smask_graphic_state( |
return SkPDFGraphicState::GetSMaskGraphicState( |
alphaMask.get(), false, |
- SkPDFGraphicState::kLuminosity_SMaskMode, canon); |
+ SkPDFGraphicState::kLuminosity_SMaskMode, doc->canon()); |
} |
SkPDFAlphaFunctionShader* SkPDFAlphaFunctionShader::Create( |
- SkPDFCanon* canon, |
+ SkPDFDocument* doc, |
SkScalar dpi, |
SkAutoTDelete<SkPDFShader::State>* autoState) { |
const SkPDFShader::State& state = **autoState; |
@@ -612,14 +614,14 @@ SkPDFAlphaFunctionShader* SkPDFAlphaFunctionShader::Create( |
SkAutoTDelete<SkPDFShader::State> opaqueState(state.CreateOpaqueState()); |
sk_sp<SkPDFObject> colorShader( |
- get_pdf_shader_by_state(canon, dpi, &opaqueState)); |
+ get_pdf_shader_by_state(doc, dpi, &opaqueState)); |
if (!colorShader) { |
return nullptr; |
} |
// Create resource dict with alpha graphics state as G0 and |
// pattern shader as P0, then write content stream. |
- auto alphaGs = create_smask_graphic_state(canon, dpi, state); |
+ auto alphaGs = create_smask_graphic_state(doc, dpi, state); |
SkPDFAlphaFunctionShader* alphaFunctionShader = |
new SkPDFAlphaFunctionShader(autoState->release()); |
@@ -633,7 +635,7 @@ SkPDFAlphaFunctionShader* SkPDFAlphaFunctionShader::Create( |
populate_tiling_pattern_dict(alphaFunctionShader, bbox, resourceDict.get(), |
SkMatrix::I()); |
- canon->addAlphaShader(alphaFunctionShader); |
+ doc->canon()->addAlphaShader(alphaFunctionShader); |
return alphaFunctionShader; |
} |
@@ -820,7 +822,7 @@ SkPDFFunctionShader* SkPDFFunctionShader::Create( |
} |
SkPDFImageShader* SkPDFImageShader::Create( |
- SkPDFCanon* canon, |
+ SkPDFDocument* doc, |
SkScalar dpi, |
SkAutoTDelete<SkPDFShader::State>* autoState) { |
const SkPDFShader::State& state = **autoState; |
@@ -860,7 +862,7 @@ SkPDFImageShader* SkPDFImageShader::Create( |
SkISize size = SkISize::Make(SkScalarRoundToInt(deviceBounds.width()), |
SkScalarRoundToInt(deviceBounds.height())); |
sk_sp<SkPDFDevice> patternDevice( |
- SkPDFDevice::CreateUnflipped(size, dpi, canon)); |
+ SkPDFDevice::CreateUnflipped(size, dpi, doc)); |
SkCanvas canvas(patternDevice.get()); |
SkRect patternBBox; |
@@ -1030,7 +1032,7 @@ SkPDFImageShader* SkPDFImageShader::Create( |
imageShader->fShaderState->fImage.unlockPixels(); |
- canon->addImageShader(imageShader); |
+ doc->canon()->addImageShader(imageShader); |
return imageShader; |
} |