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

Side by Side Diff: include/pdf/SkPDFDevice.h

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
Patch Set: update comments Created 7 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698