Revert "Remove SkPDFDocument and SkPDFDevice from the public headers."
authorreed <reed@google.com>
Tue, 6 Jan 2015 17:54:13 +0000 (09:54 -0800)
committerCommit bot <commit-bot@chromium.org>
Tue, 6 Jan 2015 17:54:14 +0000 (09:54 -0800)
This reverts commit 8b1f761365df6652ea9304b6572d2dd91917b9aa.

BUG=skia:
TBR=
NOTRY=True
NOTREECHECKS=True

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

gm/gmmain.cpp
gyp/pdf.gyp
gyp/pdf.gypi
gyp/tools.gyp
include/pdf/SkPDFDevice.h [moved from src/pdf/SkPDFDevice.h with 100% similarity]
include/pdf/SkPDFDocument.h [moved from src/pdf/SkPDFDocument.h with 100% similarity]

index b8c8891..ece8ff3 100644 (file)
@@ -74,6 +74,13 @@ typedef int GrGLStandard;
 
 #define DEBUGFAIL_SEE_STDERR SkDEBUGFAIL("see stderr for message")
 
+DECLARE_bool(useDocumentInsteadOfDevice);
+
+#ifdef SK_SUPPORT_PDF
+    #include "SkPDFDevice.h"
+    #include "SkPDFDocument.h"
+#endif
+
 // Until we resolve http://code.google.com/p/skia/issues/detail?id=455 ,
 // stop writing out XPS-format image baselines in gm.
 #undef SK_SUPPORT_XPS
@@ -668,24 +675,53 @@ public:
 
     static bool generate_pdf(GM* gm, SkDynamicMemoryWStream& pdf) {
 #ifdef SK_SUPPORT_PDF
-        SkAutoTUnref<SkDocument> pdfDoc(
-                SkDocument::CreatePDF(&pdf, NULL, encode_to_dct_data,
-                                      SkIntToScalar(FLAGS_pdfRasterDpi)));
-        if (!pdfDoc) {
-            return false;
-        }
-
-        SkCanvas* canvas = NULL;
-        canvas = pdfDoc->beginPage(gm->width(), gm->height());
-        canvas->concat(gm->getInitialTransform());
+        SkMatrix initialTransform = gm->getInitialTransform();
+        if (FLAGS_useDocumentInsteadOfDevice) {
+            SkISize pageISize = gm->getISize();
+            SkAutoTUnref<SkDocument> pdfDoc(
+                    SkDocument::CreatePDF(&pdf, NULL,
+                                          encode_to_dct_data,
+                                          SkIntToScalar(FLAGS_pdfRasterDpi)));
+
+            if (!pdfDoc.get()) {
+                return false;
+            }
 
-        invokeGM(gm, canvas, true, false);
+            SkCanvas* canvas = NULL;
+            canvas = pdfDoc->beginPage(SkIntToScalar(pageISize.width()),
+                                       SkIntToScalar(pageISize.height()));
+            canvas->concat(initialTransform);
 
-        return pdfDoc->close();
+            invokeGM(gm, canvas, true, false);
 
-#else   // SK_SUPPORT_PDF
-        return true;  // Do not report failure if pdf is not supported.
+            return pdfDoc->close();
+        } else {
+            SkISize pageSize = gm->getISize();
+            SkPDFDevice* dev = NULL;
+            if (initialTransform.isIdentity()) {
+                dev = new SkPDFDevice(pageSize, pageSize, initialTransform);
+            } else {
+                SkRect content = SkRect::MakeWH(SkIntToScalar(pageSize.width()),
+                                                SkIntToScalar(pageSize.height()));
+                initialTransform.mapRect(&content);
+                content.intersect(0, 0, SkIntToScalar(pageSize.width()),
+                                  SkIntToScalar(pageSize.height()));
+                SkISize contentSize =
+                    SkISize::Make(SkScalarRoundToInt(content.width()),
+                                  SkScalarRoundToInt(content.height()));
+                dev = new SkPDFDevice(pageSize, contentSize, initialTransform);
+            }
+            dev->setDCTEncoder(encode_to_dct_data);
+            dev->setRasterDpi(SkIntToScalar(FLAGS_pdfRasterDpi));
+            SkAutoUnref aur(dev);
+            SkCanvas c(dev);
+            invokeGM(gm, &c, true, false);
+            SkPDFDocument doc;
+            doc.appendPage(dev);
+            doc.emitPDF(&pdf);
+        }
 #endif  // SK_SUPPORT_PDF
+        return true; // Do not report failure if pdf is not supported.
     }
 
     static void generate_xps(GM* gm, SkDynamicMemoryWStream& xps) {
@@ -1542,6 +1578,7 @@ DEFINE_int32(pdfJpegQuality, -1, "Encodes images in JPEG at quality level N, "
 // Probably define spacial names like centerx, centery, top, bottom, left, right
 // then we can write something reabable like --rotate centerx centery 90
 DEFINE_bool(forcePerspectiveMatrix, false, "Force a perspective matrix.");
+DEFINE_bool(useDocumentInsteadOfDevice, false, "Use SkDocument::CreateFoo instead of SkFooDevice.");
 DEFINE_int32(pdfRasterDpi, 72, "Scale at which at which the non suported "
              "features in PDF are rasterized. Must be be in range 0-10000. "
              "Default is 72. N = 0 will disable rasterizing features like "
index e149909..76b23bb 100644 (file)
@@ -14,6 +14,7 @@
         'pdf.gypi',
       ],
       'include_dirs': [
+        '../include/pdf',
         '../src/core', # needed to get SkGlyphCache.h and SkTextFormatParams.h
         '../src/pdf',
         '../src/utils', # needed to get SkBitSet.h
           }
         ],
       ],
+      # This section makes all targets that depend on this target
+      # #define SK_SUPPORT_PDF and have access to the pdf header files.
       'direct_dependent_settings': {
         'defines': [
           'SK_SUPPORT_PDF',
         ],
+        'include_dirs': [
+          '../include/pdf',
+        ],
       },
     },
   ],
index fd4bdc5..e4cb958 100644 (file)
@@ -7,15 +7,17 @@
 #
 {
     'sources': [
+        '<(skia_include_path)/pdf/SkPDFDevice.h',
+        '<(skia_include_path)/pdf/SkPDFDocument.h',
+
         '<(skia_src_path)/doc/SkDocument_PDF.cpp',
+
         '<(skia_src_path)/pdf/SkPDFCatalog.cpp',
         '<(skia_src_path)/pdf/SkPDFCatalog.h',
         '<(skia_src_path)/pdf/SkPDFDevice.cpp',
-        '<(skia_src_path)/pdf/SkPDFDevice.h',
         '<(skia_src_path)/pdf/SkPDFDeviceFlattener.cpp',
         '<(skia_src_path)/pdf/SkPDFDeviceFlattener.h',
         '<(skia_src_path)/pdf/SkPDFDocument.cpp',
-        '<(skia_src_path)/pdf/SkPDFDocument.h',
         '<(skia_src_path)/pdf/SkPDFFont.cpp',
         '<(skia_src_path)/pdf/SkPDFFont.h',
         '<(skia_src_path)/pdf/SkPDFFontImpl.h',
index 5cb6cdf..1341666 100644 (file)
           '<(skia_include_path)/gpu',
           '<(skia_include_path)/images',
           '<(skia_include_path)/pathops',
+          '<(skia_include_path)/pdf',
           '<(skia_include_path)/pipe',
           '<(skia_include_path)/ports',
           '<(skia_include_path)/svg',