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

Side by Side Diff: examples/ui/pdf_viewer/pdf_viewer.cc

Issue 2011713003: Roll skia to 8cc209111876b7c78b5ec577c9221d8ed5e21024 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 4 years, 6 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 | « examples/ui/noodles/noodles_view.cc ('k') | examples/ui/png_viewer/png_viewer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <memory> 5 #include <memory>
6 #include <string> 6 #include <string>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 30 matching lines...) Expand all
41 const std::string& data) 41 const std::string& data)
42 : pdf_library_(pdf_library), 42 : pdf_library_(pdf_library),
43 doc_(doc), 43 doc_(doc),
44 data_(data), 44 data_(data),
45 page_count_(FPDF_GetPageCount(doc_)) {} 45 page_count_(FPDF_GetPageCount(doc_)) {}
46 46
47 ~PDFDocument() { FPDF_CloseDocument(doc_); } 47 ~PDFDocument() { FPDF_CloseDocument(doc_); }
48 48
49 uint32_t page_count() { return page_count_; } 49 uint32_t page_count() { return page_count_; }
50 50
51 skia::RefPtr<SkImage> DrawPage(int page_index, const mojo::Size& size) { 51 sk_sp<SkImage> DrawPage(int page_index, const mojo::Size& size) {
52 FPDF_PAGE page = FPDF_LoadPage(doc_, page_index); 52 FPDF_PAGE page = FPDF_LoadPage(doc_, page_index);
53 53
54 double width_pts = FPDF_GetPageWidth(page); 54 double width_pts = FPDF_GetPageWidth(page);
55 double height_pts = FPDF_GetPageHeight(page); 55 double height_pts = FPDF_GetPageHeight(page);
56 56
57 int width, height; 57 int width, height;
58 if (size.width * height_pts < size.height * width_pts) { 58 if (size.width * height_pts < size.height * width_pts) {
59 width = size.width; 59 width = size.width;
60 height = height_pts * size.width / width_pts; 60 height = height_pts * size.width / width_pts;
61 } else { 61 } else {
62 width = width_pts * size.height / height_pts; 62 width = width_pts * size.height / height_pts;
63 height = size.height; 63 height = size.height;
64 } 64 }
65 65
66 int stride = width * 4; 66 int stride = width * 4;
67 skia::RefPtr<SkData> pixels = 67 sk_sp<SkData> pixels = SkData::MakeUninitialized(stride * height);
68 skia::AdoptRef(SkData::NewUninitialized(stride * height));
69 DCHECK(pixels); 68 DCHECK(pixels);
70 69
71 FPDF_BITMAP bitmap = FPDFBitmap_CreateEx(width, height, FPDFBitmap_BGRA, 70 FPDF_BITMAP bitmap = FPDFBitmap_CreateEx(width, height, FPDFBitmap_BGRA,
72 pixels->writable_data(), stride); 71 pixels->writable_data(), stride);
73 FPDFBitmap_FillRect(bitmap, 0, 0, width, height, 0xFFFFFFFF); 72 FPDFBitmap_FillRect(bitmap, 0, 0, width, height, 0xFFFFFFFF);
74 FPDF_RenderPageBitmap(bitmap, page, 0, 0, width, height, 0, 0); 73 FPDF_RenderPageBitmap(bitmap, page, 0, 0, width, height, 0, 0);
75 FPDFBitmap_Destroy(bitmap); 74 FPDFBitmap_Destroy(bitmap);
76 75
77 FPDF_ClosePage(page); 76 FPDF_ClosePage(page);
78 77
79 SkImageInfo info = SkImageInfo::Make(width, height, kBGRA_8888_SkColorType, 78 SkImageInfo info = SkImageInfo::Make(width, height, kBGRA_8888_SkColorType,
80 kOpaque_SkAlphaType); 79 kOpaque_SkAlphaType);
81 return skia::AdoptRef(SkImage::NewRasterData(info, pixels.get(), stride)); 80 return SkImage::MakeRasterData(info, pixels, stride);
82 } 81 }
83 82
84 private: 83 private:
85 std::shared_ptr<PDFLibrary> pdf_library_; 84 std::shared_ptr<PDFLibrary> pdf_library_;
86 FPDF_DOCUMENT doc_; 85 FPDF_DOCUMENT doc_;
87 std::string data_; 86 std::string data_;
88 uint32_t page_count_; 87 uint32_t page_count_;
89 }; 88 };
90 89
91 class PDFLibrary : public std::enable_shared_from_this<PDFLibrary> { 90 class PDFLibrary : public std::enable_shared_from_this<PDFLibrary> {
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 } 236 }
238 237
239 void GotoPreviousPage() { 238 void GotoPreviousPage() {
240 if (page_ > 0) { 239 if (page_ > 0) {
241 page_--; 240 page_--;
242 Redraw(); 241 Redraw();
243 } 242 }
244 } 243 }
245 244
246 void Redraw() { 245 void Redraw() {
247 cached_image_.clear(); 246 cached_image_.reset();
248 choreographer_.ScheduleDraw(); 247 choreographer_.ScheduleDraw();
249 } 248 }
250 249
251 std::shared_ptr<PDFDocument> pdf_document_; 250 std::shared_ptr<PDFDocument> pdf_document_;
252 uint32_t page_ = 0u; 251 uint32_t page_ = 0u;
253 skia::RefPtr<SkImage> cached_image_; 252 sk_sp<SkImage> cached_image_;
254 253
255 mojo::ui::Choreographer choreographer_; 254 mojo::ui::Choreographer choreographer_;
256 mojo::ui::InputHandler input_handler_; 255 mojo::ui::InputHandler input_handler_;
257 256
258 DISALLOW_COPY_AND_ASSIGN(PDFDocumentView); 257 DISALLOW_COPY_AND_ASSIGN(PDFDocumentView);
259 }; 258 };
260 259
261 class PDFContentViewProviderApp : public mojo::ui::ViewProviderApp { 260 class PDFContentViewProviderApp : public mojo::ui::ViewProviderApp {
262 public: 261 public:
263 PDFContentViewProviderApp(const std::shared_ptr<PDFLibrary>& pdf_library, 262 PDFContentViewProviderApp(const std::shared_ptr<PDFLibrary>& pdf_library,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 307
309 DISALLOW_COPY_AND_ASSIGN(PDFContentViewerApp); 308 DISALLOW_COPY_AND_ASSIGN(PDFContentViewerApp);
310 }; 309 };
311 310
312 } // namespace examples 311 } // namespace examples
313 312
314 MojoResult MojoMain(MojoHandle application_request) { 313 MojoResult MojoMain(MojoHandle application_request) {
315 mojo::ApplicationRunnerChromium runner(new examples::PDFContentViewerApp()); 314 mojo::ApplicationRunnerChromium runner(new examples::PDFContentViewerApp());
316 return runner.Run(application_request); 315 return runner.Run(application_request);
317 } 316 }
OLDNEW
« no previous file with comments | « examples/ui/noodles/noodles_view.cc ('k') | examples/ui/png_viewer/png_viewer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698