Home | History | Annotate | Download | only in fxfa
      1 // Copyright 2014 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 
      7 #ifndef XFA_FXFA_CXFA_FFDOC_H_
      8 #define XFA_FXFA_CXFA_FFDOC_H_
      9 
     10 #include <map>
     11 #include <memory>
     12 
     13 #include "core/fxcrt/unowned_ptr.h"
     14 #include "xfa/fxfa/fxfa.h"
     15 #include "xfa/fxfa/parser/cxfa_document.h"
     16 #include "xfa/fxfa/parser/cxfa_document_parser.h"
     17 
     18 class CFGAS_PDFFontMgr;
     19 class CFX_ChecksumContext;
     20 class CPDF_Document;
     21 class CXFA_FFApp;
     22 class CXFA_FFNotify;
     23 class CXFA_FFDocView;
     24 
     25 struct FX_IMAGEDIB_AND_DPI {
     26   FX_IMAGEDIB_AND_DPI();
     27   FX_IMAGEDIB_AND_DPI(const FX_IMAGEDIB_AND_DPI& that);
     28   FX_IMAGEDIB_AND_DPI(const RetainPtr<CFX_DIBSource>& pDib,
     29                       int32_t xDpi,
     30                       int32_t yDpi);
     31   ~FX_IMAGEDIB_AND_DPI();
     32 
     33   RetainPtr<CFX_DIBSource> pDibSource;
     34   int32_t iImageXDpi;
     35   int32_t iImageYDpi;
     36 };
     37 
     38 inline FX_IMAGEDIB_AND_DPI::FX_IMAGEDIB_AND_DPI() = default;
     39 inline FX_IMAGEDIB_AND_DPI::FX_IMAGEDIB_AND_DPI(
     40     const FX_IMAGEDIB_AND_DPI& that) = default;
     41 
     42 inline FX_IMAGEDIB_AND_DPI::FX_IMAGEDIB_AND_DPI(
     43     const RetainPtr<CFX_DIBSource>& pDib,
     44     int32_t xDpi,
     45     int32_t yDpi)
     46     : pDibSource(pDib), iImageXDpi(xDpi), iImageYDpi(yDpi) {}
     47 
     48 inline FX_IMAGEDIB_AND_DPI::~FX_IMAGEDIB_AND_DPI() = default;
     49 
     50 class CXFA_FFDoc {
     51  public:
     52   CXFA_FFDoc(CXFA_FFApp* pApp, IXFA_DocEnvironment* pDocEnvironment);
     53   ~CXFA_FFDoc();
     54 
     55   IXFA_DocEnvironment* GetDocEnvironment() const {
     56     return m_pDocEnvironment.Get();
     57   }
     58   FormType GetFormType() const { return m_FormType; }
     59 
     60   int32_t StartLoad();
     61   int32_t DoLoad();
     62   void StopLoad();
     63 
     64   CXFA_FFDocView* CreateDocView();
     65 
     66   bool OpenDoc(CPDF_Document* pPDFDoc);
     67   void CloseDoc();
     68 
     69   CXFA_Document* GetXFADoc() const { return m_pDocumentParser->GetDocument(); }
     70   CXFA_FFApp* GetApp() const { return m_pApp.Get(); }
     71   CPDF_Document* GetPDFDoc() const { return m_pPDFDoc.Get(); }
     72   CXFA_FFDocView* GetDocView(CXFA_LayoutProcessor* pLayout);
     73   CXFA_FFDocView* GetDocView();
     74   RetainPtr<CFX_DIBitmap> GetPDFNamedImage(const WideStringView& wsName,
     75                                            int32_t& iImageXDpi,
     76                                            int32_t& iImageYDpi);
     77   CFGAS_PDFFontMgr* GetPDFFontMgr() const { return m_pPDFFontMgr.get(); }
     78 
     79   bool SavePackage(CXFA_Node* pNode,
     80                    const RetainPtr<IFX_SeekableStream>& pFile,
     81                    CFX_ChecksumContext* pCSContext);
     82   bool ImportData(const RetainPtr<IFX_SeekableStream>& pStream,
     83                   bool bXDP = true);
     84 
     85  private:
     86   UnownedPtr<IXFA_DocEnvironment> const m_pDocEnvironment;
     87   std::unique_ptr<CXFA_DocumentParser> m_pDocumentParser;
     88   RetainPtr<IFX_SeekableStream> m_pStream;
     89   UnownedPtr<CXFA_FFApp> const m_pApp;
     90   std::unique_ptr<CXFA_FFNotify> m_pNotify;
     91   UnownedPtr<CPDF_Document> m_pPDFDoc;
     92   std::map<uint32_t, FX_IMAGEDIB_AND_DPI> m_HashToDibDpiMap;
     93   std::unique_ptr<CXFA_FFDocView> m_DocView;
     94   std::unique_ptr<CFGAS_PDFFontMgr> m_pPDFFontMgr;
     95   FormType m_FormType = FormType::kXFAForeground;
     96 };
     97 
     98 #endif  // XFA_FXFA_CXFA_FFDOC_H_
     99