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