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

Side by Side Diff: printing/pdf_metafile_skia.cc

Issue 1842473002: Use SkDocument_PDF_None if pdf support is not enabled. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Created 4 years, 8 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "printing/pdf_metafile_skia.h" 5 #include "printing/pdf_metafile_skia.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 void* buffer, 58 void* buffer,
59 size_t size) { 59 size_t size) {
60 // Calling duplicate() keeps original asset state unchanged. 60 // Calling duplicate() keeps original asset state unchanged.
61 scoped_ptr<SkStreamAsset> assetCopy(asset->duplicate()); 61 scoped_ptr<SkStreamAsset> assetCopy(asset->duplicate());
62 size_t length = assetCopy->getLength(); 62 size_t length = assetCopy->getLength();
63 if (length > size) 63 if (length > size)
64 return false; 64 return false;
65 return (length == assetCopy->read(buffer, length)); 65 return (length == assetCopy->read(buffer, length));
66 } 66 }
67 67
68 #if defined(ENABLE_PRINTING) && ENABLE_PRINTING
slan 2016/03/28 20:03:44 Just: #if defined(ENABLE_PRINTING) here and belo
mbjorge 2016/03/28 20:26:52 Done
68 SkTime::DateTime TimeToSkTime(base::Time time) { 69 SkTime::DateTime TimeToSkTime(base::Time time) {
69 base::Time::Exploded exploded; 70 base::Time::Exploded exploded;
70 time.UTCExplode(&exploded); 71 time.UTCExplode(&exploded);
71 SkTime::DateTime skdate; 72 SkTime::DateTime skdate;
72 skdate.fTimeZoneMinutes = 0; 73 skdate.fTimeZoneMinutes = 0;
73 skdate.fYear = exploded.year; 74 skdate.fYear = exploded.year;
74 skdate.fMonth = exploded.month; 75 skdate.fMonth = exploded.month;
75 skdate.fDayOfWeek = exploded.day_of_week; 76 skdate.fDayOfWeek = exploded.day_of_week;
76 skdate.fDay = exploded.day_of_month; 77 skdate.fDay = exploded.day_of_month;
77 skdate.fHour = exploded.hour; 78 skdate.fHour = exploded.hour;
78 skdate.fMinute = exploded.minute; 79 skdate.fMinute = exploded.minute;
79 skdate.fSecond = exploded.second; 80 skdate.fSecond = exploded.second;
80 return skdate; 81 return skdate;
81 } 82 }
83 #endif // defined(ENABLE_PRINTING) && ENABLE_PRINTING
82 84
83 } // namespace 85 } // namespace
84 86
85 namespace printing { 87 namespace printing {
86 88
87 struct PdfMetafileSkiaData { 89 struct PdfMetafileSkiaData {
88 SkPictureRecorder recorder_; // Current recording 90 SkPictureRecorder recorder_; // Current recording
89 91
90 std::vector<Page> pages_; 92 std::vector<Page> pages_;
91 scoped_ptr<SkStreamAsset> pdf_data_; 93 scoped_ptr<SkStreamAsset> pdf_data_;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 } 151 }
150 152
151 bool PdfMetafileSkia::FinishDocument() { 153 bool PdfMetafileSkia::FinishDocument() {
152 // If we've already set the data in InitFromData, leave it be. 154 // If we've already set the data in InitFromData, leave it be.
153 if (data_->pdf_data_) 155 if (data_->pdf_data_)
154 return false; 156 return false;
155 157
156 if (data_->recorder_.getRecordingCanvas()) 158 if (data_->recorder_.getRecordingCanvas())
157 FinishPage(); 159 FinishPage();
158 160
161 #if defined(ENABLE_PRINTING) && ENABLE_PRINTING
159 SkDynamicMemoryWStream pdf_stream; 162 SkDynamicMemoryWStream pdf_stream;
160 skia::RefPtr<SkDocument> pdf_doc = 163 skia::RefPtr<SkDocument> pdf_doc =
161 skia::AdoptRef(SkDocument::CreatePDF(&pdf_stream)); 164 skia::AdoptRef(SkDocument::CreatePDF(&pdf_stream));
162 const std::string& user_agent = GetAgent(); 165 const std::string& user_agent = GetAgent();
163 SkDocument::Attribute info[] = { 166 SkDocument::Attribute info[] = {
164 SkDocument::Attribute(SkString("Creator"), 167 SkDocument::Attribute(SkString("Creator"),
165 user_agent.empty() 168 user_agent.empty()
166 ? SkString("Chromium") 169 ? SkString("Chromium")
167 : SkString(user_agent.c_str(), user_agent.size())), 170 : SkString(user_agent.c_str(), user_agent.size())),
168 }; 171 };
169 SkTime::DateTime now = TimeToSkTime(base::Time::Now()); 172 SkTime::DateTime now = TimeToSkTime(base::Time::Now());
170 pdf_doc->setMetadata(info, SK_ARRAY_COUNT(info), &now, &now); 173 pdf_doc->setMetadata(info, SK_ARRAY_COUNT(info), &now, &now);
171 for (const auto& page : data_->pages_) { 174 for (const auto& page : data_->pages_) {
172 SkCanvas* canvas = pdf_doc->beginPage( 175 SkCanvas* canvas = pdf_doc->beginPage(
173 page.page_size_.width(), page.page_size_.height(), &page.content_area_); 176 page.page_size_.width(), page.page_size_.height(), &page.content_area_);
174 // No need to save/restore, since this canvas is not reused after endPage() 177 // No need to save/restore, since this canvas is not reused after endPage()
175 canvas->scale(page.scale_factor_, page.scale_factor_); 178 canvas->scale(page.scale_factor_, page.scale_factor_);
176 canvas->drawPicture(page.content_); 179 canvas->drawPicture(page.content_);
177 pdf_doc->endPage(); 180 pdf_doc->endPage();
178 } 181 }
179 if (!pdf_doc->close()) 182 if (!pdf_doc->close())
180 return false; 183 return false;
181 184
182 data_->pdf_data_.reset(pdf_stream.detachAsStream()); 185 data_->pdf_data_.reset(pdf_stream.detachAsStream());
183 return true; 186 return true;
187 #else
188 // On platforms without printing enabled, SkDocument::CreatePDF does not exist,
189 // so just return false.
190 return false;
191 #endif // !defined(ENABLE_PRINTING || !ENABLE_PRINTING
184 } 192 }
185 193
186 uint32_t PdfMetafileSkia::GetDataSize() const { 194 uint32_t PdfMetafileSkia::GetDataSize() const {
187 if (!data_->pdf_data_) 195 if (!data_->pdf_data_)
188 return 0; 196 return 0;
189 return base::checked_cast<uint32_t>(data_->pdf_data_->getLength()); 197 return base::checked_cast<uint32_t>(data_->pdf_data_->getLength());
190 } 198 }
191 199
192 bool PdfMetafileSkia::GetData(void* dst_buffer, 200 bool PdfMetafileSkia::GetData(void* dst_buffer,
193 uint32_t dst_buffer_size) const { 201 uint32_t dst_buffer_size) const {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 319
312 metafile->data_->pages_.push_back(page); 320 metafile->data_->pages_.push_back(page);
313 321
314 if (!metafile->FinishDocument()) // Generate PDF. 322 if (!metafile->FinishDocument()) // Generate PDF.
315 metafile.reset(); 323 metafile.reset();
316 324
317 return metafile; 325 return metafile;
318 } 326 }
319 327
320 } // namespace printing 328 } // namespace printing
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698