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

Unified Diff: samplecode/SamplePdfFileViewer.cpp

Issue 17904006: Add an option to have a PdfViewer in SampleApp. Add a parameter --pdfDir to pass the dir with pdfs.… (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « samplecode/SampleApp.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: samplecode/SamplePdfFileViewer.cpp
===================================================================
--- samplecode/SamplePdfFileViewer.cpp (revision 0)
+++ samplecode/SamplePdfFileViewer.cpp (revision 0)
@@ -0,0 +1,106 @@
+
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifdef SAMPLE_PDF_FILE_VIEWER
+
+#include "SampleCode.h"
+#include "SkDumpCanvas.h"
+#include "SkView.h"
+#include "SkCanvas.h"
+#include "Sk64.h"
+#include "SkGradientShader.h"
+#include "SkGraphics.h"
+#include "SkImageDecoder.h"
+#include "SkOSFile.h"
+#include "SkPath.h"
+#include "SkPicture.h"
+#include "SkRandom.h"
+#include "SkRegion.h"
+#include "SkShader.h"
+#include "SkUtils.h"
+#include "SkColorPriv.h"
+#include "SkColorFilter.h"
+#include "SkTime.h"
+#include "SkTypeface.h"
+#include "SkXfermode.h"
+
+#include "SkPodofoParsedPDF.h"
+
+class PdfFileViewer : public SampleView {
+private:
+ SkString fFilename;
+ SkPicture* fPicture; // TODO(edisonn): multiple pages, one page / picture, make it an array
+
+ static SkPicture* LoadPdf(const char path[]) {
+ SkPicture* pic = NULL;
+
+ SkPodofoParsedPDF doc(path);
+ if (doc.pages()) {
+ pic = SkNEW(SkPicture);
+ SkCanvas* canvas = pic->beginRecording((int)doc.width(0), (int)doc.height(0));
+ doc.drawPage(0, canvas);
+ pic->endRecording();
+ }
+ return pic;
+ }
+
+public:
+ PdfFileViewer(const char name[] = NULL) : fFilename(name) {
+ fPicture = NULL;
+ }
+
+ virtual ~PdfFileViewer() {
+ SkSafeUnref(fPicture);
+ }
+
+protected:
+ // overrides from SkEventSink
+ virtual bool onQuery(SkEvent* evt) {
+ if (SampleCode::TitleQ(*evt)) {
+ SkString name("P:");
+ const char* basename = strrchr(fFilename.c_str(), SkPATH_SEPARATOR);
+ name.append(basename ? basename+1: fFilename.c_str());
+ SampleCode::TitleR(evt, name.c_str());
+ return true;
+ }
+ return this->INHERITED::onQuery(evt);
+ }
+
+ virtual bool onEvent(const SkEvent& evt) {
+ // TODO(edisonn): add here event handlers to disable clipping, or to show helpful info
+ // like pdf object from click, ...
+ // TODO(edisonn): first, next, prev, last page navigation + slideshow
+ return this->INHERITED::onEvent(evt);
+ }
+
+ virtual void onDrawContent(SkCanvas* canvas) {
+ if (!fPicture) {
+ fPicture = LoadPdf(fFilename.c_str());
+ }
+ if (fPicture) {
+ canvas->drawPicture(*fPicture);
+ }
+ }
+
+private:
+ typedef SampleView INHERITED;
+};
+
+SampleView* CreateSamplePdfFileViewer(const char filename[]);
+SampleView* CreateSamplePdfFileViewer(const char filename[]) {
+ return new PdfFileViewer(filename);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+#if 0
+static SkView* MyFactory() { return new PdfFileViewer; }
+static SkViewRegister reg(MyFactory);
+#endif
+
+#endif // SAMPLE_PDF_FILE_VIEWER
« no previous file with comments | « samplecode/SampleApp.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698