| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "sky/engine/config.h" | 5 #include "sky/engine/config.h" |
| 6 #include "sky/engine/core/frame/NewEventHandler.h" | 6 #include "sky/engine/core/frame/NewEventHandler.h" |
| 7 | 7 |
| 8 #include "sky/engine/core/dom/Document.h" | 8 #include "sky/engine/core/dom/Document.h" |
| 9 #include "sky/engine/core/dom/NodeRenderingTraversal.h" | 9 #include "sky/engine/core/dom/NodeRenderingTraversal.h" |
| 10 #include "sky/engine/core/editing/Editor.h" | 10 #include "sky/engine/core/editing/Editor.h" |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 // embedder regardless, so we set m_suppressNextCharEvent, will will prevent | 162 // embedder regardless, so we set m_suppressNextCharEvent, will will prevent |
| 163 // us from dispatching the keypress event when we receive that Char event. | 163 // us from dispatching the keypress event when we receive that Char event. |
| 164 if (handled && event.type == WebInputEvent::KeyDown) | 164 if (handled && event.type == WebInputEvent::KeyDown) |
| 165 m_suppressNextCharEvent = true; | 165 m_suppressNextCharEvent = true; |
| 166 | 166 |
| 167 return handled; | 167 return handled; |
| 168 } | 168 } |
| 169 | 169 |
| 170 bool NewEventHandler::handlePointerDownEvent(const WebPointerEvent& event) | 170 bool NewEventHandler::handlePointerDownEvent(const WebPointerEvent& event) |
| 171 { | 171 { |
| 172 // In principle, we shouldn't get another pointer down for the same |
| 173 // pointer ID, but for mice, we don't get a pointer cancel when you |
| 174 // drag outside the window frame on Linux. For now, send the pointer |
| 175 // cancel at this point. |
| 176 if (event.kind == WebPointerEvent::Mouse |
| 177 && m_targetForPointer.find(event.pointer) != m_targetForPointer.end()) { |
| 178 WebPointerEvent fakeCancel = event; |
| 179 fakeCancel.type = WebInputEvent::PointerCancel; |
| 180 handlePointerCancelEvent(fakeCancel); |
| 181 } |
| 182 |
| 172 ASSERT(m_targetForPointer.find(event.pointer) == m_targetForPointer.end()); | 183 ASSERT(m_targetForPointer.find(event.pointer) == m_targetForPointer.end()); |
| 173 HitTestResult hitTestResult = performHitTest(positionForEvent(event)); | 184 HitTestResult hitTestResult = performHitTest(positionForEvent(event)); |
| 174 RefPtr<Node> target = targetForHitTestResult(hitTestResult); | 185 RefPtr<Node> target = targetForHitTestResult(hitTestResult); |
| 175 if (!target) | 186 if (!target) |
| 176 return false; | 187 return false; |
| 177 m_targetForPointer[event.pointer] = target; | 188 m_targetForPointer[event.pointer] = target; |
| 178 bool eventSwallowed = !dispatchPointerEvent(*target, event); | 189 bool eventSwallowed = !dispatchPointerEvent(*target, event); |
| 179 // TODO(abarth): Set the target for the pointer to something determined when | 190 // TODO(abarth): Set the target for the pointer to something determined when |
| 180 // dispatching the event. | 191 // dispatching the event. |
| 181 updateSelectionForPointerDown(hitTestResult, event); | 192 updateSelectionForPointerDown(hitTestResult, event); |
| 182 return eventSwallowed; | 193 return eventSwallowed; |
| 183 } | 194 } |
| 184 | 195 |
| 185 bool NewEventHandler::handlePointerUpEvent(const WebPointerEvent& event) | 196 bool NewEventHandler::handlePointerUpEvent(const WebPointerEvent& event) |
| 186 { | 197 { |
| 187 RefPtr<Node> target = m_targetForPointer[event.pointer]; | 198 auto it = m_targetForPointer.find(event.pointer); |
| 188 if (!target) | 199 if (it == m_targetForPointer.end()) |
| 189 return false; | 200 return false; |
| 190 m_targetForPointer.erase(event.pointer); | 201 RefPtr<Node> target = it->second; |
| 202 m_targetForPointer.erase(it); |
| 203 ASSERT(target); |
| 191 bool eventSwallowed = !dispatchPointerEvent(*target, event); | 204 bool eventSwallowed = !dispatchPointerEvent(*target, event); |
| 192 // When the user releases the primary pointer, we need to dispatch a tap | 205 // When the user releases the primary pointer, we need to dispatch a tap |
| 193 // event to the common ancestor for where the pointer went down and where | 206 // event to the common ancestor for where the pointer went down and where |
| 194 // it came up. | 207 // it came up. |
| 195 if (!dispatchClickEvent(*target, event)) | 208 if (!dispatchClickEvent(*target, event)) |
| 196 eventSwallowed = true; | 209 eventSwallowed = true; |
| 197 return eventSwallowed; | 210 return eventSwallowed; |
| 198 } | 211 } |
| 199 | 212 |
| 200 bool NewEventHandler::handlePointerMoveEvent(const WebPointerEvent& event) | 213 bool NewEventHandler::handlePointerMoveEvent(const WebPointerEvent& event) |
| 201 { | 214 { |
| 202 RefPtr<Node> target = m_targetForPointer[event.pointer]; | 215 auto it = m_targetForPointer.find(event.pointer); |
| 203 return target && dispatchPointerEvent(*target.get(), event); | 216 if (it == m_targetForPointer.end()) |
| 217 return false; |
| 218 RefPtr<Node> target = it->second; |
| 219 ASSERT(target); |
| 220 return dispatchPointerEvent(*target.get(), event); |
| 204 } | 221 } |
| 205 | 222 |
| 206 bool NewEventHandler::handlePointerCancelEvent(const WebPointerEvent& event) | 223 bool NewEventHandler::handlePointerCancelEvent(const WebPointerEvent& event) |
| 207 { | 224 { |
| 208 RefPtr<Node> target = m_targetForPointer[event.pointer]; | 225 auto it = m_targetForPointer.find(event.pointer); |
| 209 return target && dispatchPointerEvent(*target, event); | 226 if (it == m_targetForPointer.end()) |
| 227 return false; |
| 228 RefPtr<Node> target = it->second; |
| 229 m_targetForPointer.erase(it); |
| 230 ASSERT(target); |
| 231 return dispatchPointerEvent(*target, event); |
| 210 } | 232 } |
| 211 | 233 |
| 212 } | 234 } |
| OLD | NEW |