diff options
Diffstat (limited to 'WebCore/platform/PlatformWheelEvent.h')
-rw-r--r-- | WebCore/platform/PlatformWheelEvent.h | 47 |
1 files changed, 35 insertions, 12 deletions
diff --git a/WebCore/platform/PlatformWheelEvent.h b/WebCore/platform/PlatformWheelEvent.h index 7623ff8..fc954ed 100644 --- a/WebCore/platform/PlatformWheelEvent.h +++ b/WebCore/platform/PlatformWheelEvent.h @@ -47,7 +47,9 @@ typedef struct _GdkEventScroll GdkEventScroll; #endif #if PLATFORM(QT) +QT_BEGIN_NAMESPACE class QWheelEvent; +QT_END_NAMESPACE #endif #if PLATFORM(WX) @@ -57,31 +59,46 @@ class wxPoint; namespace WebCore { + // Wheel events come in three flavors: + // The ScrollByPixelWheelEvent is a fine-grained event that specifies the precise number of pixels to scroll. It is sent by MacBook touchpads on OS X. + // For ScrollByPixelWheelEvents, the delta values contain the precise number of pixels to scroll. + // The ScrollByLineWheelEvent (the normal wheel event) sends a delta that can be corrected by a line multiplier to determine how many lines to scroll. + // If the platform has configurable line sensitivity (Windows), then the number of lines to scroll is used in order to behave like the platform. + // If the platform does not have configurable line sensitivity, then WebCore's default behavior is used (which scrolls 3 * the wheel line delta). + // For ScrollByLineWheelEvents, the delta values represent the number of lines to scroll. + // The ScrollByPageWheelEvent indicates that the wheel event should scroll an entire page instead. In this case WebCore's built in paging behavior is used to page + // up and down (you get the same behavior as if the user was clicking in a scrollbar track to page up or page down). Page scrolling only works in the vertical direction. + enum PlatformWheelEventGranularity { ScrollByLineWheelEvent, ScrollByPageWheelEvent, ScrollByPixelWheelEvent }; + + // WebCore uses a line multiple of ~3 (40px per line step) when doing arrowing with a scrollbar or line stepping via the arrow keys. The delta for wheeling is expressed + // as a # of actual lines (40 / 3 = 1 wheel line). We use the horizontalLineMultiplier and verticalLineMultiplier methods to incorporate the line multiplier into the deltas. On + // platforms that do not support wheel sensitivity, we use this hardcoded constant value of 3 to ensure that wheeling by default matches the WebCore multiplier you + // get when doing other kinds of line stepping. + const int cLineMultiplier = 3; + class PlatformWheelEvent { public: - const IntPoint& pos() const { return m_position; } - const IntPoint& globalPos() const { return m_globalPosition; } + const IntPoint& pos() const { return m_position; } // PlatformWindow coordinates. + const IntPoint& globalPos() const { return m_globalPosition; } // Screen coordinates. float deltaX() const { return m_deltaX; } float deltaY() const { return m_deltaY; } + PlatformWheelEventGranularity granularity() const { return m_granularity; } + bool isAccepted() const { return m_isAccepted; } bool shiftKey() const { return m_shiftKey; } bool ctrlKey() const { return m_ctrlKey; } bool altKey() const { return m_altKey; } bool metaKey() const { return m_metaKey; } - int x() const { return m_position.x(); } + int x() const { return m_position.x(); } // PlatformWindow coordinates. int y() const { return m_position.y(); } - int globalX() const { return m_globalPosition.x(); } + int globalX() const { return m_globalPosition.x(); } // Screen coordinates. int globalY() const { return m_globalPosition.y(); } void accept() { m_isAccepted = true; } void ignore() { m_isAccepted = false; } - - bool isContinuous() const { return m_isContinuous; } - float continuousDeltaX() const { return m_continuousDeltaX; } - float continuousDeltaY() const { return m_continuousDeltaY; } #if PLATFORM(MAC) PlatformWheelEvent(NSEvent*); @@ -99,19 +116,25 @@ namespace WebCore { PlatformWheelEvent(const wxMouseEvent&, const wxPoint&); #endif - private: + protected: +#if !PLATFORM(WIN) + int horizontalLineMultiplier() const { return cLineMultiplier; } + int verticalLineMultiplier() const { return cLineMultiplier; } +#else + int horizontalLineMultiplier() const; + int verticalLineMultiplier() const; +#endif + IntPoint m_position; IntPoint m_globalPosition; float m_deltaX; float m_deltaY; + PlatformWheelEventGranularity m_granularity; bool m_isAccepted; bool m_shiftKey; bool m_ctrlKey; bool m_altKey; bool m_metaKey; - bool m_isContinuous; - float m_continuousDeltaX; - float m_continuousDeltaY; }; } // namespace WebCore |