Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / platform / PlatformWheelEvent.h
1 /*
2  * Copyright (C) 2004, 2005, 2006, 2009 Apple 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  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. 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 APPLE COMPUTER, INC. ``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 #ifndef PlatformWheelEvent_h
27 #define PlatformWheelEvent_h
28
29 #include "platform/PlatformEvent.h"
30 #include "platform/geometry/IntPoint.h"
31
32 namespace WebCore {
33
34 class FloatPoint;
35 class FloatSize;
36
37 // Wheel events come in two flavors:
38 // The ScrollByPixelWheelEvent is a fine-grained event that specifies the precise number of pixels to scroll. It is sent directly by MacBook touchpads on OS X,
39 // and synthesized in other cases where platforms generate line-by-line scrolling events.
40 // The ScrollByPageWheelEvent indicates that the wheel event should scroll an entire page. In this case WebCore's built in paging behavior is used to page
41 // up and down (you get the same behavior as if the user was clicking in a scrollbar track to page up or page down).
42 enum PlatformWheelEventGranularity {
43     ScrollByPageWheelEvent,
44     ScrollByPixelWheelEvent,
45 };
46
47 #if OS(MACOSX)
48 enum PlatformWheelEventPhase {
49     PlatformWheelEventPhaseNone        = 0,
50     PlatformWheelEventPhaseBegan       = 1 << 0,
51     PlatformWheelEventPhaseStationary  = 1 << 1,
52     PlatformWheelEventPhaseChanged     = 1 << 2,
53     PlatformWheelEventPhaseEnded       = 1 << 3,
54     PlatformWheelEventPhaseCancelled   = 1 << 4,
55     PlatformWheelEventPhaseMayBegin    = 1 << 5,
56 };
57 #endif
58
59 class PlatformWheelEvent : public PlatformEvent {
60 public:
61     PlatformWheelEvent()
62         : PlatformEvent(PlatformEvent::Wheel)
63         , m_deltaX(0)
64         , m_deltaY(0)
65         , m_wheelTicksX(0)
66         , m_wheelTicksY(0)
67         , m_granularity(ScrollByPixelWheelEvent)
68         , m_directionInvertedFromDevice(false)
69         , m_hasPreciseScrollingDeltas(false)
70 #if OS(MACOSX)
71         , m_phase(PlatformWheelEventPhaseNone)
72         , m_momentumPhase(PlatformWheelEventPhaseNone)
73         , m_scrollCount(0)
74         , m_unacceleratedScrollingDeltaX(0)
75         , m_unacceleratedScrollingDeltaY(0)
76         , m_canRubberbandLeft(true)
77         , m_canRubberbandRight(true)
78 #endif
79     {
80     }
81
82     PlatformWheelEvent(IntPoint position, IntPoint globalPosition, float deltaX, float deltaY, float wheelTicksX, float wheelTicksY, PlatformWheelEventGranularity granularity, bool shiftKey, bool ctrlKey, bool altKey, bool metaKey)
83         : PlatformEvent(PlatformEvent::Wheel, shiftKey, ctrlKey, altKey, metaKey, 0)
84         , m_position(position)
85         , m_globalPosition(globalPosition)
86         , m_deltaX(deltaX)
87         , m_deltaY(deltaY)
88         , m_wheelTicksX(wheelTicksX)
89         , m_wheelTicksY(wheelTicksY)
90         , m_granularity(granularity)
91         , m_directionInvertedFromDevice(false)
92         , m_hasPreciseScrollingDeltas(false)
93 #if OS(MACOSX)
94         , m_phase(PlatformWheelEventPhaseNone)
95         , m_momentumPhase(PlatformWheelEventPhaseNone)
96         , m_scrollCount(0)
97         , m_unacceleratedScrollingDeltaX(0)
98         , m_unacceleratedScrollingDeltaY(0)
99         , m_canRubberbandLeft(true)
100         , m_canRubberbandRight(true)
101 #endif
102     {
103     }
104
105     const IntPoint& position() const { return m_position; } // PlatformWindow coordinates.
106     const IntPoint& globalPosition() const { return m_globalPosition; } // Screen coordinates.
107
108     float deltaX() const { return m_deltaX; }
109     float deltaY() const { return m_deltaY; }
110
111     float wheelTicksX() const { return m_wheelTicksX; }
112     float wheelTicksY() const { return m_wheelTicksY; }
113
114     PlatformWheelEventGranularity granularity() const { return m_granularity; }
115
116     bool directionInvertedFromDevice() const { return m_directionInvertedFromDevice; }
117
118     bool hasPreciseScrollingDeltas() const { return m_hasPreciseScrollingDeltas; }
119     void setHasPreciseScrollingDeltas(bool b) { m_hasPreciseScrollingDeltas = b; }
120 #if OS(MACOSX)
121     PlatformWheelEventPhase phase() const { return m_phase; }
122     PlatformWheelEventPhase momentumPhase() const { return m_momentumPhase; }
123     unsigned scrollCount() const { return m_scrollCount; }
124     float unacceleratedScrollingDeltaX() const { return m_unacceleratedScrollingDeltaX; }
125     float unacceleratedScrollingDeltaY() const { return m_unacceleratedScrollingDeltaY; }
126     bool useLatchedEventNode() const { return m_momentumPhase == PlatformWheelEventPhaseBegan || m_momentumPhase == PlatformWheelEventPhaseChanged; }
127     bool canRubberbandLeft() const { return m_canRubberbandLeft; }
128     bool canRubberbandRight() const { return m_canRubberbandRight; }
129 #else
130     bool useLatchedEventNode() const { return false; }
131 #endif
132
133 protected:
134     IntPoint m_position;
135     IntPoint m_globalPosition;
136     float m_deltaX;
137     float m_deltaY;
138     float m_wheelTicksX;
139     float m_wheelTicksY;
140     PlatformWheelEventGranularity m_granularity;
141     bool m_directionInvertedFromDevice;
142     bool m_hasPreciseScrollingDeltas;
143 #if OS(MACOSX)
144     PlatformWheelEventPhase m_phase;
145     PlatformWheelEventPhase m_momentumPhase;
146     unsigned m_scrollCount;
147     float m_unacceleratedScrollingDeltaX;
148     float m_unacceleratedScrollingDeltaY;
149     bool m_canRubberbandLeft;
150     bool m_canRubberbandRight;
151 #endif
152 };
153
154 } // namespace WebCore
155
156 #endif // PlatformWheelEvent_h