Home | History | Annotate | Download | only in events
      1 /*
      2  * Copyright (C) 2012 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  *  * Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  *  * Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #include "config.h"
     27 #include "core/dom/Element.h"
     28 #include "core/events/GestureEvent.h"
     29 #include "wtf/text/AtomicString.h"
     30 
     31 namespace blink {
     32 
     33 PassRefPtrWillBeRawPtr<GestureEvent> GestureEvent::create(PassRefPtrWillBeRawPtr<AbstractView> view, const PlatformGestureEvent& event)
     34 {
     35     AtomicString eventType;
     36     float deltaX = 0;
     37     float deltaY = 0;
     38     switch (event.type()) {
     39     case PlatformEvent::GestureScrollBegin:
     40         eventType = EventTypeNames::gesturescrollstart; break;
     41     case PlatformEvent::GestureScrollEnd:
     42         eventType = EventTypeNames::gesturescrollend; break;
     43     case PlatformEvent::GestureScrollUpdate:
     44     case PlatformEvent::GestureScrollUpdateWithoutPropagation:
     45         // Only deltaX/Y are used when converting this
     46         // back to a PlatformGestureEvent.
     47         eventType = EventTypeNames::gesturescrollupdate;
     48         deltaX = event.deltaX();
     49         deltaY = event.deltaY();
     50         break;
     51     case PlatformEvent::GestureTap:
     52         eventType = EventTypeNames::gesturetap; break;
     53     case PlatformEvent::GestureTapUnconfirmed:
     54         eventType = EventTypeNames::gesturetapunconfirmed; break;
     55     case PlatformEvent::GestureTapDown:
     56         eventType = EventTypeNames::gesturetapdown; break;
     57     case PlatformEvent::GestureShowPress:
     58         eventType = EventTypeNames::gestureshowpress; break;
     59     case PlatformEvent::GestureTwoFingerTap:
     60     case PlatformEvent::GestureLongPress:
     61     case PlatformEvent::GesturePinchBegin:
     62     case PlatformEvent::GesturePinchEnd:
     63     case PlatformEvent::GesturePinchUpdate:
     64     case PlatformEvent::GestureTapDownCancel:
     65     default:
     66         return nullptr;
     67     }
     68     return adoptRefWillBeNoop(new GestureEvent(eventType, view, event.globalPosition().x(), event.globalPosition().y(), event.position().x(), event.position().y(), event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(), deltaX, deltaY));
     69 }
     70 
     71 const AtomicString& GestureEvent::interfaceName() const
     72 {
     73     // FIXME: when a GestureEvent.idl interface is defined, return the string "GestureEvent".
     74     // Until that happens, do not advertise an interface that does not exist, since it will
     75     // trip up the bindings integrity checks.
     76     return UIEvent::interfaceName();
     77 }
     78 
     79 bool GestureEvent::isGestureEvent() const
     80 {
     81     return true;
     82 }
     83 
     84 GestureEvent::GestureEvent()
     85     : m_deltaX(0)
     86     , m_deltaY(0)
     87 {
     88 }
     89 
     90 GestureEvent::GestureEvent(const AtomicString& type, PassRefPtrWillBeRawPtr<AbstractView> view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, float deltaX, float deltaY)
     91     : MouseRelatedEvent(type, true, true, view, 0, IntPoint(screenX, screenY), IntPoint(clientX, clientY), IntPoint(0, 0), ctrlKey, altKey, shiftKey, metaKey)
     92     , m_deltaX(deltaX)
     93     , m_deltaY(deltaY)
     94 {
     95 }
     96 
     97 void GestureEvent::trace(Visitor* visitor)
     98 {
     99     MouseRelatedEvent::trace(visitor);
    100 }
    101 
    102 GestureEventDispatchMediator::GestureEventDispatchMediator(PassRefPtrWillBeRawPtr<GestureEvent> gestureEvent)
    103     : EventDispatchMediator(gestureEvent)
    104 {
    105 }
    106 
    107 GestureEvent* GestureEventDispatchMediator::event() const
    108 {
    109     return toGestureEvent(EventDispatchMediator::event());
    110 }
    111 
    112 bool GestureEventDispatchMediator::dispatchEvent(EventDispatcher* dispatcher) const
    113 {
    114     dispatcher->dispatch();
    115     ASSERT(!event()->defaultPrevented());
    116     return event()->defaultHandled() || event()->defaultPrevented();
    117 }
    118 
    119 } // namespace blink
    120