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

Side by Side Diff: printing/pdf_metafile_skia.cc

Issue 1819683002: Use sk_sp-based picture recording APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: skspify GetPicture/GetFlattenedPicture Created 4 years, 9 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
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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 // page into a SkDocument. 44 // page into a SkDocument.
45 struct Page { 45 struct Page {
46 Page(const SkSize& page_size, const SkRect& content_area, float scale) 46 Page(const SkSize& page_size, const SkRect& content_area, float scale)
47 : page_size_(page_size), 47 : page_size_(page_size),
48 content_area_(content_area), 48 content_area_(content_area),
49 scale_factor_(scale), 49 scale_factor_(scale),
50 content_(/*NULL*/) {} 50 content_(/*NULL*/) {}
51 SkSize page_size_; 51 SkSize page_size_;
52 SkRect content_area_; 52 SkRect content_area_;
53 float scale_factor_; 53 float scale_factor_;
54 skia::RefPtr<SkPicture> content_; 54 sk_sp<SkPicture> content_;
55 }; 55 };
56 56
57 bool WriteAssetToBuffer(const SkStreamAsset* asset, 57 bool WriteAssetToBuffer(const SkStreamAsset* asset,
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;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 if (!StartPage(page_size, content_area, scale_factor)) 137 if (!StartPage(page_size, content_area, scale_factor))
138 return nullptr; 138 return nullptr;
139 return data_->recorder_.getRecordingCanvas(); 139 return data_->recorder_.getRecordingCanvas();
140 } 140 }
141 141
142 bool PdfMetafileSkia::FinishPage() { 142 bool PdfMetafileSkia::FinishPage() {
143 if (!data_->recorder_.getRecordingCanvas()) 143 if (!data_->recorder_.getRecordingCanvas())
144 return false; 144 return false;
145 DCHECK(!(data_->pages_.back().content_)); 145 DCHECK(!(data_->pages_.back().content_));
146 data_->pages_.back().content_ = 146 data_->pages_.back().content_ =
147 skia::AdoptRef(data_->recorder_.endRecordingAsPicture()); 147 data_->recorder_.finishRecordingAsPicture();
148 return true; 148 return true;
149 } 149 }
150 150
151 bool PdfMetafileSkia::FinishDocument() { 151 bool PdfMetafileSkia::FinishDocument() {
152 // If we've already set the data in InitFromData, leave it be. 152 // If we've already set the data in InitFromData, leave it be.
153 if (data_->pdf_data_) 153 if (data_->pdf_data_)
154 return false; 154 return false;
155 155
156 if (data_->recorder_.getRecordingCanvas()) 156 if (data_->recorder_.getRecordingCanvas())
157 FinishPage(); 157 FinishPage();
158 158
159 SkDynamicMemoryWStream pdf_stream; 159 SkDynamicMemoryWStream pdf_stream;
160 skia::RefPtr<SkDocument> pdf_doc = 160 skia::RefPtr<SkDocument> pdf_doc =
161 skia::AdoptRef(SkDocument::CreatePDF(&pdf_stream)); 161 skia::AdoptRef(SkDocument::CreatePDF(&pdf_stream));
162 const std::string& user_agent = GetAgent(); 162 const std::string& user_agent = GetAgent();
163 SkDocument::Attribute info[] = { 163 SkDocument::Attribute info[] = {
164 SkDocument::Attribute(SkString("Creator"), 164 SkDocument::Attribute(SkString("Creator"),
165 user_agent.empty() 165 user_agent.empty()
166 ? SkString("Chromium") 166 ? SkString("Chromium")
167 : SkString(user_agent.c_str(), user_agent.size())), 167 : SkString(user_agent.c_str(), user_agent.size())),
168 }; 168 };
169 SkTime::DateTime now = TimeToSkTime(base::Time::Now()); 169 SkTime::DateTime now = TimeToSkTime(base::Time::Now());
170 pdf_doc->setMetadata(info, SK_ARRAY_COUNT(info), &now, &now); 170 pdf_doc->setMetadata(info, SK_ARRAY_COUNT(info), &now, &now);
171 for (const auto& page : data_->pages_) { 171 for (const auto& page : data_->pages_) {
172 SkCanvas* canvas = pdf_doc->beginPage( 172 SkCanvas* canvas = pdf_doc->beginPage(
173 page.page_size_.width(), page.page_size_.height(), &page.content_area_); 173 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() 174 // No need to save/restore, since this canvas is not reused after endPage()
175 canvas->scale(page.scale_factor_, page.scale_factor_); 175 canvas->scale(page.scale_factor_, page.scale_factor_);
176 canvas->drawPicture(page.content_.get()); 176 canvas->drawPicture(page.content_);
177 pdf_doc->endPage(); 177 pdf_doc->endPage();
178 } 178 }
179 if (!pdf_doc->close()) 179 if (!pdf_doc->close())
180 return false; 180 return false;
181 181
182 data_->pdf_data_.reset(pdf_stream.detachAsStream()); 182 data_->pdf_data_.reset(pdf_stream.detachAsStream());
183 return true; 183 return true;
184 } 184 }
185 185
186 uint32_t PdfMetafileSkia::GetDataSize() const { 186 uint32_t PdfMetafileSkia::GetDataSize() const {
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 311
312 metafile->data_->pages_.push_back(page); 312 metafile->data_->pages_.push_back(page);
313 313
314 if (!metafile->FinishDocument()) // Generate PDF. 314 if (!metafile->FinishDocument()) // Generate PDF.
315 metafile.reset(); 315 metafile.reset();
316 316
317 return metafile; 317 return metafile;
318 } 318 }
319 319
320 } // namespace printing 320 } // namespace printing
OLDNEW
« no previous file with comments | « content/renderer/gpu/gpu_benchmarking_extension.cc ('k') | skia/ext/analysis_canvas_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698