OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkDocument.h" | 8 #include "SkDocument.h" |
9 #include "SkPDFCanon.h" | 9 #include "SkPDFCanon.h" |
10 #include "SkPDFDevice.h" | 10 #include "SkPDFDevice.h" |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 entry->fFont->getFontSubset(entry->fGlyphSet)); | 56 entry->fFont->getFontSubset(entry->fGlyphSet)); |
57 if (subsetFont) { | 57 if (subsetFont) { |
58 substituteMap->setSubstitute(entry->fFont, subsetFont.get()); | 58 substituteMap->setSubstitute(entry->fFont, subsetFont.get()); |
59 } | 59 } |
60 entry = iterator.next(); | 60 entry = iterator.next(); |
61 } | 61 } |
62 } | 62 } |
63 | 63 |
64 static SkPDFObject* create_pdf_page_content(const SkPDFDevice* pageDevice) { | 64 static SkPDFObject* create_pdf_page_content(const SkPDFDevice* pageDevice) { |
65 SkAutoTDelete<SkStreamAsset> content(pageDevice->content()); | 65 SkAutoTDelete<SkStreamAsset> content(pageDevice->content()); |
66 return SkNEW_ARGS(SkPDFStream, (content.get())); | 66 return new SkPDFStream(content.get()); |
67 } | 67 } |
68 | 68 |
69 static SkPDFDict* create_pdf_page(const SkPDFDevice* pageDevice) { | 69 static SkPDFDict* create_pdf_page(const SkPDFDevice* pageDevice) { |
70 SkAutoTUnref<SkPDFDict> page(SkNEW_ARGS(SkPDFDict, ("Page"))); | 70 SkAutoTUnref<SkPDFDict> page(new SkPDFDict("Page")); |
71 page->insertObject("Resources", pageDevice->createResourceDict()); | 71 page->insertObject("Resources", pageDevice->createResourceDict()); |
72 page->insertObject("MediaBox", pageDevice->copyMediaBox()); | 72 page->insertObject("MediaBox", pageDevice->copyMediaBox()); |
73 if (SkPDFArray* annots = pageDevice->getAnnotations()) { | 73 if (SkPDFArray* annots = pageDevice->getAnnotations()) { |
74 SkASSERT(annots->size() > 0); | 74 SkASSERT(annots->size() > 0); |
75 page->insertObject("Annots", SkRef(annots)); | 75 page->insertObject("Annots", SkRef(annots)); |
76 } | 76 } |
77 page->insertObjRef("Contents", create_pdf_page_content(pageDevice)); | 77 page->insertObjRef("Contents", create_pdf_page_content(pageDevice)); |
78 return page.detach(); | 78 return page.detach(); |
79 } | 79 } |
80 | 80 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 } | 155 } |
156 } | 156 } |
157 | 157 |
158 static bool emit_pdf_document(const SkTDArray<const SkPDFDevice*>& pageDevices, | 158 static bool emit_pdf_document(const SkTDArray<const SkPDFDevice*>& pageDevices, |
159 SkWStream* stream) { | 159 SkWStream* stream) { |
160 if (pageDevices.isEmpty()) { | 160 if (pageDevices.isEmpty()) { |
161 return false; | 161 return false; |
162 } | 162 } |
163 | 163 |
164 SkTDArray<SkPDFDict*> pages; | 164 SkTDArray<SkPDFDict*> pages; |
165 SkAutoTUnref<SkPDFDict> dests(SkNEW(SkPDFDict)); | 165 SkAutoTUnref<SkPDFDict> dests(new SkPDFDict); |
166 | 166 |
167 for (int i = 0; i < pageDevices.count(); i++) { | 167 for (int i = 0; i < pageDevices.count(); i++) { |
168 SkASSERT(pageDevices[i]); | 168 SkASSERT(pageDevices[i]); |
169 SkASSERT(i == 0 || | 169 SkASSERT(i == 0 || |
170 pageDevices[i - 1]->getCanon() == pageDevices[i]->getCanon()); | 170 pageDevices[i - 1]->getCanon() == pageDevices[i]->getCanon()); |
171 SkAutoTUnref<SkPDFDict> page(create_pdf_page(pageDevices[i])); | 171 SkAutoTUnref<SkPDFDict> page(create_pdf_page(pageDevices[i])); |
172 pageDevices[i]->appendDestinations(dests, page.get()); | 172 pageDevices[i]->appendDestinations(dests, page.get()); |
173 pages.push(page.detach()); | 173 pages.push(page.detach()); |
174 } | 174 } |
175 | 175 |
176 SkTDArray<SkPDFDict*> pageTree; | 176 SkTDArray<SkPDFDict*> pageTree; |
177 SkAutoTUnref<SkPDFDict> docCatalog(SkNEW_ARGS(SkPDFDict, ("Catalog"))); | 177 SkAutoTUnref<SkPDFDict> docCatalog(new SkPDFDict("Catalog")); |
178 | 178 |
179 SkPDFDict* pageTreeRoot; | 179 SkPDFDict* pageTreeRoot; |
180 generate_page_tree(pages, &pageTree, &pageTreeRoot); | 180 generate_page_tree(pages, &pageTree, &pageTreeRoot); |
181 docCatalog->insertObjRef("Pages", SkRef(pageTreeRoot)); | 181 docCatalog->insertObjRef("Pages", SkRef(pageTreeRoot)); |
182 | 182 |
183 if (dests->size() > 0) { | 183 if (dests->size() > 0) { |
184 docCatalog->insertObjRef("Dests", dests.detach()); | 184 docCatalog->insertObjRef("Dests", dests.detach()); |
185 } | 185 } |
186 | 186 |
187 /* TODO(vandebo): output intent | 187 /* TODO(vandebo): output intent |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 | 301 |
302 protected: | 302 protected: |
303 SkCanvas* onBeginPage(SkScalar width, SkScalar height, | 303 SkCanvas* onBeginPage(SkScalar width, SkScalar height, |
304 const SkRect& trimBox) override { | 304 const SkRect& trimBox) override { |
305 SkASSERT(!fCanvas.get()); | 305 SkASSERT(!fCanvas.get()); |
306 | 306 |
307 SkISize pageSize = SkISize::Make( | 307 SkISize pageSize = SkISize::Make( |
308 SkScalarRoundToInt(width), SkScalarRoundToInt(height)); | 308 SkScalarRoundToInt(width), SkScalarRoundToInt(height)); |
309 SkAutoTUnref<SkPDFDevice> device( | 309 SkAutoTUnref<SkPDFDevice> device( |
310 SkPDFDevice::Create(pageSize, fRasterDpi, &fCanon)); | 310 SkPDFDevice::Create(pageSize, fRasterDpi, &fCanon)); |
311 fCanvas.reset(SkNEW_ARGS(SkCanvas, (device.get()))); | 311 fCanvas.reset(new SkCanvas(device.get())); |
312 fPageDevices.push(device.detach()); | 312 fPageDevices.push(device.detach()); |
313 fCanvas->clipRect(trimBox); | 313 fCanvas->clipRect(trimBox); |
314 fCanvas->translate(trimBox.x(), trimBox.y()); | 314 fCanvas->translate(trimBox.x(), trimBox.y()); |
315 return fCanvas.get(); | 315 return fCanvas.get(); |
316 } | 316 } |
317 | 317 |
318 void onEndPage() override { | 318 void onEndPage() override { |
319 SkASSERT(fCanvas.get()); | 319 SkASSERT(fCanvas.get()); |
320 fCanvas->flush(); | 320 fCanvas->flush(); |
321 fCanvas.reset(NULL); | 321 fCanvas.reset(NULL); |
(...skipping 16 matching lines...) Expand all Loading... |
338 private: | 338 private: |
339 SkPDFCanon fCanon; | 339 SkPDFCanon fCanon; |
340 SkTDArray<const SkPDFDevice*> fPageDevices; | 340 SkTDArray<const SkPDFDevice*> fPageDevices; |
341 SkAutoTUnref<SkCanvas> fCanvas; | 341 SkAutoTUnref<SkCanvas> fCanvas; |
342 SkScalar fRasterDpi; | 342 SkScalar fRasterDpi; |
343 }; | 343 }; |
344 } // namespace | 344 } // namespace |
345 /////////////////////////////////////////////////////////////////////////////// | 345 /////////////////////////////////////////////////////////////////////////////// |
346 | 346 |
347 SkDocument* SkDocument::CreatePDF(SkWStream* stream, SkScalar dpi) { | 347 SkDocument* SkDocument::CreatePDF(SkWStream* stream, SkScalar dpi) { |
348 return stream ? SkNEW_ARGS(SkDocument_PDF, (stream, NULL, dpi)) : NULL; | 348 return stream ? new SkDocument_PDF(stream, NULL, dpi) : NULL; |
349 } | 349 } |
350 | 350 |
351 SkDocument* SkDocument::CreatePDF(const char path[], SkScalar dpi) { | 351 SkDocument* SkDocument::CreatePDF(const char path[], SkScalar dpi) { |
352 SkFILEWStream* stream = SkNEW_ARGS(SkFILEWStream, (path)); | 352 SkFILEWStream* stream = new SkFILEWStream(path); |
353 if (!stream->isValid()) { | 353 if (!stream->isValid()) { |
354 SkDELETE(stream); | 354 delete stream; |
355 return NULL; | 355 return NULL; |
356 } | 356 } |
357 auto delete_wstream = [](SkWStream* stream, bool) { SkDELETE(stream); }; | 357 auto delete_wstream = [](SkWStream* stream, bool) { delete stream; }; |
358 return SkNEW_ARGS(SkDocument_PDF, (stream, delete_wstream, dpi)); | 358 return new SkDocument_PDF(stream, delete_wstream, dpi); |
359 } | 359 } |
OLD | NEW |