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