Home | History | Annotate | Download | only in input
      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