[PDF] Fix PDF code to not crash on SkComposeShader.
Review URL: https://codereview.appspot.com/6354053 git-svn-id: http://skia.googlecode.com/svn/trunk@4400 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
23579275c7
commit
da6c569334
@ -1401,6 +1401,8 @@ void SkPDFDevice::populateGraphicStateEntryFromPaint(
|
||||
entry->fMatrix = matrix;
|
||||
entry->fClipStack = clipStack;
|
||||
entry->fClipRegion = clipRegion;
|
||||
entry->fColor = SkColorSetA(paint.getColor(), 0xFF);
|
||||
entry->fShaderIndex = -1;
|
||||
|
||||
// PDF treats a shader as a color, so we only set one or the other.
|
||||
SkRefPtr<SkPDFObject> pdfShader;
|
||||
@ -1439,11 +1441,6 @@ void SkPDFDevice::populateGraphicStateEntryFromPaint(
|
||||
} else {
|
||||
// A color shader is treated as an invalid shader so we don't have
|
||||
// to set a shader just for a color.
|
||||
entry->fShaderIndex = -1;
|
||||
entry->fColor = 0;
|
||||
color = 0;
|
||||
|
||||
// Check for a color shader.
|
||||
SkShader::GradientInfo gradientInfo;
|
||||
SkColor gradientColor;
|
||||
gradientInfo.fColors = &gradientColor;
|
||||
@ -1455,10 +1452,6 @@ void SkPDFDevice::populateGraphicStateEntryFromPaint(
|
||||
color = gradientColor;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
entry->fShaderIndex = -1;
|
||||
entry->fColor = SkColorSetA(paint.getColor(), 0xFF);
|
||||
color = paint.getColor();
|
||||
}
|
||||
|
||||
SkRefPtr<SkPDFGraphicState> newGraphicState;
|
||||
|
@ -362,6 +362,14 @@ SkPDFObject* SkPDFShader::GetPDFShader(const SkShader& shader,
|
||||
SkPDFObject* result;
|
||||
SkAutoMutexAcquire lock(CanonicalShadersMutex());
|
||||
SkAutoTDelete<State> shaderState(new State(shader, matrix, surfaceBBox));
|
||||
if (shaderState.get()->fType == SkShader::kNone_GradientType &&
|
||||
shaderState.get()->fImage.isNull()) {
|
||||
// TODO(vandebo) This drops SKComposeShader on the floor. We could
|
||||
// handle compose shader by pulling things up to a layer, drawing with
|
||||
// the first shader, applying the xfer mode and drawing again with the
|
||||
// second shader, then applying the layer to the original drawing.
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ShaderCanonicalEntry entry(NULL, shaderState.get());
|
||||
int index = CanonicalShaders().find(entry);
|
||||
|
Loading…
Reference in New Issue
Block a user