Index: samplecode/SampleApp.cpp |
=================================================================== |
--- samplecode/SampleApp.cpp (revision 9812) |
+++ samplecode/SampleApp.cpp (working copy) |
@@ -15,6 +15,7 @@ |
#include "SkPaint.h" |
#include "SkPicture.h" |
#include "SkStream.h" |
+#include "SkTSort.h" |
#include "SkTime.h" |
#include "SkWindow.h" |
@@ -54,6 +55,19 @@ |
} |
}; |
+#ifdef SAMPLE_PDF_FILE_VIEWER |
+extern SampleView* CreateSamplePdfFileViewer(const char filename[]); |
+ |
+class PdfFileViewerFactory : public SkViewFactory { |
+ SkString fFilename; |
+public: |
+ PdfFileViewerFactory(const SkString& filename) : fFilename(filename) {} |
+ virtual SkView* operator() () const SK_OVERRIDE { |
+ return CreateSamplePdfFileViewer(fFilename.c_str()); |
+ } |
+}; |
+#endif // SAMPLE_PDF_FILE_VIEWER |
+ |
#define PIPE_FILEx |
#ifdef PIPE_FILE |
#define FILE_PATH "/path/to/drawing.data" |
@@ -690,14 +704,31 @@ |
} |
static void usage(const char * argv0) { |
- SkDebugf("%s [--slide sampleName] [-i resourcePath] [--msaa sampleCount] [--pictureDir dirPath] [--picture path]\n", argv0); |
+ SkDebugf("%s [--slide sampleName] [-i resourcePath] [--msaa sampleCount] [--pictureDir dirPath] [--picture path] [--sort]\n", argv0); |
+#ifdef SAMPLE_PDF_FILE_VIEWER |
+ SkDebugf(" [--pdfDir pdfPath]\n"); |
+ SkDebugf(" pdfPath: path to directory pdf files are read from\n"); |
+#endif // SAMPLE_PDF_FILE_VIEWER |
SkDebugf(" sampleName: sample at which to start.\n"); |
SkDebugf(" resourcePath: directory that stores image resources.\n"); |
SkDebugf(" msaa: request multisampling with the given sample count.\n"); |
SkDebugf(" dirPath: path to directory skia pictures are read from\n"); |
SkDebugf(" path: path to skia picture\n"); |
+ SkDebugf(" --sort: sort samples by title, this would help to compare pdf rendering (P:foo.pdf) with skp rendering (P:foo.pdf)\n"); |
} |
+static SkString getSampleTitle(const SkViewFactory* sampleFactory) { |
+ SkView* view = (*sampleFactory)(); |
+ SkString title; |
+ SampleCode::RequestTitle(view, &title); |
+ view->unref(); |
+ return title; |
+} |
+ |
+bool compareSampleTitle(const SkViewFactory* first, const SkViewFactory* second) { |
+ return strcmp(getSampleTitle(first).c_str(), getSampleTitle(second).c_str()) < 0; |
+} |
+ |
SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* devManager) |
: INHERITED(hwnd) |
, fDevManager(NULL) { |
@@ -706,6 +737,9 @@ |
this->registerPictFileSamples(argv, argc); |
this->registerPictFileSample(argv, argc); |
+#ifdef SAMPLE_PDF_FILE_VIEWER |
+ this->registerPdfFileViewerSamples(argv, argc); |
+#endif // SAMPLE_PDF_FILE_VIEWER |
SkGMRegistyToSampleRegistry(); |
{ |
const SkViewRegister* reg = SkViewRegister::Head(); |
@@ -715,6 +749,20 @@ |
} |
} |
+ bool sort = false; |
+ for (int i = 0; i < argc; ++i) { |
+ if (!strcmp(argv[i], "--sort")) { |
+ sort = true; |
+ break; |
+ } |
+ } |
+ |
+ if (sort) { |
+ // Sort samples, so foo.skp and foo.pdf are consecutive and we can quickly spot where |
+ // skp -> pdf -> png fails. |
+ SkTQSort(fSamples.begin(), fSamples.end() ? fSamples.end() - 1 : NULL, compareSampleTitle); |
+ } |
+ |
const char* resourcePath = NULL; |
fMSAASampleCount = 0; |
@@ -969,6 +1017,32 @@ |
} |
} |
+#ifdef SAMPLE_PDF_FILE_VIEWER |
+void SampleWindow::registerPdfFileViewerSamples(char** argv, int argc) { |
+ const char* pdfDir = NULL; |
+ |
+ for (int i = 0; i < argc; ++i) { |
+ if (!strcmp(argv[i], "--pdfDir")) { |
+ i += 1; |
+ if (i < argc) { |
+ pdfDir = argv[i]; |
+ break; |
+ } |
+ } |
+ } |
+ if (pdfDir) { |
+ SkOSFile::Iter iter(pdfDir, "pdf"); |
+ SkString filename; |
+ while (iter.next(&filename)) { |
+ SkString path; |
+ make_filepath(&path, pdfDir, filename); |
+ *fSamples.append() = new PdfFileViewerFactory(path); |
+ } |
+ } |
+} |
+#endif // SAMPLE_PDF_FILE_VIEWER |
+ |
+ |
int SampleWindow::findByTitle(const char title[]) { |
int i, count = fSamples.count(); |
for (i = 0; i < count; i++) { |
@@ -1534,11 +1608,7 @@ |
} |
SkString SampleWindow::getSampleTitle(int i) { |
- SkView* view = (*fSamples[i])(); |
- SkString title; |
- SampleCode::RequestTitle(view, &title); |
- view->unref(); |
- return title; |
+ return ::getSampleTitle(fSamples[i]); |
} |
int SampleWindow::sampleCount() { |