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

Side by Side Diff: experimental/PdfViewer/src/SkPdfRenderer.cpp

Issue 59493011: Pdfviewer refactoring. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Move include/ to inc/ Created 7 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp ('k') | gyp/SampleApp.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkPdfRenderer.h" 8 #include "SkPdfRenderer.h"
9 9
10 #include "SkBitmapDevice.h" 10 #include "SkBitmapDevice.h"
(...skipping 3069 matching lines...) Expand 10 before | Expand all | Expand 10 after
3080 // TODO(edisonn:) erase with white before draw? Right now the caller i s responsible. 3080 // TODO(edisonn:) erase with white before draw? Right now the caller i s responsible.
3081 // SkPaint paint; 3081 // SkPaint paint;
3082 // paint.setColor(SK_ColorWHITE); 3082 // paint.setColor(SK_ColorWHITE);
3083 // canvas->drawRect(rect, paint); 3083 // canvas->drawRect(rect, paint);
3084 3084
3085 3085
3086 canvas->flush(); 3086 canvas->flush();
3087 return true; 3087 return true;
3088 } 3088 }
3089 3089
3090 bool SkPdfRenderer::load(const SkString inputFileName) { 3090 SkPdfRenderer* SkPdfRenderer::CreateFromFile(const char* inputFileName) {
3091 unload(); 3091 // FIXME: SkPdfNativeDoc should have a similar Create function.
3092 3092 SkPdfNativeDoc* pdfDoc = SkNEW_ARGS(SkPdfNativeDoc, (inputFileName));
3093 fPdfDoc = new SkPdfNativeDoc(inputFileName.c_str()); 3093 if (pdfDoc->pages() == 0) {
3094 if (fPdfDoc->pages() == 0) { 3094 SkDELETE(pdfDoc);
3095 delete fPdfDoc; 3095 return NULL;
3096 fPdfDoc = NULL;
3097 } 3096 }
3098 3097
3099 return fPdfDoc != NULL; 3098 return SkNEW_ARGS(SkPdfRenderer, (pdfDoc));
3100 } 3099 }
3101 3100
3102 bool SkPdfRenderer::load(SkStream* stream) { 3101 SkPdfRenderer* SkPdfRenderer::CreateFromStream(SkStream* stream) {
3103 unload();
3104
3105 // TODO(edisonn): create static function that could return NULL if there are errors 3102 // TODO(edisonn): create static function that could return NULL if there are errors
3106 fPdfDoc = new SkPdfNativeDoc(stream); 3103 SkPdfNativeDoc* pdfDoc = SkNEW_ARGS(SkPdfNativeDoc, (stream));
3107 if (fPdfDoc->pages() == 0) { 3104 if (pdfDoc->pages() == 0) {
3108 delete fPdfDoc; 3105 SkDELETE(pdfDoc);
3109 fPdfDoc = NULL; 3106 return NULL;
3110 } 3107 }
3111 3108
3112 return fPdfDoc != NULL; 3109 return SkNEW_ARGS(SkPdfRenderer, (pdfDoc));
3113 } 3110 }
3114 3111
3112 SkPdfRenderer::SkPdfRenderer(SkPdfNativeDoc* doc)
3113 :fPdfDoc(doc) {
3114 }
3115
3116 SkPdfRenderer::~SkPdfRenderer() {
3117 SkDELETE(fPdfDoc);
3118 }
3115 3119
3116 int SkPdfRenderer::pages() const { 3120 int SkPdfRenderer::pages() const {
3117 return fPdfDoc != NULL ? fPdfDoc->pages() : 0; 3121 SkASSERT(fPdfDoc != NULL);
3118 } 3122 return fPdfDoc->pages();
3119
3120 void SkPdfRenderer::unload() {
3121 delete fPdfDoc;
3122 fPdfDoc = NULL;
3123 } 3123 }
3124 3124
3125 SkRect SkPdfRenderer::MediaBox(int page) const { 3125 SkRect SkPdfRenderer::MediaBox(int page) const {
3126 SkASSERT(fPdfDoc); 3126 SkASSERT(fPdfDoc != NULL);
3127 return fPdfDoc->MediaBox(page); 3127 return fPdfDoc->MediaBox(page);
3128 } 3128 }
3129 3129
3130 size_t SkPdfRenderer::bytesUsed() const { 3130 size_t SkPdfRenderer::bytesUsed() const {
3131 return fPdfDoc ? fPdfDoc->bytesUsed() : 0; 3131 SkASSERT(fPdfDoc != NULL);
3132 return fPdfDoc->bytesUsed();
3132 } 3133 }
3133 3134
3134 bool SkPDFNativeRenderToBitmap(SkStream* stream, 3135 bool SkPDFNativeRenderToBitmap(SkStream* stream,
3135 SkBitmap* output, 3136 SkBitmap* output,
3136 int page, 3137 int page,
3137 SkPdfContent content, 3138 SkPdfContent unused,
3138 double dpi) { 3139 double dpi) {
3139 SkASSERT(page >= 0); 3140 SkASSERT(page >= 0);
3140 SkPdfRenderer renderer; 3141 SkPdfRenderer* renderer = SkPdfRenderer::CreateFromStream(stream);
3141 renderer.load(stream); 3142 if (NULL == renderer) {
3142 if (!renderer.loaded() || page >= renderer.pages() || page < 0) {
3143 return false; 3143 return false;
3144 } 3144 }
3145 3145
3146 SkRect rect = renderer.MediaBox(page < 0 ? 0 :page); 3146 SkRect rect = renderer->MediaBox(page < 0 ? 0 :page);
3147 3147
3148 SkScalar width = SkScalarMul(rect.width(), SkDoubleToScalar(sqrt(dpi / 72.0 ))); 3148 SkScalar width = SkScalarMul(rect.width(), SkDoubleToScalar(dpi / 72.0));
3149 SkScalar height = SkScalarMul(rect.height(), SkDoubleToScalar(sqrt(dpi / 72 .0))); 3149 SkScalar height = SkScalarMul(rect.height(), SkDoubleToScalar(dpi / 72.0));
3150 3150
3151 rect = SkRect::MakeWH(width, height); 3151 rect = SkRect::MakeWH(width, height);
3152 3152
3153 setup_bitmap(output, (int)SkScalarToDouble(width), (int)SkScalarToDouble(hei ght)); 3153 setup_bitmap(output, SkScalarCeilToInt(width), SkScalarCeilToInt(height));
3154 3154
3155 SkAutoTUnref<SkBaseDevice> device(SkNEW_ARGS(SkBitmapDevice, (*output))); 3155 SkAutoTUnref<SkBaseDevice> device(SkNEW_ARGS(SkBitmapDevice, (*output)));
3156 SkCanvas canvas(device); 3156 SkCanvas canvas(device);
3157 3157
3158 return renderer.renderPage(page, &canvas, rect); 3158 return renderer->renderPage(page, &canvas, rect);
3159 } 3159 }
OLDNEW
« no previous file with comments | « experimental/PdfViewer/pdfparser/native/SkPdfNativeDoc.cpp ('k') | gyp/SampleApp.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698