1 // Copyright 2014 The PDFium Authors 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 XFA_FXFA_CXFA_FFWIDGETHANDLER_H_ 8 #define XFA_FXFA_CXFA_FFWIDGETHANDLER_H_ 9 10 #include "core/fxcrt/fx_coordinates.h" 11 #include "core/fxcrt/mask.h" 12 #include "fxjs/gc/heap.h" 13 #include "v8/include/cppgc/garbage-collected.h" 14 #include "v8/include/cppgc/member.h" 15 #include "v8/include/cppgc/visitor.h" 16 #include "xfa/fwl/cfwl_message.h" 17 #include "xfa/fwl/fwl_widgetdef.h" 18 #include "xfa/fxfa/cxfa_eventparam.h" 19 #include "xfa/fxfa/parser/cxfa_document.h" 20 21 class CFGAS_GEGraphics; 22 class CXFA_FFDocView; 23 class CXFA_FFWidget; 24 25 namespace pdfium { 26 enum class FWL_WidgetHit; 27 } // namespace pdfium 28 29 class CXFA_FFWidgetHandler final 30 : public cppgc::GarbageCollected<CXFA_FFWidgetHandler> { 31 public: 32 CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; 33 ~CXFA_FFWidgetHandler(); 34 35 void Trace(cppgc::Visitor* visitor) const; 36 37 bool OnMouseEnter(CXFA_FFWidget* hWidget); 38 bool OnMouseExit(CXFA_FFWidget* hWidget); 39 bool OnLButtonDown(CXFA_FFWidget* hWidget, 40 Mask<XFA_FWL_KeyFlag> dwFlags, 41 const CFX_PointF& point); 42 bool OnLButtonUp(CXFA_FFWidget* hWidget, 43 Mask<XFA_FWL_KeyFlag> dwFlags, 44 const CFX_PointF& point); 45 bool OnLButtonDblClk(CXFA_FFWidget* hWidget, 46 Mask<XFA_FWL_KeyFlag> dwFlags, 47 const CFX_PointF& point); 48 bool OnMouseMove(CXFA_FFWidget* hWidget, 49 Mask<XFA_FWL_KeyFlag> dwFlags, 50 const CFX_PointF& point); 51 bool OnMouseWheel(CXFA_FFWidget* hWidget, 52 Mask<XFA_FWL_KeyFlag> dwFlags, 53 const CFX_PointF& point, 54 const CFX_Vector& delta); 55 bool OnRButtonDown(CXFA_FFWidget* hWidget, 56 Mask<XFA_FWL_KeyFlag> dwFlags, 57 const CFX_PointF& point); 58 bool OnRButtonUp(CXFA_FFWidget* hWidget, 59 Mask<XFA_FWL_KeyFlag> dwFlags, 60 const CFX_PointF& point); 61 bool OnRButtonDblClk(CXFA_FFWidget* hWidget, 62 Mask<XFA_FWL_KeyFlag> dwFlags, 63 const CFX_PointF& point); 64 65 WideString GetText(CXFA_FFWidget* widget); 66 WideString GetSelectedText(CXFA_FFWidget* widget); 67 void PasteText(CXFA_FFWidget* widget, const WideString& text); 68 bool SelectAllText(CXFA_FFWidget* widget); 69 70 bool CanUndo(CXFA_FFWidget* widget); 71 bool CanRedo(CXFA_FFWidget* widget); 72 bool Undo(CXFA_FFWidget* widget); 73 bool Redo(CXFA_FFWidget* widget); 74 75 bool OnKeyDown(CXFA_FFWidget* hWidget, 76 XFA_FWL_VKEYCODE dwKeyCode, 77 Mask<XFA_FWL_KeyFlag> dwFlags); 78 bool OnChar(CXFA_FFWidget* hWidget, 79 uint32_t dwChar, 80 Mask<XFA_FWL_KeyFlag> dwFlags); 81 pdfium::FWL_WidgetHit HitTest(CXFA_FFWidget* pWidget, 82 const CFX_PointF& point); 83 void RenderWidget(CXFA_FFWidget* hWidget, 84 CFGAS_GEGraphics* pGS, 85 const CFX_Matrix& matrix, 86 bool bHighlight); 87 bool HasEvent(CXFA_Node* pNode, XFA_EVENTTYPE eEventType); 88 XFA_EventError ProcessEvent(CXFA_Node* pNode, CXFA_EventParam* pParam); 89 90 private: 91 explicit CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView); 92 93 cppgc::Member<CXFA_FFDocView> m_pDocView; 94 }; 95 96 #endif // XFA_FXFA_CXFA_FFWIDGETHANDLER_H_ 97