aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--experimental/PdfViewer/SkPdfRenderer.cpp19
-rw-r--r--experimental/PdfViewer/SkPdfRenderer.h3
-rw-r--r--experimental/PdfViewer/pdf_viewer_main.cpp17
-rw-r--r--samplecode/SamplePdfFileViewer.cpp2
4 files changed, 24 insertions, 17 deletions
diff --git a/experimental/PdfViewer/SkPdfRenderer.cpp b/experimental/PdfViewer/SkPdfRenderer.cpp
index c5fc8f5807..8502ac54b2 100644
--- a/experimental/PdfViewer/SkPdfRenderer.cpp
+++ b/experimental/PdfViewer/SkPdfRenderer.cpp
@@ -1923,7 +1923,7 @@ void PdfCompatibilitySectionLooper::loop() {
PdfContext* gPdfContext = NULL;
-bool SkPdfRenderer::renderPage(int page, SkCanvas* canvas) const {
+bool SkPdfRenderer::renderPage(int page, SkCanvas* canvas, const SkRect& dst) const {
if (!fPdfDoc) {
return false;
}
@@ -1941,13 +1941,14 @@ bool SkPdfRenderer::renderPage(int page, SkCanvas* canvas) const {
gPdfContext = &pdfContext;
// TODO(edisonn): get matrix stuff right.
- // TODO(edisonn): add DPI/scale/zoom.
SkScalar z = SkIntToScalar(0);
- SkRect rect = fPdfDoc->MediaBox(page);
- SkScalar w = rect.width();
- SkScalar h = rect.height();
+ SkScalar w = dst.width();
+ SkScalar h = dst.height();
- SkPoint pdfSpace[4] = {SkPoint::Make(z, z), SkPoint::Make(w, z), SkPoint::Make(w, h), SkPoint::Make(z, h)};
+ SkScalar wp = fPdfDoc->MediaBox(page).width();
+ SkScalar hp = fPdfDoc->MediaBox(page).height();
+
+ SkPoint pdfSpace[4] = {SkPoint::Make(z, z), SkPoint::Make(wp, z), SkPoint::Make(wp, hp), SkPoint::Make(z, hp)};
// SkPoint skiaSpace[4] = {SkPoint::Make(z, h), SkPoint::Make(w, h), SkPoint::Make(w, z), SkPoint::Make(z, z)};
// TODO(edisonn): add flag for this app to create sourunding buffer zone
@@ -1977,12 +1978,12 @@ bool SkPdfRenderer::renderPage(int page, SkCanvas* canvas) const {
pdfContext.fGraphicsState.fMatrixTm = pdfContext.fGraphicsState.fMatrix;
pdfContext.fGraphicsState.fMatrixTlm = pdfContext.fGraphicsState.fMatrix;
- canvas->setMatrix(pdfContext.fOriginalMatrix);
-
#ifndef PDF_DEBUG_NO_PAGE_CLIPING
- canvas->clipRect(SkRect::MakeXYWH(z, z, w, h), SkRegion::kIntersect_Op, true);
+ canvas->clipRect(dst, SkRegion::kIntersect_Op, true);
#endif
+ canvas->setMatrix(pdfContext.fOriginalMatrix);
+
// erase with red before?
// SkPaint paint;
// paint.setColor(SK_ColorRED);
diff --git a/experimental/PdfViewer/SkPdfRenderer.h b/experimental/PdfViewer/SkPdfRenderer.h
index d0e3384202..8bbc4f1eb2 100644
--- a/experimental/PdfViewer/SkPdfRenderer.h
+++ b/experimental/PdfViewer/SkPdfRenderer.h
@@ -11,6 +11,7 @@
class SkCanvas;
class SkNativeParsedPDF;
+class SkRect;
// TODO(edisonn): move in another file
class SkPdfRenderer : public SkRefCnt {
@@ -20,7 +21,7 @@ public:
virtual ~SkPdfRenderer() {unload();}
// TODO(edisonn): add options to render forms, or not
- bool renderPage(int page, SkCanvas* canvas) const;
+ bool renderPage(int page, SkCanvas* canvas, const SkRect& dst) const;
bool load(const SkString inputFileName);
bool loaded() const {return fPdfDoc != NULL;}
diff --git a/experimental/PdfViewer/pdf_viewer_main.cpp b/experimental/PdfViewer/pdf_viewer_main.cpp
index a28e56197f..7bff14a92e 100644
--- a/experimental/PdfViewer/pdf_viewer_main.cpp
+++ b/experimental/PdfViewer/pdf_viewer_main.cpp
@@ -101,16 +101,21 @@ extern "C" SkBitmap* gDumpBitmap;
extern "C" SkCanvas* gDumpCanvas;
static bool render_page(const SkString& outputDir,
- const SkString& inputFilename,
- const SkPdfRenderer& renderer,
- int page) {
+ const SkString& inputFilename,
+ const SkPdfRenderer& renderer,
+ int page) {
SkRect rect = renderer.MediaBox(page < 0 ? 0 :page);
SkBitmap bitmap;
+ SkScalar width = SkScalarMul(rect.width(), SkDoubleToScalar(sqrt(FLAGS_DPI / 72.0)));
+ SkScalar height = SkScalarMul(rect.height(), SkDoubleToScalar(sqrt(FLAGS_DPI / 72.0)));
+
+ rect = SkRect::MakeWH(width, height);
+
#ifdef PDF_DEBUG_3X
- setup_bitmap(&bitmap, 3 * (int)SkScalarToDouble(rect.width()), 3 * (int)SkScalarToDouble(rect.height()));
+ setup_bitmap(&bitmap, 3 * (int)SkScalarToDouble(width), 3 * (int)SkScalarToDouble(height));
#else
- setup_bitmap(&bitmap, (int)SkScalarToDouble(rect.width()), (int)SkScalarToDouble(rect.height()));
+ setup_bitmap(&bitmap, (int)SkScalarToDouble(width), (int)SkScalarToDouble(height));
#endif
SkAutoTUnref<SkDevice> device(SkNEW_ARGS(SkDevice, (bitmap)));
SkCanvas canvas(device);
@@ -118,7 +123,7 @@ static bool render_page(const SkString& outputDir,
gDumpBitmap = &bitmap;
gDumpCanvas = &canvas;
- renderer.renderPage(page < 0 ? 0 : page, &canvas);
+ renderer.renderPage(page < 0 ? 0 : page, &canvas, rect);
SkString outputPath;
if (!make_output_filepath(&outputPath, outputDir, inputFilename, page)) {
diff --git a/samplecode/SamplePdfFileViewer.cpp b/samplecode/SamplePdfFileViewer.cpp
index fecc153dd1..fc8b0f0acd 100644
--- a/samplecode/SamplePdfFileViewer.cpp
+++ b/samplecode/SamplePdfFileViewer.cpp
@@ -46,7 +46,7 @@ private:
if (renderer.loaded()) {
pic = SkNEW(SkPicture);
SkCanvas* canvas = pic->beginRecording((int)renderer.MediaBox(0).width(), (int)renderer.MediaBox(0).height());
- renderer.renderPage(0, canvas);
+ renderer.renderPage(0, canvas, renderer.MediaBox(0));
pic->endRecording();
}
return pic;