Chromium Code Reviews| 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 |