Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(903)

Unified Diff: src/pdf/SkPDFDevice.cpp

Issue 1802963002: SkPDF: SkPDFDevice has ptr to SkPDFDocument (Closed) Base URL: https://skia.googlesource.com/skia.git@SkPdfBigSerializeRefactor
Patch Set: better explanation Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/pdf/SkPDFDevice.h ('k') | src/pdf/SkPDFDocument.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/pdf/SkPDFDevice.cpp
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index 9cc2563caf44532123e3d6e3fe2f39ba5a65fdb8..514cd8840897c9a84312ce5c6da0186e9605ee06 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -19,6 +19,7 @@
#include "SkPathOps.h"
#include "SkPDFBitmap.h"
#include "SkPDFCanon.h"
+#include "SkPDFDocument.h"
#include "SkPDFFont.h"
#include "SkPDFFormXObject.h"
#include "SkPDFGraphicState.h"
@@ -584,9 +585,11 @@ SkBaseDevice* SkPDFDevice::onCreateDevice(const CreateInfo& cinfo, const SkPaint
return nullptr;
}
SkISize size = SkISize::Make(cinfo.fInfo.width(), cinfo.fInfo.height());
- return SkPDFDevice::Create(size, fRasterDpi, fCanon);
+ return SkPDFDevice::Create(size, fRasterDpi, fDocument);
}
+SkPDFCanon* SkPDFDevice::getCanon() const { return fDocument->canon(); }
+
struct ContentEntry {
GraphicStateEntry fState;
@@ -700,7 +703,7 @@ private:
////////////////////////////////////////////////////////////////////////////////
-SkPDFDevice::SkPDFDevice(SkISize pageSize, SkScalar rasterDpi, SkPDFCanon* canon, bool flip)
+SkPDFDevice::SkPDFDevice(SkISize pageSize, SkScalar rasterDpi, SkPDFDocument* doc, bool flip)
: INHERITED(SkSurfaceProps(0, kUnknown_SkPixelGeometry))
, fPageSize(pageSize)
, fContentSize(pageSize)
@@ -711,7 +714,7 @@ SkPDFDevice::SkPDFDevice(SkISize pageSize, SkScalar rasterDpi, SkPDFCanon* canon
, fClipStack(nullptr)
, fFontGlyphUsage(new SkPDFGlyphSetMap)
, fRasterDpi(rasterDpi)
- , fCanon(canon) {
+ , fDocument(doc) {
SkASSERT(pageSize.width() > 0);
SkASSERT(pageSize.height() > 0);
fLegacyBitmap.setInfo(
@@ -1057,7 +1060,7 @@ void SkPDFDevice::drawBitmap(const SkDraw& d,
SkMatrix transform = matrix;
transform.postConcat(*d.fMatrix);
- const SkImage* image = fCanon->bitmapToImage(bitmap);
+ const SkImage* image = fDocument->canon()->bitmapToImage(bitmap);
if (!image) {
return;
}
@@ -1081,7 +1084,7 @@ void SkPDFDevice::drawSprite(const SkDraw& d,
SkMatrix matrix;
matrix.setTranslate(SkIntToScalar(x), SkIntToScalar(y));
- const SkImage* image = fCanon->bitmapToImage(bitmap);
+ const SkImage* image = fDocument->canon()->bitmapToImage(bitmap);
if (!image) {
return;
}
@@ -1196,7 +1199,7 @@ static void draw_transparent_text(SkPDFDevice* device,
void SkPDFDevice::drawText(const SkDraw& d, const void* text, size_t len,
SkScalar x, SkScalar y, const SkPaint& srcPaint) {
- if (!SkPDFFont::CanEmbedTypeface(srcPaint.getTypeface(), fCanon)) {
+ if (!SkPDFFont::CanEmbedTypeface(srcPaint.getTypeface(), fDocument->canon())) {
// https://bug.skia.org/3866
SkPath path;
srcPaint.getTextPath(text, len, x, y, &path);
@@ -1257,7 +1260,7 @@ void SkPDFDevice::drawText(const SkDraw& d, const void* text, size_t len,
void SkPDFDevice::drawPosText(const SkDraw& d, const void* text, size_t len,
const SkScalar pos[], int scalarsPerPos,
const SkPoint& offset, const SkPaint& srcPaint) {
- if (!SkPDFFont::CanEmbedTypeface(srcPaint.getTypeface(), fCanon)) {
+ if (!SkPDFFont::CanEmbedTypeface(srcPaint.getTypeface(), fDocument->canon())) {
const SkPoint* positions = reinterpret_cast<const SkPoint*>(pos);
SkAutoTMalloc<SkPoint> positionsBuffer;
if (2 != scalarsPerPos) {
@@ -1680,7 +1683,7 @@ void SkPDFDevice::drawFormXObjectWithMask(int xObjectIndex,
}
auto sMaskGS = SkPDFGraphicState::GetSMaskGraphicState(
- mask, invertClip, SkPDFGraphicState::kAlpha_SMaskMode, fCanon);
+ mask, invertClip, SkPDFGraphicState::kAlpha_SMaskMode, fDocument->canon());
SkMatrix identity;
identity.reset();
@@ -1697,7 +1700,7 @@ void SkPDFDevice::drawFormXObjectWithMask(int xObjectIndex,
// Call makeNoSmaskGraphicState() instead of
// SkPDFGraphicState::MakeNoSmaskGraphicState so that the canon
// can deduplicate.
- sMaskGS = fCanon->makeNoSmaskGraphicState();
+ sMaskGS = fDocument->canon()->makeNoSmaskGraphicState();
SkPDFUtils::ApplyGraphicState(addGraphicStateResource(sMaskGS.get()),
&content.entry()->fContent);
}
@@ -2004,7 +2007,7 @@ void SkPDFDevice::populateGraphicStateEntryFromPaint(
SkScalar rasterScale =
SkIntToScalar(fRasterDpi) / DPI_FOR_RASTER_SCALE_ONE;
pdfShader.reset(SkPDFShader::GetPDFShader(
- fCanon, fRasterDpi, *shader, transform, bounds, rasterScale));
+ fDocument, fRasterDpi, *shader, transform, bounds, rasterScale));
if (pdfShader.get()) {
// pdfShader has been canonicalized so we can directly compare
@@ -2035,12 +2038,12 @@ void SkPDFDevice::populateGraphicStateEntryFromPaint(
sk_sp<SkPDFGraphicState> newGraphicState;
if (color == paint.getColor()) {
newGraphicState.reset(
- SkPDFGraphicState::GetGraphicStateForPaint(fCanon, paint));
+ SkPDFGraphicState::GetGraphicStateForPaint(fDocument->canon(), paint));
} else {
SkPaint newPaint = paint;
newPaint.setColor(color);
newGraphicState.reset(
- SkPDFGraphicState::GetGraphicStateForPaint(fCanon, newPaint));
+ SkPDFGraphicState::GetGraphicStateForPaint(fDocument->canon(), newPaint));
}
int resourceIndex = addGraphicStateResource(newGraphicState.get());
entry->fGraphicStateIndex = resourceIndex;
@@ -2097,7 +2100,7 @@ void SkPDFDevice::updateFont(const SkPaint& paint, uint16_t glyphID,
int SkPDFDevice::getFontResourceIndex(SkTypeface* typeface, uint16_t glyphID) {
sk_sp<SkPDFFont> newFont(
- SkPDFFont::GetFontResource(fCanon, typeface, glyphID));
+ SkPDFFont::GetFontResource(fDocument->canon(), typeface, glyphID));
int resourceIndex = fFontResources.find(newFont.get());
if (resourceIndex < 0) {
resourceIndex = fFontResources.count();
@@ -2261,14 +2264,20 @@ void SkPDFDevice::internalDrawImage(const SkMatrix& origMatrix,
// TODO(halcanary): de-dupe this by caching filtered images.
// (maybe in the resource cache?)
}
- sk_sp<SkPDFObject> pdfimage(SkSafeRef(fCanon->findPDFBitmap(image)));
+ sk_sp<SkPDFObject> pdfimage(SkSafeRef(fDocument->canon()->findPDFBitmap(image)));
if (!pdfimage) {
pdfimage.reset(SkPDFCreateBitmapObject(
- image, fCanon->getPixelSerializer()));
+ image, fDocument->canon()->getPixelSerializer()));
if (!pdfimage) {
return;
}
- fCanon->addPDFBitmap(image->uniqueID(), pdfimage.get());
+ #if SK_PDF_SERIALIZE_IMAGES_EARLY // TODO(halcanary): enable.
+ sk_sp<SkData> encodedImage(image->refEncodedData());
+ if (!encodedImage) {
+ fDocument->serialize(pdfimage);
+ }
+ #endif
+ fDocument->canon()->addPDFBitmap(image->uniqueID(), pdfimage.get());
}
SkPDFUtils::DrawFormXObject(this->addXObjectResource(pdfimage.get()),
&content.entry()->fContent);
« no previous file with comments | « src/pdf/SkPDFDevice.h ('k') | src/pdf/SkPDFDocument.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698