Add an option to have a PdfViewer in SampleApp. Add a parameter --pdfDir to pass the dir with pdfs. Add flag --sort to sort samples acording to title, so foo.skp follows foo.pdf and we can quickly compare diffs.
The option needs to be enabled manually by developer to be compiled locally, since the pdf viewer is work in progress.

R=reed@google.com

Review URL: https://codereview.chromium.org/17904006

git-svn-id: http://skia.googlecode.com/svn/trunk@10004 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/samplecode/SamplePdfFileViewer.cpp b/samplecode/SamplePdfFileViewer.cpp
new file mode 100644
index 0000000..cd39901
--- /dev/null
+++ b/samplecode/SamplePdfFileViewer.cpp
@@ -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