OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Neither the name of Google Inc. nor the names of its | 10 * * Neither the name of Google Inc. nor the names of its |
(...skipping 11 matching lines...) Expand all Loading... |
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
25 */ | 25 */ |
26 | 26 |
27 #include "sky/engine/config.h" | 27 #include "sky/engine/config.h" |
28 #include "sky/engine/core/events/EventPath.h" | 28 #include "sky/engine/core/events/EventPath.h" |
29 | 29 |
30 #include "gen/sky/core/EventNames.h" | 30 #include "gen/sky/core/EventNames.h" |
31 #include "sky/engine/core/dom/Document.h" | 31 #include "sky/engine/core/dom/Document.h" |
32 #include "sky/engine/core/dom/Touch.h" | |
33 #include "sky/engine/core/dom/TouchList.h" | |
34 #include "sky/engine/core/dom/shadow/InsertionPoint.h" | 32 #include "sky/engine/core/dom/shadow/InsertionPoint.h" |
35 #include "sky/engine/core/dom/shadow/ShadowRoot.h" | 33 #include "sky/engine/core/dom/shadow/ShadowRoot.h" |
36 #include "sky/engine/core/events/TouchEvent.h" | 34 #include "sky/engine/core/events/Event.h" |
37 #include "sky/engine/core/events/TouchEventContext.h" | |
38 | 35 |
39 namespace blink { | 36 namespace blink { |
40 | 37 |
41 EventTarget* EventPath::eventTargetRespectingTargetRules(Node* referenceNode) | 38 EventTarget* EventPath::eventTargetRespectingTargetRules(Node* referenceNode) |
42 { | 39 { |
43 ASSERT(referenceNode); | 40 ASSERT(referenceNode); |
44 return referenceNode; | 41 return referenceNode; |
45 } | 42 } |
46 | 43 |
47 static inline bool shouldStopAtShadowRoot(Event& event, ShadowRoot& shadowRoot,
EventTarget& target) | 44 static inline bool shouldStopAtShadowRoot(Event& event, ShadowRoot& shadowRoot,
EventTarget& target) |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 break; | 263 break; |
267 } | 264 } |
268 } else if (at(i).target() == at(i).relatedTarget()) { | 265 } else if (at(i).target() == at(i).relatedTarget()) { |
269 // Event dispatching should be stopped here. | 266 // Event dispatching should be stopped here. |
270 shrink(i); | 267 shrink(i); |
271 break; | 268 break; |
272 } | 269 } |
273 } | 270 } |
274 } | 271 } |
275 | 272 |
276 void EventPath::adjustForTouchEvent(Node* node, TouchEvent& touchEvent) | |
277 { | |
278 Vector<RawPtr<TouchList> > adjustedTouches; | |
279 Vector<RawPtr<TouchList> > adjustedTargetTouches; | |
280 Vector<RawPtr<TouchList> > adjustedChangedTouches; | |
281 Vector<RawPtr<TreeScope> > treeScopes; | |
282 | |
283 for (size_t i = 0; i < m_treeScopeEventContexts.size(); ++i) { | |
284 TouchEventContext* touchEventContext = m_treeScopeEventContexts[i]->ensu
reTouchEventContext(); | |
285 adjustedTouches.append(&touchEventContext->touches()); | |
286 adjustedTargetTouches.append(&touchEventContext->targetTouches()); | |
287 adjustedChangedTouches.append(&touchEventContext->changedTouches()); | |
288 treeScopes.append(&m_treeScopeEventContexts[i]->treeScope()); | |
289 } | |
290 | |
291 adjustTouchList(node, touchEvent.touches(), adjustedTouches, treeScopes); | |
292 adjustTouchList(node, touchEvent.targetTouches(), adjustedTargetTouches, tre
eScopes); | |
293 adjustTouchList(node, touchEvent.changedTouches(), adjustedChangedTouches, t
reeScopes); | |
294 | |
295 #if ENABLE(ASSERT) | |
296 for (size_t i = 0; i < m_treeScopeEventContexts.size(); ++i) { | |
297 TreeScope& treeScope = m_treeScopeEventContexts[i]->treeScope(); | |
298 TouchEventContext* touchEventContext = m_treeScopeEventContexts[i]->touc
hEventContext(); | |
299 checkReachability(treeScope, touchEventContext->touches()); | |
300 checkReachability(treeScope, touchEventContext->targetTouches()); | |
301 checkReachability(treeScope, touchEventContext->changedTouches()); | |
302 } | |
303 #endif | |
304 } | |
305 | |
306 void EventPath::adjustTouchList(const Node* node, const TouchList* touchList, Ve
ctor<RawPtr<TouchList> > adjustedTouchList, const Vector<RawPtr<TreeScope> >& tr
eeScopes) | |
307 { | |
308 if (!touchList) | |
309 return; | |
310 for (size_t i = 0; i < touchList->length(); ++i) { | |
311 const Touch& touch = *touchList->item(i); | |
312 RelatedTargetMap relatedNodeMap; | |
313 buildRelatedNodeMap(touch.target()->toNode(), relatedNodeMap); | |
314 for (size_t j = 0; j < treeScopes.size(); ++j) { | |
315 adjustedTouchList[j]->append(touch.cloneWithNewTarget(findRelatedNod
e(treeScopes[j], relatedNodeMap))); | |
316 } | |
317 } | |
318 } | |
319 | |
320 #if ENABLE(ASSERT) | |
321 void EventPath::checkReachability(TreeScope& treeScope, TouchList& touchList) | |
322 { | |
323 for (size_t i = 0; i < touchList.length(); ++i) | |
324 ASSERT(touchList.item(i)->target()->toNode()->treeScope().isInclusiveOld
erSiblingShadowRootOrAncestorTreeScopeOf(treeScope)); | |
325 } | |
326 #endif | |
327 | |
328 } // namespace | 273 } // namespace |
OLD | NEW |