Revert "[PDF] Handle failures of matrix inversion" while I investigate fixed point failures.

This reverts commit r3711

Review URL: https://codereview.appspot.com/6050049

git-svn-id: http://skia.googlecode.com/svn/trunk@3712 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
vandebo@chromium.org 2012-04-17 20:37:37 +00:00
parent ebad2d9e20
commit 8aa66b6f76
4 changed files with 12 additions and 31 deletions

View File

@ -491,8 +491,6 @@ static inline SkBitmap makeContentBitmap(const SkISize& contentSize,
drawingSize.set(SkIntToScalar(contentSize.fWidth), drawingSize.set(SkIntToScalar(contentSize.fWidth),
SkIntToScalar(contentSize.fHeight)); SkIntToScalar(contentSize.fHeight));
if (!initialTransform->invert(&inverse)) { if (!initialTransform->invert(&inverse)) {
// This shouldn't happen, initial transform should be invertible.
SkASSERT(false);
inverse.reset(); inverse.reset();
} }
inverse.mapVectors(&drawingSize, 1); inverse.mapVectors(&drawingSize, 1);
@ -605,7 +603,7 @@ void SkPDFDevice::internalDrawPaint(const SkPaint& paint,
totalTransform.preConcat(contentEntry->fState.fMatrix); totalTransform.preConcat(contentEntry->fState.fMatrix);
SkMatrix inverse; SkMatrix inverse;
if (!totalTransform.invert(&inverse)) { if (!totalTransform.invert(&inverse)) {
return; inverse.reset();
} }
inverse.mapRect(&bbox); inverse.mapRect(&bbox);

View File

@ -37,8 +37,6 @@ SkPDFFormXObject::SkPDFFormXObject(SkPDFDevice* device) {
if (!device->initialTransform().isIdentity()) { if (!device->initialTransform().isIdentity()) {
SkMatrix inverse; SkMatrix inverse;
if (!device->initialTransform().invert(&inverse)) { if (!device->initialTransform().invert(&inverse)) {
// The initial transform should be invertible.
SkASSERT(false);
inverse.reset(); inverse.reset();
} }
insert("Matrix", SkPDFUtils::MatrixToArray(inverse))->unref(); insert("Matrix", SkPDFUtils::MatrixToArray(inverse))->unref();

View File

@ -21,13 +21,12 @@
#include "SkThread.h" #include "SkThread.h"
#include "SkTypes.h" #include "SkTypes.h"
static bool transformBBox(const SkMatrix& matrix, SkRect* bbox) { static void transformBBox(const SkMatrix& matrix, SkRect* bbox) {
SkMatrix inverse; SkMatrix inverse;
if (!matrix.invert(&inverse)) { if (!matrix.invert(&inverse)) {
return false; inverse.reset();
} }
inverse.mapRect(bbox); inverse.mapRect(bbox);
return true;
} }
static void unitToPointsMatrix(const SkPoint pts[2], SkMatrix* matrix) { static void unitToPointsMatrix(const SkPoint pts[2], SkMatrix* matrix) {
@ -310,7 +309,7 @@ public:
fResources.unrefAll(); fResources.unrefAll();
} }
virtual bool isValid() { return fResources.count() > 0; } bool isValid() { return fResources.count() > 0; }
void getResources(SkTDArray<SkPDFObject*>* resourceList) { void getResources(SkTDArray<SkPDFObject*>* resourceList) {
GetResourcesHelper(&fResources, resourceList); GetResourcesHelper(&fResources, resourceList);
@ -333,8 +332,6 @@ public:
fResources.unrefAll(); fResources.unrefAll();
} }
virtual bool isValid() { return size() > 0; }
void getResources(SkTDArray<SkPDFObject*>* resourceList) { void getResources(SkTDArray<SkPDFObject*>* resourceList) {
GetResourcesHelper(&fResources, resourceList); GetResourcesHelper(&fResources, resourceList);
} }
@ -370,24 +367,18 @@ SkPDFObject* SkPDFShader::GetPDFShader(const SkShader& shader,
result->ref(); result->ref();
return result; return result;
} }
bool valid = false;
// The PDFShader takes ownership of the shaderSate. // The PDFShader takes ownership of the shaderSate.
if (shaderState.get()->fType == SkShader::kNone_GradientType) { if (shaderState.get()->fType == SkShader::kNone_GradientType) {
SkPDFImageShader* imageShader = result = new SkPDFImageShader(shaderState.detach());
new SkPDFImageShader(shaderState.detach());
valid = imageShader->isValid();
result = imageShader;
} else { } else {
SkPDFFunctionShader* functionShader = SkPDFFunctionShader* functionShader =
new SkPDFFunctionShader(shaderState.detach()); new SkPDFFunctionShader(shaderState.detach());
valid = functionShader->isValid(); if (!functionShader->isValid()) {
result = functionShader; delete functionShader;
}
if (!valid) {
delete result;
return NULL; return NULL;
} }
result = functionShader;
}
entry.fPDFShader = result; entry.fPDFShader = result;
CanonicalShaders().push(entry); CanonicalShaders().push(entry);
return result; // return the reference that came from new. return result; // return the reference that came from new.
@ -481,9 +472,7 @@ SkPDFFunctionShader::SkPDFFunctionShader(SkPDFShader::State* state)
finalMatrix.preConcat(fState.get()->fShaderTransform); finalMatrix.preConcat(fState.get()->fShaderTransform);
SkRect bbox; SkRect bbox;
bbox.set(fState.get()->fBBox); bbox.set(fState.get()->fBBox);
if (!transformBBox(finalMatrix, &bbox)) { transformBBox(finalMatrix, &bbox);
return;
}
SkRefPtr<SkPDFArray> domain = new SkPDFArray; SkRefPtr<SkPDFArray> domain = new SkPDFArray;
domain->unref(); // SkRefPtr and new both took a reference. domain->unref(); // SkRefPtr and new both took a reference.
@ -501,7 +490,7 @@ SkPDFFunctionShader::SkPDFFunctionShader(SkPDFShader::State* state)
SkShader::GradientInfo twoPointRadialInfo = *info; SkShader::GradientInfo twoPointRadialInfo = *info;
SkMatrix inverseMapperMatrix; SkMatrix inverseMapperMatrix;
if (!mapperMatrix.invert(&inverseMapperMatrix)) { if (!mapperMatrix.invert(&inverseMapperMatrix)) {
return; inverseMapperMatrix.reset();
} }
inverseMapperMatrix.mapPoints(twoPointRadialInfo.fPoint, 2); inverseMapperMatrix.mapPoints(twoPointRadialInfo.fPoint, 2);
twoPointRadialInfo.fRadius[0] = twoPointRadialInfo.fRadius[0] =
@ -536,9 +525,7 @@ SkPDFImageShader::SkPDFImageShader(SkPDFShader::State* state) : fState(state) {
finalMatrix.preConcat(fState.get()->fShaderTransform); finalMatrix.preConcat(fState.get()->fShaderTransform);
SkRect surfaceBBox; SkRect surfaceBBox;
surfaceBBox.set(fState.get()->fBBox); surfaceBBox.set(fState.get()->fBBox);
if (!transformBBox(finalMatrix, &surfaceBBox)) { transformBBox(finalMatrix, &surfaceBBox);
return;
}
SkMatrix unflip; SkMatrix unflip;
unflip.setTranslate(0, SkScalarRoundToScalar(surfaceBBox.height())); unflip.setTranslate(0, SkScalarRoundToScalar(surfaceBBox.height()));

View File

@ -60,8 +60,6 @@ protected:
static void RemoveShader(SkPDFObject* shader); static void RemoveShader(SkPDFObject* shader);
SkPDFShader(); SkPDFShader();
virtual bool isValid() = 0;
}; };
#endif #endif