1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef HTMLEditorEventListener_h 7 #define HTMLEditorEventListener_h 8 9 #include "EditorEventListener.h" 10 #include "mozilla/HTMLEditor.h" 11 #include "nscore.h" 12 13 namespace mozilla { 14 15 namespace dom { 16 class Element; 17 } 18 19 class EditorBase; 20 21 class HTMLEditorEventListener final : public EditorEventListener { 22 public: HTMLEditorEventListener()23 HTMLEditorEventListener() 24 : EditorEventListener(), 25 mListeningToMouseMoveEventForResizers(false), 26 mListeningToMouseMoveEventForGrabber(false), 27 mListeningToResizeEvent(false) {} 28 29 // nsIDOMEventListener 30 MOZ_CAN_RUN_SCRIPT NS_IMETHOD HandleEvent(dom::Event* aEvent) override; 31 32 /** 33 * Connect() fails if aEditorBase isn't an HTMLEditor instance. 34 */ 35 virtual nsresult Connect(EditorBase* aEditorBase) override; 36 37 virtual void Disconnect() override; 38 39 /** 40 * ListenToMouseMoveEventForResizers() starts to listen to or stop 41 * listening to "mousemove" events for resizers. 42 */ ListenToMouseMoveEventForResizers(bool aListen)43 nsresult ListenToMouseMoveEventForResizers(bool aListen) { 44 if (aListen == mListeningToMouseMoveEventForResizers) { 45 return NS_OK; 46 } 47 nsresult rv = ListenToMouseMoveEventForResizersOrGrabber(aListen, false); 48 NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), 49 "HTMLEditorEventListener::" 50 "ListenToMouseMoveEventForResizersOrGrabber() failed"); 51 return rv; 52 } 53 54 /** 55 * ListenToMouseMoveEventForResizers() starts to listen to or stop 56 * listening to "mousemove" events for grabber to move absolutely 57 * positioned element. 58 */ ListenToMouseMoveEventForGrabber(bool aListen)59 nsresult ListenToMouseMoveEventForGrabber(bool aListen) { 60 if (aListen == mListeningToMouseMoveEventForGrabber) { 61 return NS_OK; 62 } 63 nsresult rv = ListenToMouseMoveEventForResizersOrGrabber(aListen, true); 64 NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), 65 "HTMLEditorEventListener::" 66 "ListenToMouseMoveEventForResizersOrGrabber() failed"); 67 return rv; 68 } 69 70 /** 71 * ListenToWindowResizeEvent() starts to listen to or stop listening to 72 * "resize" events of the document. 73 */ 74 nsresult ListenToWindowResizeEvent(bool aListen); 75 76 protected: 77 MOZ_CAN_RUN_SCRIPT virtual nsresult MouseDown( 78 dom::MouseEvent* aMouseEvent) override; 79 MOZ_CAN_RUN_SCRIPT virtual nsresult MouseUp( 80 dom::MouseEvent* aMouseEvent) override; 81 MOZ_CAN_RUN_SCRIPT virtual nsresult MouseClick( 82 WidgetMouseEvent* aMouseClickEvent) override; 83 84 nsresult ListenToMouseMoveEventForResizersOrGrabber(bool aListen, 85 bool aForGrabber); 86 87 MOZ_CAN_RUN_SCRIPT nsresult HandlePrimaryMouseButtonDown( 88 HTMLEditor& aHTMLEditor, dom::MouseEvent& aMouseEvent); 89 MOZ_CAN_RUN_SCRIPT nsresult HandleSecondaryMouseButtonDown( 90 HTMLEditor& aHTMLEditor, dom::MouseEvent& aMouseEvent); 91 92 bool mListeningToMouseMoveEventForResizers; 93 bool mListeningToMouseMoveEventForGrabber; 94 bool mListeningToResizeEvent; 95 }; 96 97 } // namespace mozilla 98 99 #endif // #ifndef HTMLEditorEventListener_h 100