Add DPI stettings to SkDocument::CreatePDF(). Tests will be added in a future cl, once DPI will be used in SkPDFDevice

R=reed@google.com, bungeman@google.com, vandebo@chromium.org

Author: edisonn@google.com

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

git-svn-id: http://skia.googlecode.com/svn/trunk/include@11886 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/core/SkDocument.h b/core/SkDocument.h
index b941d1b..66946fe 100644
--- a/core/SkDocument.h
+++ b/core/SkDocument.h
@@ -16,6 +16,10 @@
 class SkCanvas;
 class SkWStream;
 
+/** SK_ScalarDefaultDPI is 72 DPI.
+*/
+#define SK_ScalarDefaultRasterDPI           SkFloatToScalar(72.0f)
+
 /**
  *  High-level API for creating a document-based canvas. To use..
  *
@@ -35,9 +39,19 @@
      *  If there is an error trying to create the doc, returns NULL.
      *  encoder sets the DCTEncoder for images, to encode a bitmap
      *    as JPEG (DCT).
+     *  rasterDpi - the DPI at which features without native PDF support
+     *              will be rasterized (e.g. draw image with perspective,
+     *              draw text with perspective, ...)
+     *              A larger DPI would create a PDF that reflects the original
+     *              intent with better fidelity, but it can make for larger
+     *              PDF files too, which would use more memory while rendering,
+     *              and it would be slower to be processed or sent online or
+     *              to printer.
      */
-    static SkDocument* CreatePDF(const char filename[],
-                                 SkPicture::EncodeBitmap encoder = NULL);
+    static SkDocument* CreatePDF(
+            const char filename[],
+            SkPicture::EncodeBitmap encoder = NULL,
+            SkScalar rasterDpi = SK_ScalarDefaultRasterDPI);
 
     /**
      *  Create a PDF-backed document, writing the results into a stream.
@@ -50,9 +64,18 @@
      *  The proc can delete the stream, or whatever it needs to do.
      *  encoder sets the DCTEncoder for images, to encode a bitmap
      *    as JPEG (DCT).
-     */
-    static SkDocument* CreatePDF(SkWStream*, void (*Done)(SkWStream*) = NULL,
-                                 SkPicture::EncodeBitmap encoder = NULL);
+     *  rasterDpi - the DPI at which features without native PDF support
+     *              will be rasterized (e.g. draw image with perspective,
+     *              draw text with perspective, ...)
+     *              A larger DPI would create a PDF that reflects the original
+     *              intent with better fidelity, but it can make for larger
+     *              PDF files too, which would use more memory while rendering,
+     *              and it would be slower to be processed or sent online or
+     *              to printer.     */
+    static SkDocument* CreatePDF(
+            SkWStream*, void (*Done)(SkWStream*) = NULL,
+            SkPicture::EncodeBitmap encoder = NULL,
+            SkScalar rasterDpi = SK_ScalarDefaultRasterDPI);
 
     /**
      *  Begin a new page for the document, returning the canvas that will draw
diff --git a/pdf/SkPDFDevice.h b/pdf/SkPDFDevice.h
index d668be5..e68623e 100644
--- a/pdf/SkPDFDevice.h
+++ b/pdf/SkPDFDevice.h
@@ -197,6 +197,20 @@
 
     virtual bool allowImageFilter(SkImageFilter*) SK_OVERRIDE;
 
+    /**
+     *  rasterDpi - the DPI at which features without native PDF support
+     *              will be rasterized (e.g. draw image with perspective,
+     *              draw text with perspective, ...)
+     *              A larger DPI would create a PDF that reflects the original
+     *              intent with better fidelity, but it can make for larger
+     *              PDF files too, which would use more memory while rendering,
+     *              and it would be slower to be processed or sent online or
+     *              to printer.
+     */
+    void setRasterDpi(SkScalar rasterDpi) {
+        fRasterDpi = rasterDpi;
+    }
+
 private:
     // TODO(vandebo): push most of SkPDFDevice's state into a core object in
     // order to get the right access levels without using friend.
@@ -233,6 +247,7 @@
     SkAutoTDelete<SkPDFGlyphSetMap> fFontGlyphUsage;
 
     SkPicture::EncodeBitmap fEncoder;
+    SkScalar fRasterDpi;
 
     SkPDFDevice(const SkISize& layerSize, const SkClipStack& existingClipStack,
                 const SkRegion& existingClipRegion);