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