Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / events / GestureEvent.cpp
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