 Chromium Code Reviews
 Chromium Code Reviews Issue 24811002:
  Update the SkDocument interface to allow for 1) abort won't emit pdf, 2) close can report success/f…  (Closed) 
  Base URL: https://skia.googlecode.com/svn/trunk
    
  
    Issue 24811002:
  Update the SkDocument interface to allow for 1) abort won't emit pdf, 2) close can report success/f…  (Closed) 
  Base URL: https://skia.googlecode.com/svn/trunk| OLD | NEW | 
|---|---|
| 1 | 1 | 
| 2 /* | 2 /* | 
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. | 
| 4 * | 4 * | 
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be | 
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. | 
| 7 */ | 7 */ | 
| 8 | 8 | 
| 9 | 9 | 
| 10 #ifndef SkPDFDevice_DEFINED | 10 #ifndef SkPDFDevice_DEFINED | 
| 11 #define SkPDFDevice_DEFINED | 11 #define SkPDFDevice_DEFINED | 
| 12 | 12 | 
| 13 #include "SkBitmapDevice.h" | 13 #include "SkBitmapDevice.h" | 
| 14 #include "SkBitmap.h" | |
| 14 #include "SkCanvas.h" | 15 #include "SkCanvas.h" | 
| 15 #include "SkPaint.h" | 16 #include "SkPaint.h" | 
| 16 #include "SkPath.h" | 17 #include "SkPath.h" | 
| 17 #include "SkPicture.h" | 18 #include "SkPicture.h" | 
| 18 #include "SkRect.h" | 19 #include "SkRect.h" | 
| 19 #include "SkRefCnt.h" | 20 #include "SkRefCnt.h" | 
| 20 #include "SkStream.h" | 21 #include "SkStream.h" | 
| 21 #include "SkTDArray.h" | 22 #include "SkTDArray.h" | 
| 22 #include "SkTemplates.h" | 23 #include "SkTemplates.h" | 
| 23 | 24 | 
| 25 class CanvasTestStep; | |
| 24 class SkPDFArray; | 26 class SkPDFArray; | 
| 25 class SkPDFDevice; | 27 class SkPDFDevice; | 
| 26 class SkPDFDict; | 28 class SkPDFDict; | 
| 27 class SkPDFFont; | 29 class SkPDFFont; | 
| 28 class SkPDFFormXObject; | 30 class SkPDFFormXObject; | 
| 29 class SkPDFGlyphSetMap; | 31 class SkPDFGlyphSetMap; | 
| 30 class SkPDFGraphicState; | 32 class SkPDFGraphicState; | 
| 31 class SkPDFObject; | 33 class SkPDFObject; | 
| 32 class SkPDFResourceDict; | 34 class SkPDFResourceDict; | 
| 33 class SkPDFShader; | 35 class SkPDFShader; | 
| 34 class SkPDFStream; | 36 class SkPDFStream; | 
| 35 template <typename T> class SkTSet; | 37 template <typename T> class SkTSet; | 
| 36 | 38 | 
| 39 namespace skiatest { | |
| 40 class Reporter; | |
| 
reed1
2013/10/07 13:24:54
Why is this declared here?
 
edisonn
2013/10/07 19:29:06
test code, removed
 | |
| 41 } | |
| 42 | |
| 43 namespace sk_tools { | |
| 44 class PdfRenderer; | |
| 
reed1
2013/10/07 13:24:54
Why is this declared here?
 
edisonn
2013/10/07 19:29:06
test code, removed
 | |
| 45 } | |
| 37 // Private classes. | 46 // Private classes. | 
| 38 struct ContentEntry; | 47 struct ContentEntry; | 
| 39 struct GraphicStateEntry; | 48 struct GraphicStateEntry; | 
| 40 struct NamedDestination; | 49 struct NamedDestination; | 
| 41 | 50 | 
| 51 typedef bool (*EncodeToDCTStream)(SkWStream* stream, const SkBitmap& bitmap, con st SkIRect& rect); | |
| 
reed1
2013/10/07 13:24:54
Is this different form the EncodeProc type added t
 
edisonn
2013/10/07 19:29:06
Unused, removed
 
vandebo (ex-Chrome)
2013/10/07 22:34:10
remove?
 
edisonn
2013/10/08 17:55:30
removed
 | |
