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:
parent
ebad2d9e20
commit
8aa66b6f76
@ -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);
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
@ -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()));
|
||||||
|
@ -60,8 +60,6 @@ protected:
|
|||||||
static void RemoveShader(SkPDFObject* shader);
|
static void RemoveShader(SkPDFObject* shader);
|
||||||
|
|
||||||
SkPDFShader();
|
SkPDFShader();
|
||||||
|
|
||||||
virtual bool isValid() = 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user