| 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 #include "SkPDFCatalog.h" | 10 #include "SkPDFCatalog.h" |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 /* TODO(vandebo): output intent | 105 /* TODO(vandebo): output intent |
| 106 SkAutoTUnref<SkPDFDict> outputIntent = new SkPDFDict("OutputIntent"); | 106 SkAutoTUnref<SkPDFDict> outputIntent = new SkPDFDict("OutputIntent"); |
| 107 outputIntent->insert("S", new SkPDFName("GTS_PDFA1"))->unref(); | 107 outputIntent->insert("S", new SkPDFName("GTS_PDFA1"))->unref(); |
| 108 outputIntent->insert("OutputConditionIdentifier", | 108 outputIntent->insert("OutputConditionIdentifier", |
| 109 new SkPDFString("sRGB"))->unref(); | 109 new SkPDFString("sRGB"))->unref(); |
| 110 SkAutoTUnref<SkPDFArray> intentArray = new SkPDFArray; | 110 SkAutoTUnref<SkPDFArray> intentArray = new SkPDFArray; |
| 111 intentArray->append(outputIntent.get()); | 111 intentArray->append(outputIntent.get()); |
| 112 fDocCatalog->insert("OutputIntent", intentArray.get()); | 112 fDocCatalog->insert("OutputIntent", intentArray.get()); |
| 113 */ | 113 */ |
| 114 | 114 |
| 115 SkPDFDict* dests = SkNEW(SkPDFDict); // fPageResources owns reference | 115 SkAutoTUnref<SkPDFDict> dests(SkNEW(SkPDFDict)); |
| 116 fCatalog->addObject(dests, true /* onFirstPage */); | |
| 117 fFirstPageResources->add(dests); | |
| 118 | 116 |
| 119 bool firstPage = true; | 117 bool firstPage = true; |
| 120 /* The references returned in newResources are transfered to | 118 /* The references returned in newResources are transfered to |
| 121 * fFirstPageResources or fOtherPageResources depending on firstPage and | 119 * fFirstPageResources or fOtherPageResources depending on firstPage and |
| 122 * knownResources doesn't have a reference but just relies on the other | 120 * knownResources doesn't have a reference but just relies on the other |
| 123 * two sets to maintain a reference. | 121 * two sets to maintain a reference. |
| 124 */ | 122 */ |
| 125 SkTSet<SkPDFObject*> knownResources; | 123 SkTSet<SkPDFObject*> knownResources; |
| 126 | 124 |
| 127 // mergeInto returns the number of duplicates. | 125 // mergeInto returns the number of duplicates. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 144 SkDEBUGCODE(duplicates =) fOtherPageResources->mergeInto(newReso
urces); | 142 SkDEBUGCODE(duplicates =) fOtherPageResources->mergeInto(newReso
urces); |
| 145 } | 143 } |
| 146 SkASSERT(duplicates == 0); | 144 SkASSERT(duplicates == 0); |
| 147 | 145 |
| 148 SkDEBUGCODE(duplicates =) knownResources.mergeInto(newResources); | 146 SkDEBUGCODE(duplicates =) knownResources.mergeInto(newResources); |
| 149 SkASSERT(duplicates == 0); | 147 SkASSERT(duplicates == 0); |
| 150 | 148 |
| 151 fPages[i]->appendDestinations(dests); | 149 fPages[i]->appendDestinations(dests); |
| 152 } | 150 } |
| 153 | 151 |
| 154 fDocCatalog->insert("Dests", SkNEW_ARGS(SkPDFObjRef, (dests)))->unref(); | 152 if (dests->size() > 0) { |
| 153 SkPDFDict* raw_dests = dests.get(); |
| 154 fFirstPageResources->add(dests.detach()); // Transfer ownership. |
| 155 fCatalog->addObject(raw_dests, true /* onFirstPage */); |
| 156 fDocCatalog->insert("Dests", SkNEW_ARGS(SkPDFObjRef, (raw_dests)))->
unref(); |
| 157 } |
| 155 | 158 |
| 156 // Build font subsetting info before proceeding. | 159 // Build font subsetting info before proceeding. |
| 157 perform_font_subsetting(fCatalog.get(), fPages, &fSubstitutes); | 160 perform_font_subsetting(fCatalog.get(), fPages, &fSubstitutes); |
| 158 | 161 |
| 159 // Figure out the size of things and inform the catalog of file offsets. | 162 // Figure out the size of things and inform the catalog of file offsets. |
| 160 off_t fileOffset = headerSize(); | 163 off_t fileOffset = headerSize(); |
| 161 fileOffset += fCatalog->setFileOffset(fDocCatalog, fileOffset); | 164 fileOffset += fCatalog->setFileOffset(fDocCatalog, fileOffset); |
| 162 fileOffset += fCatalog->setFileOffset(fPages[0], fileOffset); | 165 fileOffset += fCatalog->setFileOffset(fPages[0], fileOffset); |
| 163 fileOffset += fPages[0]->getPageSize(fCatalog.get(), | 166 fileOffset += fPages[0]->getPageSize(fCatalog.get(), |
| 164 (size_t) fileOffset); | 167 (size_t) fileOffset); |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 fTrailerDict->insertInt("Size", int(objCount)); | 300 fTrailerDict->insertInt("Size", int(objCount)); |
| 298 fTrailerDict->insert("Root", new SkPDFObjRef(fDocCatalog))->unref(); | 301 fTrailerDict->insert("Root", new SkPDFObjRef(fDocCatalog))->unref(); |
| 299 } | 302 } |
| 300 | 303 |
| 301 stream->writeText("trailer\n"); | 304 stream->writeText("trailer\n"); |
| 302 fTrailerDict->emitObject(stream, fCatalog.get(), false); | 305 fTrailerDict->emitObject(stream, fCatalog.get(), false); |
| 303 stream->writeText("\nstartxref\n"); | 306 stream->writeText("\nstartxref\n"); |
| 304 stream->writeBigDecAsText(fXRefFileOffset); | 307 stream->writeBigDecAsText(fXRefFileOffset); |
| 305 stream->writeText("\n%%EOF"); | 308 stream->writeText("\n%%EOF"); |
| 306 } | 309 } |
| OLD | NEW |