[PDF] Fix regression - correct for fInitialTrnasform in form xobjects.

Chrome bug http://crbug.com/83658

Review URL: http://codereview.appspot.com/4550072

git-svn-id: http://skia.googlecode.com/svn/trunk@1415 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
vandebo@chromium.org 2011-05-24 23:02:07 +00:00
parent 50108cdbfe
commit 61d267879b
2 changed files with 13 additions and 0 deletions

View File

@ -137,6 +137,8 @@ public:
*/
SkStream* content() const;
const SkMatrix& initialTransform() const { return fInitialTransform; }
protected:
// override
virtual SkDeviceFactory* onNewDeviceFactory();

View File

@ -19,6 +19,7 @@
#include "SkMatrix.h"
#include "SkPDFCatalog.h"
#include "SkPDFDevice.h"
#include "SkPDFUtils.h"
#include "SkStream.h"
#include "SkTypes.h"
@ -38,6 +39,16 @@ SkPDFFormXObject::SkPDFFormXObject(SkPDFDevice* device) {
insert("BBox", device->getMediaBox().get());
insert("Resources", device->getResourceDict().get());
// We invert the initial transform and apply that to the xobject so that
// it doesn't get applied twice. We can't just undo it because it's
// embedded in things like shaders and images.
if (!device->initialTransform().isIdentity()) {
SkMatrix inverse;
inverse.reset();
device->initialTransform().invert(&inverse);
insert("Matrix", SkPDFUtils::MatrixToArray(inverse))->unref();
}
// Right now SkPDFFormXObject is only used for saveLayer, which implies
// isolated blending. Do this conditionally if that changes.
SkRefPtr<SkPDFDict> group = new SkPDFDict("Group");