Home | History | Annotate | Download | only in dom
      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/dom/GestureEvent.h"
     29 #include "wtf/text/AtomicString.h"
     30 
     31 namespace WebCore {
     32 
     33 PassRefPtr<GestureEvent> GestureEvent::create()
     34 {
     35     return adoptRef(new GestureEvent);
     36 }
     37 
     38 PassRefPtr<GestureEvent> GestureEvent::create(PassRefPtr<AbstractView> view, const PlatformGestureEvent& event)
     39 {
     40     AtomicString eventType;
     41     switch (event.type()) {
     42     case PlatformEvent::GestureScrollBegin:
     43         eventType = eventNames().gesturescrollstartEvent; break;
     44     case PlatformEvent::GestureScrollEnd:
     45         eventType = eventNames().gesturescrollendEvent; break;
     46     case PlatformEvent::GestureScrollUpdate:
     47     case PlatformEvent::GestureScrollUpdateWithoutPropagation:
     48         eventType = eventNames().gesturescrollupdateEvent; break;
     49     case PlatformEvent::GestureTap:
     50         eventType = eventNames().gesturetapEvent; break;
     51     case PlatformEvent::GestureTapUnconfirmed:
     52         eventType = eventNames().gesturetapunconfirmedEvent; break;
     53     case PlatformEvent::GestureTapDown:
     54         eventType = eventNames().gesturetapdownEvent; break;
     55     case PlatformEvent::GestureTwoFingerTap:
     56     case PlatformEvent::GestureLongPress:
     57     case PlatformEvent::GesturePinchBegin:
     58     case PlatformEvent::GesturePinchEnd:
     59     case PlatformEvent::GesturePinchUpdate:
     60     case PlatformEvent::GestureTapDownCancel:
     61     default:
     62         return 0;
     63     }
     64     return adoptRef(new GestureEvent(eventType, view, event.globalPosition().x(), event.globalPosition().y(), event.position().x(), event.position().y(), event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(), event.deltaX(), event.deltaY()));
     65 }
     66 
     67 void GestureEvent::initGestureEvent(const AtomicString& type, PassRefPtr<AbstractView> view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, float deltaX, float deltaY)
     68 {
     69     if (dispatched())
     70         return;
     71 
     72     initUIEvent(type, true, true, view, 0);
     73     m_screenLocation = IntPoint(screenX, screenY);
     74     m_ctrlKey = ctrlKey;
     75     m_altKey = altKey;
     76     m_shiftKey = shiftKey;
     77     m_metaKey = metaKey;
     78 
     79     m_deltaX = deltaX;
     80     m_deltaY = deltaY;
     81 
     82     initCoordinates(IntPoint(clientX, clientY));
     83 }
     84 
     85 const AtomicString& GestureEvent::interfaceName() const
     86 {
     87     // FIXME: when a GestureEvent.idl interface is defined, return the string "GestureEvent".
     88     // Until that happens, do not advertise an interface that does not exist, since it will
     89     // trip up the bindings integrity checks.
     90     return UIEvent::interfaceName();
     91 }
     92 
     93 bool GestureEvent::isGestureEvent() const
     94 {
     95     return true;
     96 }
     97 
     98 GestureEvent::GestureEvent()
     99     : m_deltaX(0)
    100     , m_deltaY(0)
    101 {
    102 }
    103 
    104 GestureEvent::GestureEvent(const AtomicString& type, PassRefPtr<AbstractView> view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, float deltaX, float deltaY)
    105     : MouseRelatedEvent(type, true, true, view, 0, IntPoint(screenX, screenY), IntPoint(clientX, clientY), IntPoint(0, 0), ctrlKey, altKey, shiftKey, metaKey)
    106     , m_deltaX(deltaX)
    107     , m_deltaY(deltaY)
    108 {
    109 }
    110 
    111 GestureEventDispatchMediator::GestureEventDispatchMediator(PassRefPtr<GestureEvent> gestureEvent)
    112     : EventDispatchMediator(gestureEvent)
    113 {
    114 }
    115 
    116 GestureEvent* GestureEventDispatchMediator::event() const
    117 {
    118     return toGestureEvent(EventDispatchMediator::event());
    119 }
    120 
    121 bool GestureEventDispatchMediator::dispatchEvent(EventDispatcher* dispatcher) const
    122 {
    123     if (isDisabledFormControl(dispatcher->node()))
    124         return true;
    125 
    126     dispatcher->dispatch();
    127     ASSERT(!event()->defaultPrevented());
    128     return event()->defaultHandled() || event()->defaultPrevented();
    129 }
    130 
    131 } // namespace WebCore
    132