Home | History | Annotate | Download | only in fpdfsdk
      1 // Copyright 2016 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 FPDFSDK_CPDFSDK_PAGEVIEW_H_
      8 #define FPDFSDK_CPDFSDK_PAGEVIEW_H_
      9 
     10 #include <memory>
     11 #include <vector>
     12 
     13 #include "core/fpdfapi/page/cpdf_page.h"
     14 #include "core/fxcrt/fx_system.h"
     15 #include "fpdfsdk/cpdfsdk_annot.h"
     16 
     17 class CFX_RenderDevice;
     18 class CPDF_AnnotList;
     19 class CPDF_RenderOptions;
     20 
     21 class CPDFSDK_PageView final : public CPDF_Page::View {
     22  public:
     23   CPDFSDK_PageView(CPDFSDK_FormFillEnvironment* pFormFillEnv,
     24                    UnderlyingPageType* page);
     25   ~CPDFSDK_PageView();
     26 
     27 #ifdef PDF_ENABLE_XFA
     28   void PageView_OnDraw(CFX_RenderDevice* pDevice,
     29                        CFX_Matrix* pUser2Device,
     30                        CPDF_RenderOptions* pOptions,
     31                        const FX_RECT& pClip);
     32 #else   // PDF_ENABLE_XFA
     33   void PageView_OnDraw(CFX_RenderDevice* pDevice,
     34                        CFX_Matrix* pUser2Device,
     35                        CPDF_RenderOptions* pOptions);
     36 #endif  // PDF_ENABLE_XFA
     37 
     38   void LoadFXAnnots();
     39   CPDFSDK_Annot* GetFocusAnnot();
     40   bool IsValidAnnot(const CPDF_Annot* p) const;
     41   bool IsValidSDKAnnot(const CPDFSDK_Annot* p) const;
     42 
     43   const std::vector<CPDFSDK_Annot*>& GetAnnotList() const {
     44     return m_SDKAnnotArray;
     45   }
     46   CPDFSDK_Annot* GetAnnotByDict(CPDF_Dictionary* pDict);
     47 
     48 #ifdef PDF_ENABLE_XFA
     49   bool DeleteAnnot(CPDFSDK_Annot* pAnnot);
     50   CPDFSDK_Annot* AddAnnot(CXFA_FFWidget* pPDFAnnot);
     51   CPDFSDK_Annot* GetAnnotByXFAWidget(CXFA_FFWidget* hWidget);
     52 
     53   CPDFXFA_Page* GetPDFXFAPage() { return m_page; }
     54 #endif  // PDF_ENABLE_XFA
     55 
     56   CPDF_Page* GetPDFPage() const;
     57   CPDF_Document* GetPDFDocument();
     58   CPDFSDK_FormFillEnvironment* GetFormFillEnv() const { return m_pFormFillEnv; }
     59   bool OnLButtonDown(const CFX_PointF& point, uint32_t nFlag);
     60   bool OnLButtonUp(const CFX_PointF& point, uint32_t nFlag);
     61 #ifdef PDF_ENABLE_XFA
     62   bool OnRButtonDown(const CFX_PointF& point, uint32_t nFlag);
     63   bool OnRButtonUp(const CFX_PointF& point, uint32_t nFlag);
     64 #endif  // PDF_ENABLE_XFA
     65   bool OnChar(int nChar, uint32_t nFlag);
     66   bool OnKeyDown(int nKeyCode, int nFlag);
     67   bool OnKeyUp(int nKeyCode, int nFlag);
     68 
     69   bool OnMouseMove(const CFX_PointF& point, int nFlag);
     70   bool OnMouseWheel(double deltaX,
     71                     double deltaY,
     72                     const CFX_PointF& point,
     73                     int nFlag);
     74 
     75   void GetCurrentMatrix(CFX_Matrix& matrix) { matrix = m_curMatrix; }
     76   void UpdateRects(const std::vector<CFX_FloatRect>& rects);
     77   void UpdateView(CPDFSDK_Annot* pAnnot);
     78 
     79   int GetPageIndex() const;
     80 
     81   void SetValid(bool bValid) { m_bValid = bValid; }
     82   bool IsValid() { return m_bValid; }
     83 
     84   void SetLock(bool bLocked) { m_bLocked = bLocked; }
     85   bool IsLocked() { return m_bLocked; }
     86 
     87   void SetBeingDestroyed() { m_bBeingDestroyed = true; }
     88   bool IsBeingDestroyed() const { return m_bBeingDestroyed; }
     89 
     90 #ifndef PDF_ENABLE_XFA
     91   bool OwnsPage() const { return m_bOwnsPage; }
     92   void TakePageOwnership() { m_bOwnsPage = true; }
     93 #endif  // PDF_ENABLE_XFA
     94 
     95  private:
     96   CPDFSDK_Annot* GetFXAnnotAtPoint(const CFX_PointF& point);
     97   CPDFSDK_Annot* GetFXWidgetAtPoint(const CFX_PointF& point);
     98 
     99   int GetPageIndexForStaticPDF() const;
    100 
    101   CFX_Matrix m_curMatrix;
    102   UnderlyingPageType* const m_page;
    103   std::unique_ptr<CPDF_AnnotList> m_pAnnotList;
    104   std::vector<CPDFSDK_Annot*> m_SDKAnnotArray;
    105   CPDFSDK_FormFillEnvironment* const m_pFormFillEnv;  // Not owned.
    106   CPDFSDK_Annot::ObservedPtr m_pCaptureWidget;
    107 #ifndef PDF_ENABLE_XFA
    108   bool m_bOwnsPage;
    109 #endif  // PDF_ENABLE_XFA
    110   bool m_bEnterWidget;
    111   bool m_bExitWidget;
    112   bool m_bOnWidget;
    113   bool m_bValid;
    114   bool m_bLocked;
    115   bool m_bBeingDestroyed;
    116 };
    117 
    118 #endif  // FPDFSDK_CPDFSDK_PAGEVIEW_H_
    119