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