Index: src/pdf/SkPDFDevice.cpp |
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp |
index 329d0971dd0878af13b8dac960b06c084e8394bf..7c0aaa280e75b6eade1e3cecf6a332ac12fd36db 100644 |
--- a/src/pdf/SkPDFDevice.cpp |
+++ b/src/pdf/SkPDFDevice.cpp |
@@ -575,11 +575,8 @@ SkBaseDevice* SkPDFDevice::onCreateCompatibleDevice(const CreateInfo& cinfo) { |
if (kImageFilter_Usage == cinfo.fUsage) { |
return SkBitmapDevice::Create(cinfo.fInfo); |
} |
- |
- SkMatrix initialTransform; |
- initialTransform.reset(); |
SkISize size = SkISize::Make(cinfo.fInfo.width(), cinfo.fInfo.height()); |
- return SkNEW_ARGS(SkPDFDevice, (size, size, initialTransform)); |
+ return SkPDFDevice::Create(size, fRasterDpi, fCanon); |
} |
@@ -695,76 +692,36 @@ private: |
//////////////////////////////////////////////////////////////////////////////// |
-static inline SkImageInfo make_content_info(const SkISize& contentSize, |
- const SkMatrix* initialTransform) { |
- SkImageInfo info; |
- if (initialTransform) { |
- // Compute the size of the drawing area. |
- SkVector drawingSize; |
- SkMatrix inverse; |
- drawingSize.set(SkIntToScalar(contentSize.fWidth), |
- SkIntToScalar(contentSize.fHeight)); |
- if (!initialTransform->invert(&inverse)) { |
- // This shouldn't happen, initial transform should be invertible. |
- SkASSERT(false); |
- inverse.reset(); |
- } |
- inverse.mapVectors(&drawingSize, 1); |
- SkISize size = SkSize::Make(drawingSize.fX, drawingSize.fY).toRound(); |
- info = SkImageInfo::MakeUnknown(abs(size.fWidth), abs(size.fHeight)); |
- } else { |
- info = SkImageInfo::MakeUnknown(abs(contentSize.fWidth), |
- abs(contentSize.fHeight)); |
- } |
- return info; |
-} |
- |
-// TODO(vandebo) change pageSize to SkSize. |
-SkPDFDevice::SkPDFDevice(const SkISize& pageSize, const SkISize& contentSize, |
- const SkMatrix& initialTransform) |
+SkPDFDevice::SkPDFDevice(SkISize pageSize, |
+ SkScalar rasterDpi, |
+ SkPDFCanon* canon, |
+ bool flip) |
: fPageSize(pageSize) |
- , fContentSize(contentSize) |
+ , fContentSize(pageSize) |
+ , fExistingClipRegion(SkIRect::MakeSize(pageSize)) |
+ , fAnnotations(NULL) |
+ , fResourceDict(NULL) |
, fLastContentEntry(NULL) |
, fLastMarginContentEntry(NULL) |
+ , fDrawingArea(kContent_DrawingArea) |
, fClipStack(NULL) |
- , fRasterDpi(72.0f) |
-{ |
- const SkImageInfo info = make_content_info(contentSize, &initialTransform); |
- |
- // Just report that PDF does not supports perspective in the |
- // initial transform. |
- NOT_IMPLEMENTED(initialTransform.hasPerspective(), true); |
- |
- // Skia generally uses the top left as the origin but PDF natively has the |
- // origin at the bottom left. This matrix corrects for that. But that only |
- // needs to be done once, we don't do it when layering. |
- fInitialTransform.setTranslate(0, SkIntToScalar(pageSize.fHeight)); |
- fInitialTransform.preScale(SK_Scalar1, -SK_Scalar1); |
- fInitialTransform.preConcat(initialTransform); |
- fLegacyBitmap.setInfo(info); |
- |
- SkIRect existingClip = info.bounds(); |
- fExistingClipRegion.setRect(existingClip); |
- this->init(); |
-} |
- |
-// TODO(vandebo) change layerSize to SkSize. |
-SkPDFDevice::SkPDFDevice(const SkISize& layerSize, |
- const SkClipStack& existingClipStack, |
- const SkRegion& existingClipRegion) |
- : fPageSize(layerSize) |
- , fContentSize(layerSize) |
- , fExistingClipStack(existingClipStack) |
- , fExistingClipRegion(existingClipRegion) |
- , fLastContentEntry(NULL) |
- , fLastMarginContentEntry(NULL) |
- , fClipStack(NULL) |
- , fRasterDpi(72.0f) |
-{ |
- fInitialTransform.reset(); |
- fLegacyBitmap.setInfo(make_content_info(layerSize, NULL)); |
- |
- this->init(); |
+ , fFontGlyphUsage(SkNEW(SkPDFGlyphSetMap)) |
+ , fRasterDpi(rasterDpi) |
+ , fCanon(canon) { |
+ SkASSERT(pageSize.width() > 0); |
+ SkASSERT(pageSize.height() > 0); |
+ fLegacyBitmap.setInfo( |
+ SkImageInfo::MakeUnknown(pageSize.width(), pageSize.height())); |
+ if (flip) { |
+ // Skia generally uses the top left as the origin but PDF |
+ // natively has the origin at the bottom left. This matrix |
+ // corrects for that. But that only needs to be done once, we |
+ // don't do it when layering. |
+ fInitialTransform.setTranslate(0, SkIntToScalar(pageSize.fHeight)); |
+ fInitialTransform.preScale(SK_Scalar1, -SK_Scalar1); |
+ } else { |
+ fInitialTransform.setIdentity(); |
+ } |
} |
SkPDFDevice::~SkPDFDevice() { |