OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |