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 bool WebTouchEventTraits::IsTouchSequenceEnd(const WebTouchEvent& event) {
     35   if (event.type != WebInputEvent::TouchEnd &&
     36       event.type != WebInputEvent::TouchCancel)
     37     return false;
     38   if (!event.touchesLength)
     39     return true;
     40   for (size_t i = 0; i < event.touchesLength; ++i) {
     41     if (event.touches[i].state != blink::WebTouchPoint::StateReleased &&
     42         event.touches[i].state != blink::WebTouchPoint::StateCancelled)
     43       return false;
     44   }
     45   return true;
     46 }
     47 
     48 void WebTouchEventTraits::ResetType(WebInputEvent::Type type,
     49                                     double timestamp_sec,
     50                                     WebTouchEvent* event) {
     51   DCHECK(WebInputEvent::isTouchEventType(type));
     52   event->type = type;
     53   event->cancelable = (type != WebInputEvent::TouchCancel);
     54   event->timeStampSeconds = timestamp_sec;
     55 }
     56 
     57 void WebTouchEventTraits::ResetTypeAndTouchStates(WebInputEvent::Type type,
     58                                                   double timestamp_sec,
     59                                                   WebTouchEvent* event) {
     60   ResetType(type, timestamp_sec, event);
     61 
     62   WebTouchPoint::State newState = WebTouchPoint::StateUndefined;
     63   switch (event->type) {
     64     case WebInputEvent::TouchStart:
     65       newState = WebTouchPoint::StatePressed;
     66       break;
     67     case WebInputEvent::TouchMove:
     68       newState = WebTouchPoint::StateMoved;
     69       break;
     70     case WebInputEvent::TouchEnd:
     71       newState = WebTouchPoint::StateReleased;
     72       break;
     73     case WebInputEvent::TouchCancel:
     74       newState = WebTouchPoint::StateCancelled;
     75       break;
     76     default:
     77       NOTREACHED();
     78       break;
     79   }
     80   for (size_t i = 0; i < event->touchesLength; ++i)
     81     event->touches[i].state = newState;
     82 }
     83 
     84 }  // namespace content
     85