LCOV - code coverage report
Current view: top level - gfx/skia/skia/src/pdf - SkPDFDocument.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 2 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 2 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2016 Google Inc.
       3             :  *
       4             :  * Use of this source code is governed by a BSD-style license that can be
       5             :  * found in the LICENSE file.
       6             :  */
       7             : #ifndef SkPDFDocument_DEFINED
       8             : #define SkPDFDocument_DEFINED
       9             : 
      10             : #include "SkDocument.h"
      11             : #include "SkPDFCanon.h"
      12             : #include "SkPDFMetadata.h"
      13             : #include "SkPDFFont.h"
      14             : 
      15             : class SkPDFDevice;
      16             : 
      17             : sk_sp<SkDocument> SkPDFMakeDocument(SkWStream* stream,
      18             :                                     void (*doneProc)(SkWStream*, bool),
      19             :                                     SkScalar rasterDpi,
      20             :                                     const SkDocument::PDFMetadata&,
      21             :                                     sk_sp<SkPixelSerializer>,
      22             :                                     bool pdfa);
      23             : 
      24             : // Logically part of SkPDFDocument (like SkPDFCanon), but separate to
      25             : // keep similar functionality together.
      26             : struct SkPDFObjectSerializer : SkNoncopyable {
      27             :     SkPDFObjNumMap fObjNumMap;
      28             :     SkTDArray<int32_t> fOffsets;
      29             :     sk_sp<SkPDFObject> fInfoDict;
      30             :     size_t fBaseOffset;
      31             :     int32_t fNextToBeSerialized;  // index in fObjNumMap
      32             : 
      33             :     SkPDFObjectSerializer();
      34             :     ~SkPDFObjectSerializer();
      35             :     void addObjectRecursively(const sk_sp<SkPDFObject>&);
      36             :     void serializeHeader(SkWStream*, const SkDocument::PDFMetadata&);
      37             :     void serializeObjects(SkWStream*);
      38             :     void serializeFooter(SkWStream*, const sk_sp<SkPDFObject>, sk_sp<SkPDFObject>);
      39             :     int32_t offset(SkWStream*);
      40             : };
      41             : 
      42             : /** Concrete implementation of SkDocument that creates PDF files. This
      43             :     class does not produced linearized or optimized PDFs; instead it
      44             :     it attempts to use a minimum amount of RAM. */
      45             : class SkPDFDocument : public SkDocument {
      46             : public:
      47             :     SkPDFDocument(SkWStream*,
      48             :                   void (*)(SkWStream*, bool),
      49             :                   SkScalar,
      50             :                   const SkDocument::PDFMetadata&,
      51             :                   sk_sp<SkPixelSerializer>,
      52             :                   bool);
      53             :     ~SkPDFDocument() override;
      54             :     SkCanvas* onBeginPage(SkScalar, SkScalar, const SkRect&) override;
      55             :     void onEndPage() override;
      56             :     void onClose(SkWStream*) override;
      57             :     void onAbort() override;
      58             : 
      59             :     /**
      60             :        Serialize the object, as well as any other objects it
      61             :        indirectly refers to.  If any any other objects have been added
      62             :        to the SkPDFObjNumMap without serializing them, they will be
      63             :        serialized as well.
      64             : 
      65             :        It might go without saying that objects should not be changed
      66             :        after calling serialize, since those changes will be too late.
      67             :      */
      68             :     void serialize(const sk_sp<SkPDFObject>&);
      69           0 :     SkPDFCanon* canon() { return &fCanon; }
      70           0 :     void registerFont(SkPDFFont* f) { fFonts.add(f); }
      71             : 
      72             : private:
      73             :     SkPDFObjectSerializer fObjectSerializer;
      74             :     SkPDFCanon fCanon;
      75             :     SkTArray<sk_sp<SkPDFDict>> fPages;
      76             :     SkTHashSet<SkPDFFont*> fFonts;
      77             :     sk_sp<SkPDFDict> fDests;
      78             :     sk_sp<SkPDFDevice> fPageDevice;
      79             :     std::unique_ptr<SkCanvas> fCanvas;
      80             :     sk_sp<SkPDFObject> fID;
      81             :     sk_sp<SkPDFObject> fXMP;
      82             :     SkScalar fRasterDpi;
      83             :     SkDocument::PDFMetadata fMetadata;
      84             :     bool fPDFA;
      85             : 
      86             :     void reset();
      87             : };
      88             : 
      89             : #endif  // SkPDFDocument_DEFINED

Generated by: LCOV version 1.13