| 52 | |
| 42 /** \class SkPDFDevice | 53 /** \class SkPDFDevice | 
| 43 | 54 | 
| 44 The drawing context for the PDF backend. | 55 The drawing context for the PDF backend. | 
| 45 */ | 56 */ | 
| 46 class SkPDFDevice : public SkBitmapDevice { | 57 class SkPDFDevice : public SkBitmapDevice { | 
| 47 public: | 58 public: | 
| 48 /** Create a PDF drawing context with the given width and height. | 59 /** Create a PDF drawing context with the given width and height. | 
| 49 * 72 points/in means letter paper is 612x792. | 60 * 72 points/in means letter paper is 612x792. | 
| 50 * @param pageSize Page size in points. | 61 * @param pageSize Page size in points. | 
| 51 * @param contentSize The content size of the page in points. This will be | 62 * @param contentSize The content size of the page in points. This will be | 
| 52 * combined with the initial transform to determine the drawing area | 63 * combined with the initial transform to determine the drawing area | 
| 53 * (as reported by the width and height methods). Anything outside | 64 * (as reported by the width and height methods). Anything outside | 
| 54 * of the drawing area will be clipped. | 65 * of the drawing area will be clipped. | 
| 55 * @param initialTransform The initial transform to apply to the page. | 66 * @param initialTransform The initial transform to apply to the page. | 
| 56 * This may be useful to, for example, move the origin in and | 67 * This may be useful to, for example, move the origin in and | 
| 57 * over a bit to account for a margin, scale the canvas, | 68 * over a bit to account for a margin, scale the canvas, | 
| 58 * or apply a rotation. Note1: the SkPDFDevice also applies | 69 * or apply a rotation. Note1: the SkPDFDevice also applies | 
| 59 * a scale+translate transform to move the origin from the | 70 * a scale+translate transform to move the origin from the | 
| 60 * bottom left (PDF default) to the top left. Note2: drawDevice | 71 * bottom left (PDF default) to the top left. Note2: drawDevice | 
| 61 * (used by layer restore) draws the device after this initial | 72 * (used by layer restore) draws the device after this initial | 
| 62 * transform is applied, so the PDF device does an | 73 * transform is applied, so the PDF device does an | 
| 63 * inverse scale+translate to accommodate the one that SkPDFDevice | 74 * inverse scale+translate to accommodate the one that SkPDFDevice | 
| 64 * always does. | 75 * always does. | 
| 65 */ | 76 */ | 
| 66 // TODO(vandebo): The sizes should be SkSize and not SkISize. | 77 // TODO(vandebo): The sizes should be SkSize and not SkISize. | 
| 
reed1
2013/10/07 13:24:54
lets remove the TODO if this is deprecated
 
edisonn
2013/10/07 19:29:06
Done.
 | |
| 78 // Deprecated, please use SkDocument::CreatePdf() instead. | |
| 67 SK_API SkPDFDevice(const SkISize& pageSize, const SkISize& contentSize, | 79 SK_API SkPDFDevice(const SkISize& pageSize, const SkISize& contentSize, | 
| 68 const SkMatrix& initialTransform); | 80 const SkMatrix& initialTransform); | 
| 69 SK_API virtual ~SkPDFDevice(); | 81 SK_API virtual ~SkPDFDevice(); | 
| 70 | 82 | 
| 71 virtual uint32_t getDeviceCapabilities() SK_OVERRIDE; | 83 virtual uint32_t getDeviceCapabilities() SK_OVERRIDE; | 
| 72 | 84 | 
| 73 virtual void clear(SkColor color) SK_OVERRIDE; | 85 virtual void clear(SkColor color) SK_OVERRIDE; | 
| 74 | 86 | 
| 75 /** These are called inside the per-device-layer loop for each draw call. | 87 /** These are called inside the per-device-layer loop for each draw call. | 
| 76 When these are called, we have already applied any saveLayer operations, | 88 When these are called, we have already applied any saveLayer operations, | 
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 190 return *(fFontGlyphUsage.get()); | 202 return *(fFontGlyphUsage.get()); | 
| 191 } | 203 } | 
| 192 | 204 | 
| 193 protected: | 205 protected: | 
| 194 virtual bool onReadPixels(const SkBitmap& bitmap, int x, int y, | 206 virtual bool onReadPixels(const SkBitmap& bitmap, int x, int y, | 
| 195 SkCanvas::Config8888) SK_OVERRIDE; | 207 SkCanvas::Config8888) SK_OVERRIDE; | 
| 196 | 208 | 
| 197 virtual bool allowImageFilter(SkImageFilter*) SK_OVERRIDE; | 209 virtual bool allowImageFilter(SkImageFilter*) SK_OVERRIDE; | 
| 198 | 210 | 
| 199 private: | 211 private: | 
| 212 SK_API SkPDFDevice(const SkSize& trimBox, const SkRect& mediaBox); | |
| 213 | |
| 200 // TODO(vandebo): push most of SkPDFDevice's state into a core object in | 214 // TODO(vandebo): push most of SkPDFDevice's state into a core object in | 
| 201 // order to get the right access levels without using friend. | 215 // order to get the right access levels without using friend. | 
| 202 friend class ScopedContentEntry; | 216 friend class ScopedContentEntry; | 
| 203 | 217 | 
| 204 SkISize fPageSize; | 218 SkISize fPageSize; | 
| 205 SkISize fContentSize; | 219 SkISize fContentSize; | 
| 206 SkMatrix fInitialTransform; | 220 SkMatrix fInitialTransform; | 
| 207 SkClipStack fExistingClipStack; | 221 SkClipStack fExistingClipStack; | 
| 208 SkRegion fExistingClipRegion; | 222 SkRegion fExistingClipRegion; | 
| 209 SkPDFArray* fAnnotations; | 223 SkPDFArray* fAnnotations; | 
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 303 const SkMatrix& matrix, const SkPaint& paint); | 317 const SkMatrix& matrix, const SkPaint& paint); | 
| 304 SkPDFDict* createLinkAnnotation(const SkRect& r, const SkMatrix& matrix); | 318 SkPDFDict* createLinkAnnotation(const SkRect& r, const SkMatrix& matrix); | 
| 305 void handleLinkToURL(SkData* urlData, const SkRect& r, | 319 void handleLinkToURL(SkData* urlData, const SkRect& r, | 
| 306 const SkMatrix& matrix); | 320 const SkMatrix& matrix); | 
| 307 void handleLinkToNamedDest(SkData* nameData, const SkRect& r, | 321 void handleLinkToNamedDest(SkData* nameData, const SkRect& r, | 
| 308 const SkMatrix& matrix); | 322 const SkMatrix& matrix); | 
| 309 void defineNamedDestination(SkData* nameData, const SkPoint& point, | 323 void defineNamedDestination(SkData* nameData, const SkPoint& point, | 
| 310 const SkMatrix& matrix); | 324 const SkMatrix& matrix); | 
| 311 | 325 | 
| 312 typedef SkBitmapDevice INHERITED; | 326 typedef SkBitmapDevice INHERITED; | 
| 327 | |
| 328 // TODO(edisonn): Only SkDocument_PDF and SkPDFImageShader should be able to create | |
| 329 // an SkPDFDevice | |
| 330 friend class SkDocument_PDF; | |
| 331 friend class SkPDFImageShader; | |
| 332 }; | |
| 333 | |
| 334 class SkPDFDeviceFlattener : public SkPDFDevice { | |
| 
reed1
2013/10/07 13:24:54
Does this class need to be in this header, or can
 
edisonn
2013/10/07 19:29:06
I could put all this logic inside PDF, but long te
 
vandebo (ex-Chrome)
2013/10/07 22:34:10
Flattener is a very generic name.  Is this meant t
 
edisonn
2013/10/08 17:55:30
This class will flatten other properties unsuporte
 | |
| 335 private: | |
| 336 typedef SkPDFDevice INHERITED; | |
| 337 | |
| 338 SK_API SkPDFDeviceFlattener(const SkSize& trimBox, const SkRect& mediaBox); | |
| 339 | |
| 340 public: | |
| 341 SK_API virtual ~SkPDFDeviceFlattener(); | |
| 342 | |
| 343 virtual void drawPaint(const SkDraw&, const SkPaint& paint) SK_OVERRIDE; | |
| 344 virtual void drawPoints(const SkDraw&, SkCanvas::PointMode mode, | |
| 345 size_t count, const SkPoint[], | |
| 346 const SkPaint& paint) SK_OVERRIDE; | |
| 347 virtual void drawRect(const SkDraw&, const SkRect& r, const SkPaint& paint); | |
| 348 virtual void drawPath(const SkDraw&, const SkPath& origpath, | |
| 349 const SkPaint& paint, const SkMatrix* prePathMatrix, | |
| 350 bool pathIsMutable) SK_OVERRIDE; | |
| 351 virtual void drawText(const SkDraw&, const void* text, size_t len, | |
| 352 SkScalar x, SkScalar y, const SkPaint&) SK_OVERRIDE; | |
| 353 virtual void drawPosText(const SkDraw&, const void* text, size_t len, | |
| 354 const SkScalar pos[], SkScalar constY, | |
| 355 int scalarsPerPos, const SkPaint&) SK_OVERRIDE; | |
| 356 virtual void drawTextOnPath(const SkDraw&, const void* text, size_t len, | |
| 357 const SkPath& path, const SkMatrix* matrix, | |
| 358 const SkPaint& paint) SK_OVERRIDE; | |
| 359 virtual void drawVertices(const SkDraw&, SkCanvas::VertexMode, | |
| 360 int vertexCount, const SkPoint verts[], | |
| 361 const SkPoint texs[], const SkColor colors[], | |
| 362 SkXfermode* xmode, const uint16_t indices[], | |
| 363 int indexCount, const SkPaint& paint) SK_OVERRIDE; | |
| 364 virtual void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, | |
| 365 const SkPaint&) SK_OVERRIDE; | |
| 366 private: | |
| 367 | |
| 368 bool mustFlatten(const SkDraw& d) const; | |
| 369 bool mustPathText(const SkDraw& d, const SkPaint& paint); | |
| 370 | |
| 371 friend class SkDocument_PDF; | |
| 313 }; | 372 }; | 
| 314 | 373 | 
| 315 #endif | 374 #endif | 
| OLD | NEW |