1/*
2 * Copyright 2008, The Android Open Source Project
3 * Copyright (C) 2012 Research In Motion Limited. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#pragma once
28
29#if ENABLE(IOS_TOUCH_EVENTS)
30#include <WebKitAdditions/TouchEventIOS.h>
31#elif ENABLE(TOUCH_EVENTS)
32
33#include "MouseRelatedEvent.h"
34#include "TouchList.h"
35
36namespace WebCore {
37
38class TouchEvent final : public MouseRelatedEvent {
39public:
40 virtual ~TouchEvent();
41
42 static Ref<TouchEvent> create(TouchList* touches, TouchList* targetTouches, TouchList* changedTouches,
43 const AtomString& type, RefPtr<WindowProxy>&& view, const IntPoint& globalLocation, OptionSet<Modifier> modifiers)
44 {
45 return adoptRef(*new TouchEvent(touches, targetTouches, changedTouches, type, WTFMove(view), globalLocation, modifiers));
46 }
47 static Ref<TouchEvent> createForBindings()
48 {
49 return adoptRef(*new TouchEvent);
50 }
51
52 struct Init : MouseRelatedEventInit {
53 RefPtr<TouchList> touches;
54 RefPtr<TouchList> targetTouches;
55 RefPtr<TouchList> changedTouches;
56 };
57
58 static Ref<TouchEvent> create(const AtomString& type, const Init& initializer, IsTrusted isTrusted = IsTrusted::No)
59 {
60 return adoptRef(*new TouchEvent(type, initializer, isTrusted));
61 }
62
63 void initTouchEvent(TouchList* touches, TouchList* targetTouches, TouchList* changedTouches, const AtomString& type,
64 RefPtr<WindowProxy>&&, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
65
66 TouchList* touches() const { return m_touches.get(); }
67 TouchList* targetTouches() const { return m_targetTouches.get(); }
68 TouchList* changedTouches() const { return m_changedTouches.get(); }
69
70 void setTouches(RefPtr<TouchList>&& touches) { m_touches = touches; }
71 void setTargetTouches(RefPtr<TouchList>&& targetTouches) { m_targetTouches = targetTouches; }
72 void setChangedTouches(RefPtr<TouchList>&& changedTouches) { m_changedTouches = changedTouches; }
73
74 bool isTouchEvent() const override;
75
76 EventInterface eventInterface() const override;
77
78private:
79 TouchEvent();
80 TouchEvent(TouchList* touches, TouchList* targetTouches, TouchList* changedTouches, const AtomString& type,
81 RefPtr<WindowProxy>&&, const IntPoint& globalLocation, OptionSet<Modifier>);
82 TouchEvent(const AtomString&, const Init&, IsTrusted);
83
84 RefPtr<TouchList> m_touches;
85 RefPtr<TouchList> m_targetTouches;
86 RefPtr<TouchList> m_changedTouches;
87};
88
89} // namespace WebCore
90
91SPECIALIZE_TYPE_TRAITS_EVENT(TouchEvent)
92
93#endif // ENABLE(TOUCH_EVENTS)
94