Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: third_party/WebKit/Source/core/input/MouseEventManager.cpp

Issue 2255323004: Create MouseEventManager and EventHandlingUtil (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium 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 #include "core/input/MouseEventManager.h"
6
7 #include "core/dom/ElementTraversal.h"
8 #include "core/events/MouseEvent.h"
9 #include "core/html/HTMLCanvasElement.h"
10 #include "core/input/EventHandlingUtil.h"
11
12 namespace blink {
13
14 namespace {
15
16 PlatformMouseEvent mouseEventWithRegion(Node* node, const PlatformMouseEvent& mo useEvent)
17 {
18 if (!node->isElementNode())
19 return mouseEvent;
20
21 Element* element = toElement(node);
22 if (!element->isInCanvasSubtree())
23 return mouseEvent;
24
25 HTMLCanvasElement* canvas = Traversal<HTMLCanvasElement>::firstAncestorOrSel f(*element);
26 // In this case, the event target is canvas and mouse rerouting doesn't happ en.
27 if (canvas == element)
28 return mouseEvent;
29 String region = canvas->getIdFromControl(element);
30 PlatformMouseEvent newMouseEvent = mouseEvent;
31 newMouseEvent.setRegion(region);
32 return newMouseEvent;
33 }
34
35 } // namespace
36
37 MouseEventManager::MouseEventBoundaryEventDispatcher::MouseEventBoundaryEventDis patcher(
38 MouseEventManager* mouseEventManager,
39 const PlatformMouseEvent& platformMouseEvent,
40 EventTarget* exitedTarget)
41 : m_mouseEventManager(mouseEventManager)
42 , m_platformMouseEvent(platformMouseEvent)
43 , m_exitedTarget(exitedTarget)
44 {
45 }
46
47 void MouseEventManager::MouseEventBoundaryEventDispatcher::dispatchOut(
48 EventTarget* target, EventTarget* relatedTarget)
49 {
50 dispatch(target, relatedTarget, EventTypeNames::mouseout, mouseEventWithRegi on(m_exitedTarget->toNode(), m_platformMouseEvent), false);
51 }
52
53 void MouseEventManager::MouseEventBoundaryEventDispatcher::dispatchOver(
54 EventTarget* target, EventTarget* relatedTarget)
55 {
56 dispatch(target, relatedTarget, EventTypeNames::mouseover, m_platformMouseEv ent, false);
57 }
58
59 void MouseEventManager::MouseEventBoundaryEventDispatcher::dispatchLeave(
60 EventTarget* target, EventTarget* relatedTarget, bool checkForListener)
61 {
62 dispatch(target, relatedTarget, EventTypeNames::mouseleave, mouseEventWithRe gion(m_exitedTarget->toNode(), m_platformMouseEvent), checkForListener);
63 }
64
65 void MouseEventManager::MouseEventBoundaryEventDispatcher::dispatchEnter(
66 EventTarget* target, EventTarget* relatedTarget, bool checkForListener)
67 {
68 dispatch(target, relatedTarget, EventTypeNames::mouseenter, m_platformMouseE vent, checkForListener);
69 }
70
71 void MouseEventManager::MouseEventBoundaryEventDispatcher::dispatch(
72 EventTarget* target, EventTarget* relatedTarget, const AtomicString& type,
73 const PlatformMouseEvent& platformMouseEvent, bool checkForListener)
74 {
75 m_mouseEventManager->dispatchMouseEvent(target, type, platformMouseEvent,
76 relatedTarget, 0, checkForListener);
77 }
78
79 void MouseEventManager::sendBoundaryEvents(
80 EventTarget* exitedTarget,
81 EventTarget* enteredTarget,
82 const PlatformMouseEvent& mousePlatformEvent)
83 {
84 MouseEventBoundaryEventDispatcher boundaryEventDispatcher(this, mousePlatfor mEvent, exitedTarget);
85 EventHandlingUtil::sendBoundaryEvents(exitedTarget, enteredTarget, &boundary EventDispatcher);
86 }
87
88 WebInputEventResult MouseEventManager::dispatchMouseEvent(
89 EventTarget* target,
90 const AtomicString& mouseEventType,
91 const PlatformMouseEvent& mouseEvent,
92 EventTarget* relatedTarget,
93 int detail,
94 bool checkForListener)
95 {
96 if (target && target->toNode()
97 && (!checkForListener || target->hasEventListeners(mouseEventType))) {
98 Node* targetNode = target->toNode();
99 MouseEvent* event = MouseEvent::create(mouseEventType,
100 targetNode->document().domWindow(), mouseEvent, detail,
101 relatedTarget ? relatedTarget->toNode() : nullptr);
102 DispatchEventResult dispatchResult = target->dispatchEvent(event);
103 return EventHandlingUtil::toWebInputEventResult(dispatchResult);
104 }
105 return WebInputEventResult::NotHandled;
106 }
107
108 MouseEventManager::MouseEventManager(LocalFrame* frame)
109 : m_frame(frame)
110 {
111 clear();
112 }
113
114 MouseEventManager::~MouseEventManager()
115 {
116 }
117
118 void MouseEventManager::clear()
119 {
120 }
121
122 DEFINE_TRACE(MouseEventManager)
123 {
124 visitor->trace(m_frame);
125 visitor->trace(m_nodeUnderMouse);
126 }
127
128 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698