diff options
Diffstat (limited to '')
-rw-r--r-- | editor/libeditor/HTMLEditorEventListener.h | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/editor/libeditor/HTMLEditorEventListener.h b/editor/libeditor/HTMLEditorEventListener.h new file mode 100644 index 0000000000..201265dfab --- /dev/null +++ b/editor/libeditor/HTMLEditorEventListener.h @@ -0,0 +1,100 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef HTMLEditorEventListener_h +#define HTMLEditorEventListener_h + +#include "EditorEventListener.h" + +#include "EditorForwards.h" +#include "HTMLEditor.h" + +#include "nscore.h" + +namespace mozilla { + +namespace dom { +class Element; +} + +class HTMLEditorEventListener final : public EditorEventListener { + public: + HTMLEditorEventListener() + : EditorEventListener(), + mListeningToMouseMoveEventForResizers(false), + mListeningToMouseMoveEventForGrabber(false), + mListeningToResizeEvent(false) {} + + // nsIDOMEventListener + MOZ_CAN_RUN_SCRIPT NS_IMETHOD HandleEvent(dom::Event* aEvent) override; + + /** + * Connect() fails if aEditorBase isn't an HTMLEditor instance. + */ + virtual nsresult Connect(EditorBase* aEditorBase) override; + + virtual void Disconnect() override; + + /** + * ListenToMouseMoveEventForResizers() starts to listen to or stop + * listening to "mousemove" events for resizers. + */ + nsresult ListenToMouseMoveEventForResizers(bool aListen) { + if (aListen == mListeningToMouseMoveEventForResizers) { + return NS_OK; + } + nsresult rv = ListenToMouseMoveEventForResizersOrGrabber(aListen, false); + NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), + "HTMLEditorEventListener::" + "ListenToMouseMoveEventForResizersOrGrabber() failed"); + return rv; + } + + /** + * ListenToMouseMoveEventForResizers() starts to listen to or stop + * listening to "mousemove" events for grabber to move absolutely + * positioned element. + */ + nsresult ListenToMouseMoveEventForGrabber(bool aListen) { + if (aListen == mListeningToMouseMoveEventForGrabber) { + return NS_OK; + } + nsresult rv = ListenToMouseMoveEventForResizersOrGrabber(aListen, true); + NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), + "HTMLEditorEventListener::" + "ListenToMouseMoveEventForResizersOrGrabber() failed"); + return rv; + } + + /** + * ListenToWindowResizeEvent() starts to listen to or stop listening to + * "resize" events of the document. + */ + nsresult ListenToWindowResizeEvent(bool aListen); + + protected: + MOZ_CAN_RUN_SCRIPT virtual nsresult MouseDown( + dom::MouseEvent* aMouseEvent) override; + MOZ_CAN_RUN_SCRIPT virtual nsresult MouseUp( + dom::MouseEvent* aMouseEvent) override; + MOZ_CAN_RUN_SCRIPT virtual nsresult MouseClick( + WidgetMouseEvent* aMouseClickEvent) override; + + nsresult ListenToMouseMoveEventForResizersOrGrabber(bool aListen, + bool aForGrabber); + + MOZ_CAN_RUN_SCRIPT nsresult HandlePrimaryMouseButtonDown( + HTMLEditor& aHTMLEditor, dom::MouseEvent& aMouseEvent); + MOZ_CAN_RUN_SCRIPT nsresult HandleSecondaryMouseButtonDown( + HTMLEditor& aHTMLEditor, dom::MouseEvent& aMouseEvent); + + bool mListeningToMouseMoveEventForResizers; + bool mListeningToMouseMoveEventForGrabber; + bool mListeningToResizeEvent; +}; + +} // namespace mozilla + +#endif // #ifndef HTMLEditorEventListener_h |