1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2016 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 FPDFSDK_CPDFSDK_PAGEVIEW_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define FPDFSDK_CPDFSDK_PAGEVIEW_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <stdint.h> 11*3ac0a46fSAndroid Build Coastguard Worker 12*3ac0a46fSAndroid Build Coastguard Worker #include <memory> 13*3ac0a46fSAndroid Build Coastguard Worker #include <vector> 14*3ac0a46fSAndroid Build Coastguard Worker 15*3ac0a46fSAndroid Build Coastguard Worker #include "core/fpdfapi/page/cpdf_page.h" 16*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/mask.h" 17*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/unowned_ptr.h" 18*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/cpdfsdk_annot.h" 19*3ac0a46fSAndroid Build Coastguard Worker 20*3ac0a46fSAndroid Build Coastguard Worker class CFX_RenderDevice; 21*3ac0a46fSAndroid Build Coastguard Worker class CPDF_AnnotList; 22*3ac0a46fSAndroid Build Coastguard Worker class CPDF_RenderOptions; 23*3ac0a46fSAndroid Build Coastguard Worker class CPDFSDK_FormFillEnvironment; 24*3ac0a46fSAndroid Build Coastguard Worker class CPDFSDK_InteractiveForm; 25*3ac0a46fSAndroid Build Coastguard Worker 26*3ac0a46fSAndroid Build Coastguard Worker #ifdef PDF_ENABLE_XFA 27*3ac0a46fSAndroid Build Coastguard Worker class CPDFXFA_Page; 28*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFWidget; 29*3ac0a46fSAndroid Build Coastguard Worker #endif // PDF_ENABLE_XFA 30*3ac0a46fSAndroid Build Coastguard Worker 31*3ac0a46fSAndroid Build Coastguard Worker class CPDFSDK_PageView final : public CPDF_Page::View { 32*3ac0a46fSAndroid Build Coastguard Worker public: 33*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_PageView(CPDFSDK_FormFillEnvironment* pFormFillEnv, IPDF_Page* page); 34*3ac0a46fSAndroid Build Coastguard Worker ~CPDFSDK_PageView(); 35*3ac0a46fSAndroid Build Coastguard Worker 36*3ac0a46fSAndroid Build Coastguard Worker // CPDF_Page::View: 37*3ac0a46fSAndroid Build Coastguard Worker void ClearPage(CPDF_Page* pPage) override; 38*3ac0a46fSAndroid Build Coastguard Worker 39*3ac0a46fSAndroid Build Coastguard Worker void PageView_OnDraw(CFX_RenderDevice* pDevice, 40*3ac0a46fSAndroid Build Coastguard Worker const CFX_Matrix& mtUser2Device, 41*3ac0a46fSAndroid Build Coastguard Worker CPDF_RenderOptions* pOptions, 42*3ac0a46fSAndroid Build Coastguard Worker const FX_RECT& pClip); 43*3ac0a46fSAndroid Build Coastguard Worker 44*3ac0a46fSAndroid Build Coastguard Worker void LoadFXAnnots(); 45*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_Annot* GetFocusAnnot(); 46*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pAnnot); 47*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_Annot* GetPrevAnnot(CPDFSDK_Annot* pAnnot); 48*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_Annot* GetFirstFocusableAnnot(); 49*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_Annot* GetLastFocusableAnnot(); 50*3ac0a46fSAndroid Build Coastguard Worker bool IsValidAnnot(const CPDF_Annot* p) const; 51*3ac0a46fSAndroid Build Coastguard Worker bool IsValidSDKAnnot(const CPDFSDK_Annot* p) const; 52*3ac0a46fSAndroid Build Coastguard Worker 53*3ac0a46fSAndroid Build Coastguard Worker std::vector<CPDFSDK_Annot*> GetAnnotList() const; 54*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_Annot* GetAnnotByDict(const CPDF_Dictionary* pDict); 55*3ac0a46fSAndroid Build Coastguard Worker 56*3ac0a46fSAndroid Build Coastguard Worker #ifdef PDF_ENABLE_XFA 57*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_Annot* AddAnnotForFFWidget(CXFA_FFWidget* pWidget); 58*3ac0a46fSAndroid Build Coastguard Worker void DeleteAnnotForFFWidget(CXFA_FFWidget* pWidget); 59*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_Annot* GetAnnotForFFWidget(CXFA_FFWidget* pWidget); 60*3ac0a46fSAndroid Build Coastguard Worker IPDF_Page* GetXFAPage(); 61*3ac0a46fSAndroid Build Coastguard Worker #endif // PDF_ENABLE_XFA 62*3ac0a46fSAndroid Build Coastguard Worker 63*3ac0a46fSAndroid Build Coastguard Worker CPDF_Page* GetPDFPage() const; 64*3ac0a46fSAndroid Build Coastguard Worker CPDF_Document* GetPDFDocument(); GetFormFillEnv()65*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_FormFillEnvironment* GetFormFillEnv() const { return m_pFormFillEnv; } 66*3ac0a46fSAndroid Build Coastguard Worker 67*3ac0a46fSAndroid Build Coastguard Worker WideString GetFocusedFormText(); 68*3ac0a46fSAndroid Build Coastguard Worker WideString GetSelectedText(); 69*3ac0a46fSAndroid Build Coastguard Worker void ReplaceAndKeepSelection(const WideString& text); 70*3ac0a46fSAndroid Build Coastguard Worker void ReplaceSelection(const WideString& text); 71*3ac0a46fSAndroid Build Coastguard Worker bool SelectAllText(); 72*3ac0a46fSAndroid Build Coastguard Worker 73*3ac0a46fSAndroid Build Coastguard Worker bool CanUndo(); 74*3ac0a46fSAndroid Build Coastguard Worker bool CanRedo(); 75*3ac0a46fSAndroid Build Coastguard Worker bool Undo(); 76*3ac0a46fSAndroid Build Coastguard Worker bool Redo(); 77*3ac0a46fSAndroid Build Coastguard Worker 78*3ac0a46fSAndroid Build Coastguard Worker bool OnFocus(Mask<FWL_EVENTFLAG> nFlags, const CFX_PointF& point); 79*3ac0a46fSAndroid Build Coastguard Worker bool OnLButtonDown(Mask<FWL_EVENTFLAG> nFlags, const CFX_PointF& point); 80*3ac0a46fSAndroid Build Coastguard Worker bool OnLButtonUp(Mask<FWL_EVENTFLAG> nFlags, const CFX_PointF& point); 81*3ac0a46fSAndroid Build Coastguard Worker bool OnLButtonDblClk(Mask<FWL_EVENTFLAG> nFlags, const CFX_PointF& point); 82*3ac0a46fSAndroid Build Coastguard Worker bool OnRButtonDown(Mask<FWL_EVENTFLAG> nFlags, const CFX_PointF& point); 83*3ac0a46fSAndroid Build Coastguard Worker bool OnRButtonUp(Mask<FWL_EVENTFLAG> nFlags, const CFX_PointF& point); 84*3ac0a46fSAndroid Build Coastguard Worker bool OnChar(uint32_t nChar, Mask<FWL_EVENTFLAG> nFlags); 85*3ac0a46fSAndroid Build Coastguard Worker bool OnKeyDown(FWL_VKEYCODE nKeyCode, Mask<FWL_EVENTFLAG> nFlags); 86*3ac0a46fSAndroid Build Coastguard Worker bool OnMouseMove(Mask<FWL_EVENTFLAG> nFlags, const CFX_PointF& point); 87*3ac0a46fSAndroid Build Coastguard Worker bool OnMouseWheel(Mask<FWL_EVENTFLAG> nFlags, 88*3ac0a46fSAndroid Build Coastguard Worker const CFX_PointF& point, 89*3ac0a46fSAndroid Build Coastguard Worker const CFX_Vector& delta); 90*3ac0a46fSAndroid Build Coastguard Worker 91*3ac0a46fSAndroid Build Coastguard Worker bool SetIndexSelected(int index, bool selected); 92*3ac0a46fSAndroid Build Coastguard Worker bool IsIndexSelected(int index); 93*3ac0a46fSAndroid Build Coastguard Worker GetCurrentMatrix()94*3ac0a46fSAndroid Build Coastguard Worker const CFX_Matrix& GetCurrentMatrix() const { return m_curMatrix; } 95*3ac0a46fSAndroid Build Coastguard Worker void UpdateRects(const std::vector<CFX_FloatRect>& rects); 96*3ac0a46fSAndroid Build Coastguard Worker void UpdateView(CPDFSDK_Annot* pAnnot); 97*3ac0a46fSAndroid Build Coastguard Worker 98*3ac0a46fSAndroid Build Coastguard Worker int GetPageIndex() const; 99*3ac0a46fSAndroid Build Coastguard Worker SetValid(bool bValid)100*3ac0a46fSAndroid Build Coastguard Worker void SetValid(bool bValid) { m_bValid = bValid; } IsValid()101*3ac0a46fSAndroid Build Coastguard Worker bool IsValid() const { return m_bValid; } IsLocked()102*3ac0a46fSAndroid Build Coastguard Worker bool IsLocked() const { return m_bLocked; } SetBeingDestroyed()103*3ac0a46fSAndroid Build Coastguard Worker void SetBeingDestroyed() { m_bBeingDestroyed = true; } IsBeingDestroyed()104*3ac0a46fSAndroid Build Coastguard Worker bool IsBeingDestroyed() const { return m_bBeingDestroyed; } 105*3ac0a46fSAndroid Build Coastguard Worker 106*3ac0a46fSAndroid Build Coastguard Worker private: 107*3ac0a46fSAndroid Build Coastguard Worker #ifdef PDF_ENABLE_XFA 108*3ac0a46fSAndroid Build Coastguard Worker CPDFXFA_Page* XFAPageIfNotBackedByPDFPage(); 109*3ac0a46fSAndroid Build Coastguard Worker #endif 110*3ac0a46fSAndroid Build Coastguard Worker 111*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<CPDFSDK_Annot> NewAnnot(CPDF_Annot* annot); 112*3ac0a46fSAndroid Build Coastguard Worker 113*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_InteractiveForm* GetInteractiveForm() const; 114*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_Annot* GetFXAnnotAtPoint(const CFX_PointF& point); 115*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_Annot* GetFXWidgetAtPoint(const CFX_PointF& point); 116*3ac0a46fSAndroid Build Coastguard Worker 117*3ac0a46fSAndroid Build Coastguard Worker int GetPageIndexForStaticPDF() const; 118*3ac0a46fSAndroid Build Coastguard Worker 119*3ac0a46fSAndroid Build Coastguard Worker void EnterWidget(ObservedPtr<CPDFSDK_Annot>& pAnnot, 120*3ac0a46fSAndroid Build Coastguard Worker Mask<FWL_EVENTFLAG> nFlags); 121*3ac0a46fSAndroid Build Coastguard Worker void ExitWidget(bool callExitCallback, Mask<FWL_EVENTFLAG> nFlags); 122*3ac0a46fSAndroid Build Coastguard Worker 123*3ac0a46fSAndroid Build Coastguard Worker CFX_Matrix m_curMatrix; 124*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<IPDF_Page> const m_page; 125*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<CPDF_AnnotList> m_pAnnotList; 126*3ac0a46fSAndroid Build Coastguard Worker std::vector<std::unique_ptr<CPDFSDK_Annot>> m_SDKAnnotArray; 127*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<CPDFSDK_FormFillEnvironment> const m_pFormFillEnv; 128*3ac0a46fSAndroid Build Coastguard Worker ObservedPtr<CPDFSDK_Annot> m_pCaptureWidget; 129*3ac0a46fSAndroid Build Coastguard Worker bool m_bOnWidget = false; 130*3ac0a46fSAndroid Build Coastguard Worker bool m_bValid = false; 131*3ac0a46fSAndroid Build Coastguard Worker bool m_bLocked = false; 132*3ac0a46fSAndroid Build Coastguard Worker bool m_bBeingDestroyed = false; 133*3ac0a46fSAndroid Build Coastguard Worker }; 134*3ac0a46fSAndroid Build Coastguard Worker 135*3ac0a46fSAndroid Build Coastguard Worker #endif // FPDFSDK_CPDFSDK_PAGEVIEW_H_ 136