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)
31c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
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)
119c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
120