1 // Copyright 2014 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 "content/common/input/web_touch_event_traits.h" 6 7 #include "base/logging.h" 8 9 using blink::WebInputEvent; 10 using blink::WebTouchEvent; 11 using blink::WebTouchPoint; 12 13 namespace content { 14 15 bool WebTouchEventTraits::AllTouchPointsHaveState( 16 const WebTouchEvent& event, 17 blink::WebTouchPoint::State state) { 18 if (!event.touchesLength) 19 return false; 20 for (size_t i = 0; i < event.touchesLength; ++i) { 21 if (event.touches[i].state != state) 22 return false; 23 } 24 return true; 25 } 26 27 bool WebTouchEventTraits::IsTouchSequenceStart(const WebTouchEvent& event) { 28 DCHECK(event.touchesLength); 29 if (event.type != WebInputEvent::TouchStart) 30 return false; 31 return AllTouchPointsHaveState(event, blink::WebTouchPoint::StatePressed); 32 } 33 34 void WebTouchEventTraits::ResetType(WebInputEvent::Type type, 35 double timestamp_sec, 36 WebTouchEvent* event) { 37 DCHECK(WebInputEvent::isTouchEventType(type)); 38 event->type = type; 39 event->cancelable = (type != WebInputEvent::TouchCancel); 40 event->timeStampSeconds = timestamp_sec; 41 } 42 43 void WebTouchEventTraits::ResetTypeAndTouchStates(WebInputEvent::Type type, 44 double timestamp_sec, 45 WebTouchEvent* event) { 46 ResetType(type, timestamp_sec, event); 47 48 WebTouchPoint::State newState = WebTouchPoint::StateUndefined; 49 switch (event->type) { 50 case WebInputEvent::TouchStart: 51 newState = WebTouchPoint::StatePressed; 52 break; 53 case WebInputEvent::TouchMove: 54 newState = WebTouchPoint::StateMoved; 55 break; 56 case WebInputEvent::TouchEnd: 57 newState = WebTouchPoint::StateReleased; 58 break; 59 case WebInputEvent::TouchCancel: 60 newState = WebTouchPoint::StateCancelled; 61 break; 62 default: 63 NOTREACHED(); 64 break; 65 } 66 for (size_t i = 0; i < event->touchesLength; ++i) 67 event->touches[i].state = newState; 68 } 69 70 } // namespace content 71