15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 2753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Element.h" 2806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/GestureEvent.h" 29e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/text/AtomicString.h" 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochPassRefPtrWillBeRawPtr<GestureEvent> GestureEvent::create(PassRefPtrWillBeRawPtr<AbstractView> view, const PlatformGestureEvent& event) 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AtomicString eventType; 361e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) float deltaX = 0; 371e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) float deltaY = 0; 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (event.type()) { 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PlatformEvent::GestureScrollBegin: 401e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) eventType = EventTypeNames::gesturescrollstart; break; 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PlatformEvent::GestureScrollEnd: 421e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) eventType = EventTypeNames::gesturescrollend; break; 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PlatformEvent::GestureScrollUpdate: 44926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case PlatformEvent::GestureScrollUpdateWithoutPropagation: 451e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) // Only deltaX/Y are used when converting this 461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) // back to a PlatformGestureEvent. 471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) eventType = EventTypeNames::gesturescrollupdate; 481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) deltaX = event.deltaX(); 491e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) deltaY = event.deltaY(); 501e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) break; 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PlatformEvent::GestureTap: 521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) eventType = EventTypeNames::gesturetap; break; 5381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) case PlatformEvent::GestureTapUnconfirmed: 541e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) eventType = EventTypeNames::gesturetapunconfirmed; break; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PlatformEvent::GestureTapDown: 561e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) eventType = EventTypeNames::gesturetapdown; break; 571e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) case PlatformEvent::GestureShowPress: 581e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) eventType = EventTypeNames::gestureshowpress; break; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PlatformEvent::GestureTwoFingerTap: 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PlatformEvent::GestureLongPress: 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PlatformEvent::GesturePinchBegin: 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PlatformEvent::GesturePinchEnd: 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PlatformEvent::GesturePinchUpdate: 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PlatformEvent::GestureTapDownCancel: 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 66d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return nullptr; 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 68a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 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)); 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const AtomicString& GestureEvent::interfaceName() const 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 73e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // FIXME: when a GestureEvent.idl interface is defined, return the string "GestureEvent". 74e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // Until that happens, do not advertise an interface that does not exist, since it will 75e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // trip up the bindings integrity checks. 76e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return UIEvent::interfaceName(); 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 791e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)bool GestureEvent::isGestureEvent() const 801e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){ 811e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return true; 821e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} 831e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)GestureEvent::GestureEvent() 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_deltaX(0) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_deltaY(0) 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochGestureEvent::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) 9153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) : MouseRelatedEvent(type, true, true, view, 0, IntPoint(screenX, screenY), IntPoint(clientX, clientY), IntPoint(0, 0), ctrlKey, altKey, shiftKey, metaKey) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_deltaX(deltaX) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_deltaY(deltaY) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 97d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GestureEvent::trace(Visitor* visitor) 98d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 99d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) MouseRelatedEvent::trace(visitor); 100d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 101d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 102a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben MurdochGestureEventDispatchMediator::GestureEventDispatchMediator(PassRefPtrWillBeRawPtr<GestureEvent> gestureEvent) 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : EventDispatchMediator(gestureEvent) 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)GestureEvent* GestureEventDispatchMediator::event() const 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1091e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return toGestureEvent(EventDispatchMediator::event()); 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool GestureEventDispatchMediator::dispatchEvent(EventDispatcher* dispatcher) const 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) dispatcher->dispatch(); 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!event()->defaultPrevented()); 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return event()->defaultHandled() || event()->defaultPrevented(); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore 120