• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_ANNOTHANDLERMGR_H_
8 #define FPDFSDK_CPDFSDK_ANNOTHANDLERMGR_H_
9 
10 #include <map>
11 #include <memory>
12 
13 #include "core/fpdfdoc/cpdf_annot.h"
14 #include "core/fxcrt/fx_basic.h"
15 #include "core/fxcrt/fx_coordinates.h"
16 #include "fpdfsdk/cpdfsdk_annot.h"
17 
18 class CFX_Matrix;
19 class CFX_RenderDevice;
20 class CPDFSDK_FormFillEnvironment;
21 class CPDFSDK_BAAnnotHandler;
22 class CPDFSDK_WidgetHandler;
23 class CPDFSDK_PageView;
24 class IPDFSDK_AnnotHandler;
25 
26 #ifdef PDF_ENABLE_XFA
27 class CPDFSDK_XFAWidgetHandler;
28 class CXFA_FFWidget;
29 #endif  // PDF_ENABLE_XFA
30 
31 class CPDFSDK_AnnotHandlerMgr {
32  public:
33   explicit CPDFSDK_AnnotHandlerMgr(CPDFSDK_FormFillEnvironment* pApp);
34   ~CPDFSDK_AnnotHandlerMgr();
35 
36   CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView);
37 #ifdef PDF_ENABLE_XFA
38   CPDFSDK_Annot* NewAnnot(CXFA_FFWidget* pAnnot, CPDFSDK_PageView* pPageView);
39 #endif  // PDF_ENABLE_XFA
40   void ReleaseAnnot(CPDFSDK_Annot* pAnnot);
41 
42   void Annot_OnCreate(CPDFSDK_Annot* pAnnot);
43   void Annot_OnLoad(CPDFSDK_Annot* pAnnot);
44 
45   IPDFSDK_AnnotHandler* GetAnnotHandler(CPDFSDK_Annot* pAnnot) const;
46   void Annot_OnDraw(CPDFSDK_PageView* pPageView,
47                     CPDFSDK_Annot* pAnnot,
48                     CFX_RenderDevice* pDevice,
49                     CFX_Matrix* pUser2Device,
50                     bool bDrawAnnots);
51 
52   void Annot_OnMouseEnter(CPDFSDK_PageView* pPageView,
53                           CPDFSDK_Annot::ObservedPtr* pAnnot,
54                           uint32_t nFlags);
55   void Annot_OnMouseExit(CPDFSDK_PageView* pPageView,
56                          CPDFSDK_Annot::ObservedPtr* pAnnot,
57                          uint32_t nFlags);
58   bool Annot_OnLButtonDown(CPDFSDK_PageView* pPageView,
59                            CPDFSDK_Annot::ObservedPtr* pAnnot,
60                            uint32_t nFlags,
61                            const CFX_PointF& point);
62   bool Annot_OnLButtonUp(CPDFSDK_PageView* pPageView,
63                          CPDFSDK_Annot::ObservedPtr* pAnnot,
64                          uint32_t nFlags,
65                          const CFX_PointF& point);
66   bool Annot_OnLButtonDblClk(CPDFSDK_PageView* pPageView,
67                              CPDFSDK_Annot::ObservedPtr* pAnnot,
68                              uint32_t nFlags,
69                              const CFX_PointF& point);
70   bool Annot_OnMouseMove(CPDFSDK_PageView* pPageView,
71                          CPDFSDK_Annot::ObservedPtr* pAnnot,
72                          uint32_t nFlags,
73                          const CFX_PointF& point);
74   bool Annot_OnMouseWheel(CPDFSDK_PageView* pPageView,
75                           CPDFSDK_Annot::ObservedPtr* pAnnot,
76                           uint32_t nFlags,
77                           short zDelta,
78                           const CFX_PointF& point);
79   bool Annot_OnRButtonDown(CPDFSDK_PageView* pPageView,
80                            CPDFSDK_Annot::ObservedPtr* pAnnot,
81                            uint32_t nFlags,
82                            const CFX_PointF& point);
83   bool Annot_OnRButtonUp(CPDFSDK_PageView* pPageView,
84                          CPDFSDK_Annot::ObservedPtr* pAnnot,
85                          uint32_t nFlags,
86                          const CFX_PointF& point);
87   bool Annot_OnChar(CPDFSDK_Annot* pAnnot, uint32_t nChar, uint32_t nFlags);
88   bool Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
89   bool Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
90 
91   bool Annot_OnSetFocus(CPDFSDK_Annot::ObservedPtr* pAnnot, uint32_t nFlag);
92   bool Annot_OnKillFocus(CPDFSDK_Annot::ObservedPtr* pAnnot, uint32_t nFlag);
93 
94 #ifdef PDF_ENABLE_XFA
95   bool Annot_OnChangeFocus(CPDFSDK_Annot::ObservedPtr* pSetAnnot,
96                            CPDFSDK_Annot::ObservedPtr* pKillAnnot);
97 #endif  // PDF_ENABLE_XFA
98 
99   CFX_FloatRect Annot_OnGetViewBBox(CPDFSDK_PageView* pPageView,
100                                     CPDFSDK_Annot* pAnnot);
101   bool Annot_OnHitTest(CPDFSDK_PageView* pPageView,
102                        CPDFSDK_Annot* pAnnot,
103                        const CFX_PointF& point);
104 
105  private:
106   IPDFSDK_AnnotHandler* GetAnnotHandler(CPDF_Annot::Subtype nSubtype) const;
107   CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pSDKAnnot, bool bNext);
108 
109   std::unique_ptr<CPDFSDK_BAAnnotHandler> m_pBAAnnotHandler;
110   std::unique_ptr<CPDFSDK_WidgetHandler> m_pWidgetHandler;
111 #ifdef PDF_ENABLE_XFA
112   std::unique_ptr<CPDFSDK_XFAWidgetHandler> m_pXFAWidgetHandler;
113 #endif  // PDF_ENABLE_XFA
114 
115   CPDFSDK_FormFillEnvironment* m_pFormFillEnv;
116 };
117 
118 #endif  // FPDFSDK_CPDFSDK_ANNOTHANDLERMGR_H_
119