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_XFAWIDGETHANDLER_H_
8 #define FPDFSDK_CPDFSDK_XFAWIDGETHANDLER_H_
9 
10 #include "core/fxcrt/fx_coordinates.h"
11 #include "core/fxcrt/unowned_ptr.h"
12 #include "fpdfsdk/ipdfsdk_annothandler.h"
13 
14 class CFX_Matrix;
15 class CFX_RenderDevice;
16 class CPDF_Annot;
17 class CPDFSDK_FormFillEnvironment;
18 class CPDFSDK_Annot;
19 class CPDFSDK_PageView;
20 class CXFA_FFWidget;
21 class CXFA_FFWidgetHandler;
22 
23 class CPDFSDK_XFAWidgetHandler : public IPDFSDK_AnnotHandler {
24  public:
25   explicit CPDFSDK_XFAWidgetHandler(CPDFSDK_FormFillEnvironment* pApp);
26   ~CPDFSDK_XFAWidgetHandler() override;
27 
28   bool CanAnswer(CPDFSDK_Annot* pAnnot) override;
29   CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage) override;
30   CPDFSDK_Annot* NewAnnot(CXFA_FFWidget* pAnnot,
31                           CPDFSDK_PageView* pPage) override;
32   void ReleaseAnnot(CPDFSDK_Annot* pAnnot) override;
33   CFX_FloatRect GetViewBBox(CPDFSDK_PageView* pPageView,
34                             CPDFSDK_Annot* pAnnot) override;
35   WideString GetSelectedText(CPDFSDK_Annot* pAnnot) override;
36   void ReplaceSelection(CPDFSDK_Annot* pAnnot, const WideString& text) override;
37   bool HitTest(CPDFSDK_PageView* pPageView,
38                CPDFSDK_Annot* pAnnot,
39                const CFX_PointF& point) override;
40   void OnDraw(CPDFSDK_PageView* pPageView,
41               CPDFSDK_Annot* pAnnot,
42               CFX_RenderDevice* pDevice,
43               CFX_Matrix* pUser2Device,
44               bool bDrawAnnots) override;
45   void OnLoad(CPDFSDK_Annot* pAnnot) override;
46   void OnMouseEnter(CPDFSDK_PageView* pPageView,
47                     CPDFSDK_Annot::ObservedPtr* pAnnot,
48                     uint32_t nFlag) override;
49   void OnMouseExit(CPDFSDK_PageView* pPageView,
50                    CPDFSDK_Annot::ObservedPtr* pAnnot,
51                    uint32_t nFlag) override;
52   bool OnLButtonDown(CPDFSDK_PageView* pPageView,
53                      CPDFSDK_Annot::ObservedPtr* pAnnot,
54                      uint32_t nFlags,
55                      const CFX_PointF& point) override;
56   bool OnLButtonUp(CPDFSDK_PageView* pPageView,
57                    CPDFSDK_Annot::ObservedPtr* pAnnot,
58                    uint32_t nFlags,
59                    const CFX_PointF& point) override;
60   bool OnLButtonDblClk(CPDFSDK_PageView* pPageView,
61                        CPDFSDK_Annot::ObservedPtr* pAnnot,
62                        uint32_t nFlags,
63                        const CFX_PointF& point) override;
64   bool OnMouseMove(CPDFSDK_PageView* pPageView,
65                    CPDFSDK_Annot::ObservedPtr* pAnnot,
66                    uint32_t nFlags,
67                    const CFX_PointF& point) override;
68   bool OnMouseWheel(CPDFSDK_PageView* pPageView,
69                     CPDFSDK_Annot::ObservedPtr* pAnnot,
70                     uint32_t nFlags,
71                     short zDelta,
72                     const CFX_PointF& point) override;
73   bool OnRButtonDown(CPDFSDK_PageView* pPageView,
74                      CPDFSDK_Annot::ObservedPtr* pAnnot,
75                      uint32_t nFlags,
76                      const CFX_PointF& point) override;
77   bool OnRButtonUp(CPDFSDK_PageView* pPageView,
78                    CPDFSDK_Annot::ObservedPtr* pAnnot,
79                    uint32_t nFlags,
80                    const CFX_PointF& point) override;
81   bool OnRButtonDblClk(CPDFSDK_PageView* pPageView,
82                        CPDFSDK_Annot::ObservedPtr* pAnnot,
83                        uint32_t nFlags,
84                        const CFX_PointF& point) override;
85   bool OnChar(CPDFSDK_Annot* pAnnot, uint32_t nChar, uint32_t nFlags) override;
86   bool OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) override;
87   bool OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) override;
88   bool OnSetFocus(CPDFSDK_Annot::ObservedPtr* pAnnot, uint32_t nFlag) override;
89   bool OnKillFocus(CPDFSDK_Annot::ObservedPtr* pAnnot, uint32_t nFlag) override;
90   bool OnXFAChangedFocus(CPDFSDK_Annot::ObservedPtr* pOldAnnot,
91                          CPDFSDK_Annot::ObservedPtr* pNewAnnot) override;
92 
93  private:
94   CXFA_FFWidgetHandler* GetXFAWidgetHandler(CPDFSDK_Annot* pAnnot);
95   uint32_t GetFWLFlags(uint32_t dwFlag);
96 
97   UnownedPtr<CPDFSDK_FormFillEnvironment> const m_pFormFillEnv;
98 };
99 
100 #endif  // FPDFSDK_CPDFSDK_XFAWIDGETHANDLER_H_
101