• 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_coordinates.h"
15 #include "core/fxcrt/unowned_ptr.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   WideString Annot_GetSelectedText(CPDFSDK_Annot* pAnnot);
46   void Annot_ReplaceSelection(CPDFSDK_Annot* pAnnot, const WideString& text);
47 
48   IPDFSDK_AnnotHandler* GetAnnotHandler(CPDFSDK_Annot* pAnnot) const;
49   void Annot_OnDraw(CPDFSDK_PageView* pPageView,
50                     CPDFSDK_Annot* pAnnot,
51                     CFX_RenderDevice* pDevice,
52                     CFX_Matrix* pUser2Device,
53                     bool bDrawAnnots);
54 
55   void Annot_OnMouseEnter(CPDFSDK_PageView* pPageView,
56                           CPDFSDK_Annot::ObservedPtr* pAnnot,
57                           uint32_t nFlags);
58   void Annot_OnMouseExit(CPDFSDK_PageView* pPageView,
59                          CPDFSDK_Annot::ObservedPtr* pAnnot,
60                          uint32_t nFlags);
61   bool Annot_OnLButtonDown(CPDFSDK_PageView* pPageView,
62                            CPDFSDK_Annot::ObservedPtr* pAnnot,
63                            uint32_t nFlags,
64                            const CFX_PointF& point);
65   bool Annot_OnLButtonUp(CPDFSDK_PageView* pPageView,
66                          CPDFSDK_Annot::ObservedPtr* pAnnot,
67                          uint32_t nFlags,
68                          const CFX_PointF& point);
69   bool Annot_OnLButtonDblClk(CPDFSDK_PageView* pPageView,
70                              CPDFSDK_Annot::ObservedPtr* pAnnot,
71                              uint32_t nFlags,
72                              const CFX_PointF& point);
73   bool Annot_OnMouseMove(CPDFSDK_PageView* pPageView,
74                          CPDFSDK_Annot::ObservedPtr* pAnnot,
75                          uint32_t nFlags,
76                          const CFX_PointF& point);
77   bool Annot_OnMouseWheel(CPDFSDK_PageView* pPageView,
78                           CPDFSDK_Annot::ObservedPtr* pAnnot,
79                           uint32_t nFlags,
80                           short zDelta,
81                           const CFX_PointF& point);
82   bool Annot_OnRButtonDown(CPDFSDK_PageView* pPageView,
83                            CPDFSDK_Annot::ObservedPtr* pAnnot,
84                            uint32_t nFlags,
85                            const CFX_PointF& point);
86   bool Annot_OnRButtonUp(CPDFSDK_PageView* pPageView,
87                          CPDFSDK_Annot::ObservedPtr* pAnnot,
88                          uint32_t nFlags,
89                          const CFX_PointF& point);
90   bool Annot_OnChar(CPDFSDK_Annot* pAnnot, uint32_t nChar, uint32_t nFlags);
91   bool Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
92   bool Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
93 
94   bool Annot_OnSetFocus(CPDFSDK_Annot::ObservedPtr* pAnnot, uint32_t nFlag);
95   bool Annot_OnKillFocus(CPDFSDK_Annot::ObservedPtr* pAnnot, uint32_t nFlag);
96 
97 #ifdef PDF_ENABLE_XFA
98   bool Annot_OnChangeFocus(CPDFSDK_Annot::ObservedPtr* pSetAnnot,
99                            CPDFSDK_Annot::ObservedPtr* pKillAnnot);
100 #endif  // PDF_ENABLE_XFA
101 
102   CFX_FloatRect Annot_OnGetViewBBox(CPDFSDK_PageView* pPageView,
103                                     CPDFSDK_Annot* pAnnot);
104   bool Annot_OnHitTest(CPDFSDK_PageView* pPageView,
105                        CPDFSDK_Annot* pAnnot,
106                        const CFX_PointF& point);
107 
108  private:
109   IPDFSDK_AnnotHandler* GetAnnotHandler(CPDF_Annot::Subtype nSubtype) const;
110   CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pSDKAnnot, bool bNext);
111 
112   std::unique_ptr<CPDFSDK_BAAnnotHandler> m_pBAAnnotHandler;
113   std::unique_ptr<CPDFSDK_WidgetHandler> m_pWidgetHandler;
114 #ifdef PDF_ENABLE_XFA
115   std::unique_ptr<CPDFSDK_XFAWidgetHandler> m_pXFAWidgetHandler;
116 #endif  // PDF_ENABLE_XFA
117 };
118 
119 #endif  // FPDFSDK_CPDFSDK_ANNOTHANDLERMGR_H_
120