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 "SkDevice.h" |
14 #include "SkBitmap.h" | 14 #include "SkBitmap.h" |
15 #include "SkCanvas.h" | 15 #include "SkCanvas.h" |
16 #include "SkPaint.h" | 16 #include "SkPaint.h" |
17 #include "SkPath.h" | 17 #include "SkPath.h" |
18 #include "SkPicture.h" | 18 #include "SkPicture.h" |
19 #include "SkRect.h" | 19 #include "SkRect.h" |
20 #include "SkRefCnt.h" | 20 #include "SkRefCnt.h" |
21 #include "SkStream.h" | 21 #include "SkStream.h" |
22 #include "SkTDArray.h" | 22 #include "SkTDArray.h" |
23 #include "SkTemplates.h" | 23 #include "SkTemplates.h" |
(...skipping 14 matching lines...) Expand all Loading... |
38 | 38 |
39 // Private classes. | 39 // Private classes. |
40 struct ContentEntry; | 40 struct ContentEntry; |
41 struct GraphicStateEntry; | 41 struct GraphicStateEntry; |
42 struct NamedDestination; | 42 struct NamedDestination; |
43 | 43 |
44 /** \class SkPDFDevice | 44 /** \class SkPDFDevice |
45 | 45 |
46 The drawing context for the PDF backend. | 46 The drawing context for the PDF backend. |
47 */ | 47 */ |
48 class SkPDFDevice : public SkBitmapDevice { | 48 class SkPDFDevice : public SkBaseDevice { |
49 public: | 49 public: |
50 /** Create a PDF drawing context with the given width and height. | 50 /** Create a PDF drawing context with the given width and height. |
51 * 72 points/in means letter paper is 612x792. | 51 * 72 points/in means letter paper is 612x792. |
52 * @param pageSize Page size in points. | 52 * @param pageSize Page size in points. |
53 * @param contentSize The content size of the page in points. This will be | 53 * @param contentSize The content size of the page in points. This will be |
54 * combined with the initial transform to determine the drawing area | 54 * combined with the initial transform to determine the drawing area |
55 * (as reported by the width and height methods). Anything outside | 55 * (as reported by the width and height methods). Anything outside |
56 * of the drawing area will be clipped. | 56 * of the drawing area will be clipped. |
57 * @param initialTransform The initial transform to apply to the page. | 57 * @param initialTransform The initial transform to apply to the page. |
58 * This may be useful to, for example, move the origin in and | 58 * This may be useful to, for example, move the origin in and |
(...skipping 16 matching lines...) Expand all Loading... |
75 /** These are called inside the per-device-layer loop for each draw call. | 75 /** 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, | 76 When these are called, we have already applied any saveLayer operations, |
77 and are handling any looping from the paint, and any effects from the | 77 and are handling any looping from the paint, and any effects from the |
78 DrawFilter. | 78 DrawFilter. |
79 */ | 79 */ |
80 virtual void drawPaint(const SkDraw&, const SkPaint& paint) SK_OVERRIDE; | 80 virtual void drawPaint(const SkDraw&, const SkPaint& paint) SK_OVERRIDE; |
81 virtual void drawPoints(const SkDraw&, SkCanvas::PointMode mode, | 81 virtual void drawPoints(const SkDraw&, SkCanvas::PointMode mode, |
82 size_t count, const SkPoint[], | 82 size_t count, const SkPoint[], |
83 const SkPaint& paint) SK_OVERRIDE; | 83 const SkPaint& paint) SK_OVERRIDE; |
84 virtual void drawRect(const SkDraw&, const SkRect& r, const SkPaint& paint); | 84 virtual void drawRect(const SkDraw&, const SkRect& r, const SkPaint& paint); |
85 virtual void drawRRect(const SkDraw&, const SkRRect& rr, | 85 virtual void drawOval(const SkDraw&, const SkRect& oval, const SkPaint& pain
t) SK_OVERRIDE; |
86 const SkPaint& paint) SK_OVERRIDE; | 86 virtual void drawRRect(const SkDraw&, const SkRRect& rr, const SkPaint& pain
t) SK_OVERRIDE; |
87 virtual void drawPath(const SkDraw&, const SkPath& origpath, | 87 virtual void drawPath(const SkDraw&, const SkPath& origpath, |
88 const SkPaint& paint, const SkMatrix* prePathMatrix, | 88 const SkPaint& paint, const SkMatrix* prePathMatrix, |
89 bool pathIsMutable) SK_OVERRIDE; | 89 bool pathIsMutable) SK_OVERRIDE; |
90 virtual void drawBitmapRect(const SkDraw& draw, const SkBitmap& bitmap, | 90 virtual void drawBitmapRect(const SkDraw& draw, const SkBitmap& bitmap, |
91 const SkRect* src, const SkRect& dst, | 91 const SkRect* src, const SkRect& dst, |
92 const SkPaint& paint, | 92 const SkPaint& paint, |
93 SkCanvas::DrawBitmapRectFlags flags) SK_OVERRIDE
; | 93 SkCanvas::DrawBitmapRectFlags flags) SK_OVERRIDE
; |
94 virtual void drawBitmap(const SkDraw&, const SkBitmap& bitmap, | 94 virtual void drawBitmap(const SkDraw&, const SkBitmap& bitmap, |
95 const SkMatrix& matrix, const SkPaint&) SK_OVERRIDE; | 95 const SkMatrix& matrix, const SkPaint&) SK_OVERRIDE; |
96 virtual void drawSprite(const SkDraw&, const SkBitmap& bitmap, int x, int y, | 96 virtual void drawSprite(const SkDraw&, const SkBitmap& bitmap, int x, int y, |
97 const SkPaint& paint) SK_OVERRIDE; | 97 const SkPaint& paint) SK_OVERRIDE; |
98 virtual void drawText(const SkDraw&, const void* text, size_t len, | 98 virtual void drawText(const SkDraw&, const void* text, size_t len, |
99 SkScalar x, SkScalar y, const SkPaint&) SK_OVERRIDE; | 99 SkScalar x, SkScalar y, const SkPaint&) SK_OVERRIDE; |
100 virtual void drawPosText(const SkDraw&, const void* text, size_t len, | 100 virtual void drawPosText(const SkDraw&, const void* text, size_t len, |
101 const SkScalar pos[], SkScalar constY, | 101 const SkScalar pos[], SkScalar constY, |
102 int scalarsPerPos, const SkPaint&) SK_OVERRIDE; | 102 int scalarsPerPos, const SkPaint&) SK_OVERRIDE; |
103 virtual void drawTextOnPath(const SkDraw&, const void* text, size_t len, | 103 virtual void drawTextOnPath(const SkDraw&, const void* text, size_t len, |
104 const SkPath& path, const SkMatrix* matrix, | 104 const SkPath& path, const SkMatrix* matrix, |
105 const SkPaint& paint) SK_OVERRIDE; | 105 const SkPaint& paint) SK_OVERRIDE; |
106 virtual void drawVertices(const SkDraw&, SkCanvas::VertexMode, | 106 virtual void drawVertices(const SkDraw&, SkCanvas::VertexMode, |
107 int vertexCount, const SkPoint verts[], | 107 int vertexCount, const SkPoint verts[], |
108 const SkPoint texs[], const SkColor colors[], | 108 const SkPoint texs[], const SkColor colors[], |
109 SkXfermode* xmode, const uint16_t indices[], | 109 SkXfermode* xmode, const uint16_t indices[], |
110 int indexCount, const SkPaint& paint) SK_OVERRIDE; | 110 int indexCount, const SkPaint& paint) SK_OVERRIDE; |
111 virtual void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, | 111 virtual void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, |
112 const SkPaint&) SK_OVERRIDE; | 112 const SkPaint&) SK_OVERRIDE; |
113 | 113 |
114 virtual void onAttachToCanvas(SkCanvas* canvas) SK_OVERRIDE; | 114 virtual void onAttachToCanvas(SkCanvas* canvas) SK_OVERRIDE; |
115 virtual void onDetachFromCanvas() SK_OVERRIDE; | 115 virtual void onDetachFromCanvas() SK_OVERRIDE; |
| 116 virtual SkImageInfo imageInfo() const SK_OVERRIDE; |
116 | 117 |
117 enum DrawingArea { | 118 enum DrawingArea { |
118 kContent_DrawingArea, // Drawing area for the page content. | 119 kContent_DrawingArea, // Drawing area for the page content. |
119 kMargin_DrawingArea, // Drawing area for the margin content. | 120 kMargin_DrawingArea, // Drawing area for the margin content. |
120 }; | 121 }; |
121 | 122 |
122 /** Sets the drawing area for the device. Subsequent draw calls are directed | 123 /** Sets the drawing area for the device. Subsequent draw calls are directed |
123 * to the specific drawing area (margin or content). The default drawing | 124 * to the specific drawing area (margin or content). The default drawing |
124 * area is the content drawing area. | 125 * area is the content drawing area. |
125 * | 126 * |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 * intent with better fidelity, but it can make for larger | 202 * intent with better fidelity, but it can make for larger |
202 * PDF files too, which would use more memory while rendering, | 203 * PDF files too, which would use more memory while rendering, |
203 * and it would be slower to be processed or sent online or | 204 * and it would be slower to be processed or sent online or |
204 * to printer. | 205 * to printer. |
205 */ | 206 */ |
206 void setRasterDpi(SkScalar rasterDpi) { | 207 void setRasterDpi(SkScalar rasterDpi) { |
207 fRasterDpi = rasterDpi; | 208 fRasterDpi = rasterDpi; |
208 } | 209 } |
209 | 210 |
210 protected: | 211 protected: |
211 virtual bool allowImageFilter(const SkImageFilter*) SK_OVERRIDE; | 212 virtual const SkBitmap& onAccessBitmap() SK_OVERRIDE { |
| 213 return fLegacyBitmap; |
| 214 } |
| 215 |
| 216 virtual bool allowImageFilter(const SkImageFilter*) SK_OVERRIDE { |
| 217 return false; |
| 218 } |
| 219 |
| 220 virtual SkSurface* newSurface(const SkImageInfo&) SK_OVERRIDE; |
212 | 221 |
213 private: | 222 private: |
214 // TODO(vandebo): push most of SkPDFDevice's state into a core object in | 223 // TODO(vandebo): push most of SkPDFDevice's state into a core object in |
215 // order to get the right access levels without using friend. | 224 // order to get the right access levels without using friend. |
216 friend class ScopedContentEntry; | 225 friend class ScopedContentEntry; |
217 | 226 |
218 SkISize fPageSize; | 227 SkISize fPageSize; |
219 SkISize fContentSize; | 228 SkISize fContentSize; |
220 SkMatrix fInitialTransform; | 229 SkMatrix fInitialTransform; |
221 SkClipStack fExistingClipStack; | 230 SkClipStack fExistingClipStack; |
(...skipping 19 matching lines...) Expand all Loading... |
241 SkAutoTDelete<ContentEntry>* getContentEntries(); | 250 SkAutoTDelete<ContentEntry>* getContentEntries(); |
242 ContentEntry* getLastContentEntry(); | 251 ContentEntry* getLastContentEntry(); |
243 void setLastContentEntry(ContentEntry* contentEntry); | 252 void setLastContentEntry(ContentEntry* contentEntry); |
244 | 253 |
245 // Glyph ids used for each font on this device. | 254 // Glyph ids used for each font on this device. |
246 SkAutoTDelete<SkPDFGlyphSetMap> fFontGlyphUsage; | 255 SkAutoTDelete<SkPDFGlyphSetMap> fFontGlyphUsage; |
247 | 256 |
248 SkPicture::EncodeBitmap fEncoder; | 257 SkPicture::EncodeBitmap fEncoder; |
249 SkScalar fRasterDpi; | 258 SkScalar fRasterDpi; |
250 | 259 |
| 260 SkBitmap fLegacyBitmap; |
| 261 |
251 SkPDFDevice(const SkISize& layerSize, const SkClipStack& existingClipStack, | 262 SkPDFDevice(const SkISize& layerSize, const SkClipStack& existingClipStack, |
252 const SkRegion& existingClipRegion); | 263 const SkRegion& existingClipRegion); |
253 | 264 |
254 // override from SkBaseDevice | 265 // override from SkBaseDevice |
255 virtual SkBaseDevice* onCreateDevice(const SkImageInfo&, Usage) SK_OVERRIDE; | 266 virtual SkBaseDevice* onCreateDevice(const SkImageInfo&, Usage) SK_OVERRIDE; |
256 | 267 |
257 void init(); | 268 void init(); |
258 void cleanUp(bool clearFontUsage); | 269 void cleanUp(bool clearFontUsage); |
259 SkPDFFormXObject* createFormXObjectFromDevice(); | 270 SkPDFFormXObject* createFormXObjectFromDevice(); |
260 | 271 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 bool handlePointAnnotation(const SkPoint* points, size_t count, | 327 bool handlePointAnnotation(const SkPoint* points, size_t count, |
317 const SkMatrix& matrix, const SkPaint& paint); | 328 const SkMatrix& matrix, const SkPaint& paint); |
318 SkPDFDict* createLinkAnnotation(const SkRect& r, const SkMatrix& matrix); | 329 SkPDFDict* createLinkAnnotation(const SkRect& r, const SkMatrix& matrix); |
319 void handleLinkToURL(SkData* urlData, const SkRect& r, | 330 void handleLinkToURL(SkData* urlData, const SkRect& r, |
320 const SkMatrix& matrix); | 331 const SkMatrix& matrix); |
321 void handleLinkToNamedDest(SkData* nameData, const SkRect& r, | 332 void handleLinkToNamedDest(SkData* nameData, const SkRect& r, |
322 const SkMatrix& matrix); | 333 const SkMatrix& matrix); |
323 void defineNamedDestination(SkData* nameData, const SkPoint& point, | 334 void defineNamedDestination(SkData* nameData, const SkPoint& point, |
324 const SkMatrix& matrix); | 335 const SkMatrix& matrix); |
325 | 336 |
326 typedef SkBitmapDevice INHERITED; | 337 typedef SkBaseDevice INHERITED; |
327 | 338 |
328 // TODO(edisonn): Only SkDocument_PDF and SkPDFImageShader should be able to
create | 339 // TODO(edisonn): Only SkDocument_PDF and SkPDFImageShader should be able to
create |
329 // an SkPDFDevice | 340 // an SkPDFDevice |
330 //friend class SkDocument_PDF; | 341 //friend class SkDocument_PDF; |
331 //friend class SkPDFImageShader; | 342 //friend class SkPDFImageShader; |
332 }; | 343 }; |
333 | 344 |
334 #endif | 345 #endif |
OLD | NEW |