1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #ifndef XFA_FXFA_CXFA_FFDOC_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define XFA_FXFA_CXFA_FFDOC_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <map> 11*3ac0a46fSAndroid Build Coastguard Worker #include <memory> 12*3ac0a46fSAndroid Build Coastguard Worker 13*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_coordinates.h" 14*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_stream.h" 15*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/mask.h" 16*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/retain_ptr.h" 17*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/unowned_ptr.h" 18*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxge/dib/fx_dib.h" 19*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/gc/heap.h" 20*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/garbage-collected.h" 21*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/member.h" 22*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/prefinalizer.h" 23*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/visitor.h" 24*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/fxfa.h" 25*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cxfa_document.h" 26*3ac0a46fSAndroid Build Coastguard Worker 27*3ac0a46fSAndroid Build Coastguard Worker class CFGAS_GEFont; 28*3ac0a46fSAndroid Build Coastguard Worker class CFGAS_PDFFontMgr; 29*3ac0a46fSAndroid Build Coastguard Worker class CFX_DIBBase; 30*3ac0a46fSAndroid Build Coastguard Worker class CFX_DIBitmap; 31*3ac0a46fSAndroid Build Coastguard Worker class CFX_XMLDocument; 32*3ac0a46fSAndroid Build Coastguard Worker class CPDF_Document; 33*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFApp; 34*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFDoc; 35*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFDocView; 36*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFNotify; 37*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFPageView; 38*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFWidget; 39*3ac0a46fSAndroid Build Coastguard Worker class CXFA_LayoutProcessor; 40*3ac0a46fSAndroid Build Coastguard Worker class IJS_Runtime; 41*3ac0a46fSAndroid Build Coastguard Worker 42*3ac0a46fSAndroid Build Coastguard Worker struct FX_IMAGEDIB_AND_DPI { 43*3ac0a46fSAndroid Build Coastguard Worker FX_IMAGEDIB_AND_DPI(); 44*3ac0a46fSAndroid Build Coastguard Worker FX_IMAGEDIB_AND_DPI(const FX_IMAGEDIB_AND_DPI& that); 45*3ac0a46fSAndroid Build Coastguard Worker FX_IMAGEDIB_AND_DPI(const RetainPtr<CFX_DIBBase>& pDib, 46*3ac0a46fSAndroid Build Coastguard Worker int32_t xDpi, 47*3ac0a46fSAndroid Build Coastguard Worker int32_t yDpi); 48*3ac0a46fSAndroid Build Coastguard Worker ~FX_IMAGEDIB_AND_DPI(); 49*3ac0a46fSAndroid Build Coastguard Worker 50*3ac0a46fSAndroid Build Coastguard Worker RetainPtr<CFX_DIBBase> pDibSource; 51*3ac0a46fSAndroid Build Coastguard Worker int32_t iImageXDpi; 52*3ac0a46fSAndroid Build Coastguard Worker int32_t iImageYDpi; 53*3ac0a46fSAndroid Build Coastguard Worker }; 54*3ac0a46fSAndroid Build Coastguard Worker 55*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFDoc : public cppgc::GarbageCollected<CXFA_FFDoc> { 56*3ac0a46fSAndroid Build Coastguard Worker CPPGC_USING_PRE_FINALIZER(CXFA_FFDoc, PreFinalize); 57*3ac0a46fSAndroid Build Coastguard Worker 58*3ac0a46fSAndroid Build Coastguard Worker public: 59*3ac0a46fSAndroid Build Coastguard Worker enum class PageViewEvent { 60*3ac0a46fSAndroid Build Coastguard Worker kPostAdded = 1, 61*3ac0a46fSAndroid Build Coastguard Worker kPostRemoved = 3, 62*3ac0a46fSAndroid Build Coastguard Worker kStopLayout = 4, 63*3ac0a46fSAndroid Build Coastguard Worker }; 64*3ac0a46fSAndroid Build Coastguard Worker 65*3ac0a46fSAndroid Build Coastguard Worker class CallbackIface { 66*3ac0a46fSAndroid Build Coastguard Worker public: 67*3ac0a46fSAndroid Build Coastguard Worker virtual ~CallbackIface() = default; 68*3ac0a46fSAndroid Build Coastguard Worker 69*3ac0a46fSAndroid Build Coastguard Worker virtual void SetChangeMark(CXFA_FFDoc* hDoc) = 0; 70*3ac0a46fSAndroid Build Coastguard Worker virtual void InvalidateRect(CXFA_FFPageView* pPageView, 71*3ac0a46fSAndroid Build Coastguard Worker const CFX_RectF& rt) = 0; 72*3ac0a46fSAndroid Build Coastguard Worker // Show or hide caret. 73*3ac0a46fSAndroid Build Coastguard Worker virtual void DisplayCaret(CXFA_FFWidget* hWidget, 74*3ac0a46fSAndroid Build Coastguard Worker bool bVisible, 75*3ac0a46fSAndroid Build Coastguard Worker const CFX_RectF* pRtAnchor) = 0; 76*3ac0a46fSAndroid Build Coastguard Worker 77*3ac0a46fSAndroid Build Coastguard Worker virtual bool GetPopupPos(CXFA_FFWidget* hWidget, 78*3ac0a46fSAndroid Build Coastguard Worker float fMinPopup, 79*3ac0a46fSAndroid Build Coastguard Worker float fMaxPopup, 80*3ac0a46fSAndroid Build Coastguard Worker const CFX_RectF& rtAnchor, 81*3ac0a46fSAndroid Build Coastguard Worker CFX_RectF* pPopupRect) = 0; 82*3ac0a46fSAndroid Build Coastguard Worker virtual bool PopupMenu(CXFA_FFWidget* hWidget, 83*3ac0a46fSAndroid Build Coastguard Worker const CFX_PointF& ptPopup) = 0; 84*3ac0a46fSAndroid Build Coastguard Worker 85*3ac0a46fSAndroid Build Coastguard Worker virtual void OnPageViewEvent(CXFA_FFPageView* pPageView, 86*3ac0a46fSAndroid Build Coastguard Worker PageViewEvent eEvent) = 0; 87*3ac0a46fSAndroid Build Coastguard Worker 88*3ac0a46fSAndroid Build Coastguard Worker // Caller must not pass in nullptr. 89*3ac0a46fSAndroid Build Coastguard Worker virtual void WidgetPostAdd(CXFA_FFWidget* hWidget) = 0; 90*3ac0a46fSAndroid Build Coastguard Worker virtual void WidgetPreRemove(CXFA_FFWidget* hWidget) = 0; 91*3ac0a46fSAndroid Build Coastguard Worker 92*3ac0a46fSAndroid Build Coastguard Worker virtual int32_t CountPages(const CXFA_FFDoc* hDoc) const = 0; 93*3ac0a46fSAndroid Build Coastguard Worker virtual int32_t GetCurrentPage(const CXFA_FFDoc* hDoc) const = 0; 94*3ac0a46fSAndroid Build Coastguard Worker virtual void SetCurrentPage(CXFA_FFDoc* hDoc, int32_t iCurPage) = 0; 95*3ac0a46fSAndroid Build Coastguard Worker virtual bool IsCalculationsEnabled(const CXFA_FFDoc* hDoc) const = 0; 96*3ac0a46fSAndroid Build Coastguard Worker virtual void SetCalculationsEnabled(CXFA_FFDoc* hDoc, bool bEnabled) = 0; 97*3ac0a46fSAndroid Build Coastguard Worker virtual WideString GetTitle(const CXFA_FFDoc* hDoc) const = 0; 98*3ac0a46fSAndroid Build Coastguard Worker virtual void SetTitle(CXFA_FFDoc* hDoc, const WideString& wsTitle) = 0; 99*3ac0a46fSAndroid Build Coastguard Worker virtual void ExportData(CXFA_FFDoc* hDoc, 100*3ac0a46fSAndroid Build Coastguard Worker const WideString& wsFilePath, 101*3ac0a46fSAndroid Build Coastguard Worker bool bXDP) = 0; 102*3ac0a46fSAndroid Build Coastguard Worker virtual void GotoURL(CXFA_FFDoc* hDoc, const WideString& bsURL) = 0; 103*3ac0a46fSAndroid Build Coastguard Worker virtual bool IsValidationsEnabled(const CXFA_FFDoc* hDoc) const = 0; 104*3ac0a46fSAndroid Build Coastguard Worker virtual void SetValidationsEnabled(CXFA_FFDoc* hDoc, bool bEnabled) = 0; 105*3ac0a46fSAndroid Build Coastguard Worker virtual void SetFocusWidget(CXFA_FFDoc* hDoc, CXFA_FFWidget* hWidget) = 0; 106*3ac0a46fSAndroid Build Coastguard Worker virtual void Print(CXFA_FFDoc* hDoc, 107*3ac0a46fSAndroid Build Coastguard Worker int32_t nStartPage, 108*3ac0a46fSAndroid Build Coastguard Worker int32_t nEndPage, 109*3ac0a46fSAndroid Build Coastguard Worker Mask<XFA_PrintOpt> dwOptions) = 0; 110*3ac0a46fSAndroid Build Coastguard Worker virtual FX_ARGB GetHighlightColor(const CXFA_FFDoc* hDoc) const = 0; 111*3ac0a46fSAndroid Build Coastguard Worker virtual IJS_Runtime* GetIJSRuntime(const CXFA_FFDoc* hDoc) const = 0; 112*3ac0a46fSAndroid Build Coastguard Worker virtual CFX_XMLDocument* GetXMLDoc() const = 0; 113*3ac0a46fSAndroid Build Coastguard Worker virtual RetainPtr<IFX_SeekableReadStream> OpenLinkedFile( 114*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDoc* hDoc, 115*3ac0a46fSAndroid Build Coastguard Worker const WideString& wsLink) = 0; 116*3ac0a46fSAndroid Build Coastguard Worker 117*3ac0a46fSAndroid Build Coastguard Worker #ifdef PDF_XFA_ELEMENT_SUBMIT_ENABLED 118*3ac0a46fSAndroid Build Coastguard Worker virtual bool Submit(CXFA_FFDoc* hDoc, CXFA_Submit* submit) = 0; 119*3ac0a46fSAndroid Build Coastguard Worker #endif // PDF_XFA_ELEMENT_SUBMIT_ENABLED 120*3ac0a46fSAndroid Build Coastguard Worker }; 121*3ac0a46fSAndroid Build Coastguard Worker 122*3ac0a46fSAndroid Build Coastguard Worker CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; 123*3ac0a46fSAndroid Build Coastguard Worker ~CXFA_FFDoc(); 124*3ac0a46fSAndroid Build Coastguard Worker 125*3ac0a46fSAndroid Build Coastguard Worker void PreFinalize(); 126*3ac0a46fSAndroid Build Coastguard Worker void Trace(cppgc::Visitor* visitor) const; 127*3ac0a46fSAndroid Build Coastguard Worker 128*3ac0a46fSAndroid Build Coastguard Worker bool OpenDoc(CFX_XMLDocument* pXML); 129*3ac0a46fSAndroid Build Coastguard Worker 130*3ac0a46fSAndroid Build Coastguard Worker void SetChangeMark(); 131*3ac0a46fSAndroid Build Coastguard Worker void InvalidateRect(CXFA_FFPageView* pPageView, const CFX_RectF& rt); 132*3ac0a46fSAndroid Build Coastguard Worker void DisplayCaret(CXFA_FFWidget* hWidget, 133*3ac0a46fSAndroid Build Coastguard Worker bool bVisible, 134*3ac0a46fSAndroid Build Coastguard Worker const CFX_RectF* pRtAnchor); 135*3ac0a46fSAndroid Build Coastguard Worker bool GetPopupPos(CXFA_FFWidget* hWidget, 136*3ac0a46fSAndroid Build Coastguard Worker float fMinPopup, 137*3ac0a46fSAndroid Build Coastguard Worker float fMaxPopup, 138*3ac0a46fSAndroid Build Coastguard Worker const CFX_RectF& rtAnchor, 139*3ac0a46fSAndroid Build Coastguard Worker CFX_RectF* pPopupRect) const; 140*3ac0a46fSAndroid Build Coastguard Worker bool PopupMenu(CXFA_FFWidget* hWidget, const CFX_PointF& ptPopup); 141*3ac0a46fSAndroid Build Coastguard Worker void OnPageViewEvent(CXFA_FFPageView* pPageView, PageViewEvent eEvent); 142*3ac0a46fSAndroid Build Coastguard Worker void WidgetPostAdd(CXFA_FFWidget* hWidget); 143*3ac0a46fSAndroid Build Coastguard Worker void WidgetPreRemove(CXFA_FFWidget* hWidget); 144*3ac0a46fSAndroid Build Coastguard Worker int32_t CountPages() const; 145*3ac0a46fSAndroid Build Coastguard Worker int32_t GetCurrentPage() const; 146*3ac0a46fSAndroid Build Coastguard Worker void SetCurrentPage(int32_t iCurPage); 147*3ac0a46fSAndroid Build Coastguard Worker bool IsCalculationsEnabled() const; 148*3ac0a46fSAndroid Build Coastguard Worker void SetCalculationsEnabled(bool bEnabled); 149*3ac0a46fSAndroid Build Coastguard Worker WideString GetTitle() const; 150*3ac0a46fSAndroid Build Coastguard Worker void SetTitle(const WideString& wsTitle); 151*3ac0a46fSAndroid Build Coastguard Worker void ExportData(const WideString& wsFilePath, bool bXDP); 152*3ac0a46fSAndroid Build Coastguard Worker void GotoURL(const WideString& bsURL); 153*3ac0a46fSAndroid Build Coastguard Worker bool IsValidationsEnabled() const; 154*3ac0a46fSAndroid Build Coastguard Worker void SetValidationsEnabled(bool bEnabled); 155*3ac0a46fSAndroid Build Coastguard Worker void SetFocusWidget(CXFA_FFWidget* hWidget); 156*3ac0a46fSAndroid Build Coastguard Worker void Print(int32_t nStartPage, 157*3ac0a46fSAndroid Build Coastguard Worker int32_t nEndPage, 158*3ac0a46fSAndroid Build Coastguard Worker Mask<XFA_PrintOpt> dwOptions); 159*3ac0a46fSAndroid Build Coastguard Worker FX_ARGB GetHighlightColor() const; 160*3ac0a46fSAndroid Build Coastguard Worker IJS_Runtime* GetIJSRuntime() const; 161*3ac0a46fSAndroid Build Coastguard Worker CFX_XMLDocument* GetXMLDocument() const; 162*3ac0a46fSAndroid Build Coastguard Worker RetainPtr<IFX_SeekableReadStream> OpenLinkedFile(const WideString& wsLink); 163*3ac0a46fSAndroid Build Coastguard Worker 164*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDocView* CreateDocView(); GetFormType()165*3ac0a46fSAndroid Build Coastguard Worker FormType GetFormType() const { return m_FormType; } GetHeap()166*3ac0a46fSAndroid Build Coastguard Worker cppgc::Heap* GetHeap() const { return m_pHeap; } GetXFADoc()167*3ac0a46fSAndroid Build Coastguard Worker CXFA_Document* GetXFADoc() const { return m_pDocument; } GetApp()168*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFApp* GetApp() const { return m_pApp; } GetPDFDoc()169*3ac0a46fSAndroid Build Coastguard Worker CPDF_Document* GetPDFDoc() const { return m_pPDFDoc; } 170*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDocView* GetDocView(CXFA_LayoutProcessor* pLayout); 171*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDocView* GetDocView(); 172*3ac0a46fSAndroid Build Coastguard Worker RetainPtr<CFGAS_GEFont> GetPDFFont(const WideString& family, 173*3ac0a46fSAndroid Build Coastguard Worker uint32_t styles, 174*3ac0a46fSAndroid Build Coastguard Worker bool strict); 175*3ac0a46fSAndroid Build Coastguard Worker RetainPtr<CFX_DIBitmap> GetPDFNamedImage(WideStringView wsName, 176*3ac0a46fSAndroid Build Coastguard Worker int32_t& iImageXDpi, 177*3ac0a46fSAndroid Build Coastguard Worker int32_t& iImageYDpi); 178*3ac0a46fSAndroid Build Coastguard Worker 179*3ac0a46fSAndroid Build Coastguard Worker bool SavePackage(CXFA_Node* pNode, 180*3ac0a46fSAndroid Build Coastguard Worker const RetainPtr<IFX_SeekableStream>& pFile); 181*3ac0a46fSAndroid Build Coastguard Worker 182*3ac0a46fSAndroid Build Coastguard Worker private: 183*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDoc(CXFA_FFApp* pApp, 184*3ac0a46fSAndroid Build Coastguard Worker CallbackIface* pDocEnvironment, 185*3ac0a46fSAndroid Build Coastguard Worker CPDF_Document* pPDFDoc, 186*3ac0a46fSAndroid Build Coastguard Worker cppgc::Heap* pHeap); 187*3ac0a46fSAndroid Build Coastguard Worker bool BuildDoc(CFX_XMLDocument* pXML); 188*3ac0a46fSAndroid Build Coastguard Worker 189*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<CallbackIface> const m_pDocEnvironment; 190*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<CPDF_Document> const m_pPDFDoc; 191*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<cppgc::Heap> const m_pHeap; 192*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CXFA_FFApp> const m_pApp; 193*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CXFA_FFNotify> m_pNotify; 194*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CXFA_Document> m_pDocument; 195*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CXFA_FFDocView> m_DocView; 196*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<CFGAS_PDFFontMgr> m_pPDFFontMgr; 197*3ac0a46fSAndroid Build Coastguard Worker std::map<uint32_t, FX_IMAGEDIB_AND_DPI> m_HashToDibDpiMap; 198*3ac0a46fSAndroid Build Coastguard Worker FormType m_FormType = FormType::kXFAForeground; 199*3ac0a46fSAndroid Build Coastguard Worker }; 200*3ac0a46fSAndroid Build Coastguard Worker 201*3ac0a46fSAndroid Build Coastguard Worker #endif // XFA_FXFA_CXFA_FFDOC_H_ 202