Title: [92699] trunk/Source
Revision
92699
Author
commit-qu...@webkit.org
Date
2011-08-09 12:42:26 -0700 (Tue, 09 Aug 2011)

Log Message

[Chromium] Enable rubber banding when scrolling.

https://bugs.webkit.org/show_bug.cgi?id=65707

Patch by Alexei Svitkine <asvitk...@chromium.org> on 2011-08-09
Reviewed by Dimitri Glazkov.

Source/WebCore:

No new tests since this is just syncing changes to chromium platform.

* platform/PlatformWheelEvent.h:
(WebCore::PlatformWheelEvent::PlatformWheelEvent):
* platform/chromium/ScrollAnimatorChromiumMac.mm:
(WebCore::ScrollAnimatorChromiumMac::handleGestureEvent):

Source/WebKit/chromium:

* features.gypi:
* public/WebInputEvent.h:
(WebKit::WebMouseWheelEvent::WebMouseWheelEvent):
(WebKit::WebGestureEvent::WebGestureEvent):
* public/mac/WebInputEventFactory.h:
* src/WebInputEventConversion.cpp:
(WebKit::PlatformWheelEventBuilder::PlatformWheelEventBuilder):
(WebKit::PlatformGestureEventBuilder::PlatformGestureEventBuilder):
* src/WebInputEventConversion.h:
* src/WebPopupMenuImpl.cpp:
(WebKit::WebPopupMenuImpl::GestureEvent):
(WebKit::WebPopupMenuImpl::handleInputEvent):
* src/WebPopupMenuImpl.h:
* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::gestureEvent):
(WebKit::WebViewImpl::handleInputEvent):
* src/WebViewImpl.h:
* src/mac/WebInputEventFactory.mm:
(WebKit::gestureEventTypeForEvent):
(WebKit::phaseForNSEventPhase):
(WebKit::phaseForEvent):
(WebKit::momentumPhaseForEvent):
(WebKit::WebInputEventFactory::mouseWheelEvent):
(WebKit::WebInputEventFactory::gestureEvent):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (92698 => 92699)


--- trunk/Source/WebCore/ChangeLog	2011-08-09 19:29:21 UTC (rev 92698)
+++ trunk/Source/WebCore/ChangeLog	2011-08-09 19:42:26 UTC (rev 92699)
@@ -1,3 +1,18 @@
+2011-08-09  Alexei Svitkine  <asvitk...@chromium.org>
+
+        [Chromium] Enable rubber banding when scrolling.
+
+        https://bugs.webkit.org/show_bug.cgi?id=65707
+
+        Reviewed by Dimitri Glazkov.
+
+        No new tests since this is just syncing changes to chromium platform.
+
+        * platform/PlatformWheelEvent.h:
+        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
+        * platform/chromium/ScrollAnimatorChromiumMac.mm:
+        (WebCore::ScrollAnimatorChromiumMac::handleGestureEvent):
+
 2011-08-09  Vsevolod Vlasov  <vse...@chromium.org>
 
         Web Inspector: XHRs end up in the resources panel.

Modified: trunk/Source/WebCore/platform/PlatformWheelEvent.h (92698 => 92699)


--- trunk/Source/WebCore/platform/PlatformWheelEvent.h	2011-08-09 19:29:21 UTC (rev 92698)
+++ trunk/Source/WebCore/platform/PlatformWheelEvent.h	2011-08-09 19:42:26 UTC (rev 92699)
@@ -73,7 +73,7 @@
         ScrollByPixelWheelEvent
     };
 
-#if PLATFORM(MAC)
+#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
     enum PlatformWheelEventPhase {
         PlatformWheelEventPhaseNone        = 0,
         PlatformWheelEventPhaseBegan       = 1 << 1,
@@ -97,7 +97,7 @@
             , m_ctrlKey(false)
             , m_altKey(false)
             , m_metaKey(false)
-#if PLATFORM(MAC)
+#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
             , m_hasPreciseScrollingDeltas(false)
             , m_phase(PlatformWheelEventPhaseNone)
             , m_momentumPhase(PlatformWheelEventPhaseNone)
@@ -119,7 +119,7 @@
             , m_ctrlKey(ctrlKey)
             , m_altKey(altKey)
             , m_metaKey(metaKey)
-#if PLATFORM(MAC)
+#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
             , m_hasPreciseScrollingDeltas(false)
             , m_phase(PlatformWheelEventPhaseNone)
             , m_momentumPhase(PlatformWheelEventPhaseNone)
@@ -174,7 +174,9 @@
 #if defined(__OBJC__)
         PlatformWheelEvent(NSEvent *, NSView *windowView);
 #endif
+#endif
 
+#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
         PlatformWheelEventPhase phase() const { return m_phase; }
         PlatformWheelEventPhase momentumPhase() const { return m_momentumPhase; }
         bool hasPreciseScrollingDeltas() const { return m_hasPreciseScrollingDeltas; }
@@ -213,7 +215,7 @@
         bool m_ctrlKey;
         bool m_altKey;
         bool m_metaKey;
-#if PLATFORM(MAC)
+#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
         bool m_hasPreciseScrollingDeltas;
         PlatformWheelEventPhase m_phase;
         PlatformWheelEventPhase m_momentumPhase;

Modified: trunk/Source/WebCore/platform/chromium/ScrollAnimatorChromiumMac.mm (92698 => 92699)


--- trunk/Source/WebCore/platform/chromium/ScrollAnimatorChromiumMac.mm	2011-08-09 19:29:21 UTC (rev 92698)
+++ trunk/Source/WebCore/platform/chromium/ScrollAnimatorChromiumMac.mm	2011-08-09 19:42:26 UTC (rev 92699)
@@ -852,7 +852,7 @@
 {
     if (gestureEvent.type() == PlatformGestureEvent::ScrollBeginType)
         beginScrollGesture();
-    else
+    else if (gestureEvent.type() == PlatformGestureEvent::ScrollEndType)
         endScrollGesture();
 }
 

Modified: trunk/Source/WebKit/chromium/ChangeLog (92698 => 92699)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-08-09 19:29:21 UTC (rev 92698)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-08-09 19:42:26 UTC (rev 92699)
@@ -1,3 +1,36 @@
+2011-08-09  Alexei Svitkine  <asvitk...@chromium.org>
+
+        [Chromium] Enable rubber banding when scrolling.
+
+        https://bugs.webkit.org/show_bug.cgi?id=65707
+
+        Reviewed by Dimitri Glazkov.
+
+        * features.gypi:
+        * public/WebInputEvent.h:
+        (WebKit::WebMouseWheelEvent::WebMouseWheelEvent):
+        (WebKit::WebGestureEvent::WebGestureEvent):
+        * public/mac/WebInputEventFactory.h:
+        * src/WebInputEventConversion.cpp:
+        (WebKit::PlatformWheelEventBuilder::PlatformWheelEventBuilder):
+        (WebKit::PlatformGestureEventBuilder::PlatformGestureEventBuilder):
+        * src/WebInputEventConversion.h:
+        * src/WebPopupMenuImpl.cpp:
+        (WebKit::WebPopupMenuImpl::GestureEvent):
+        (WebKit::WebPopupMenuImpl::handleInputEvent):
+        * src/WebPopupMenuImpl.h:
+        * src/WebViewImpl.cpp:
+        (WebKit::WebViewImpl::gestureEvent):
+        (WebKit::WebViewImpl::handleInputEvent):
+        * src/WebViewImpl.h:
+        * src/mac/WebInputEventFactory.mm:
+        (WebKit::gestureEventTypeForEvent):
+        (WebKit::phaseForNSEventPhase):
+        (WebKit::phaseForEvent):
+        (WebKit::momentumPhaseForEvent):
+        (WebKit::WebInputEventFactory::mouseWheelEvent):
+        (WebKit::WebInputEventFactory::gestureEvent):
+
 2011-08-09  Dmitry Lomov  <dslo...@google.com>
 
         https://bugs.webkit.org/show_bug.cgi?id=65778

Modified: trunk/Source/WebKit/chromium/features.gypi (92698 => 92699)


--- trunk/Source/WebKit/chromium/features.gypi	2011-08-09 19:29:21 UTC (rev 92698)
+++ trunk/Source/WebKit/chromium/features.gypi	2011-08-09 19:42:26 UTC (rev 92699)
@@ -153,6 +153,7 @@
       }],
       ['OS=="mac"', {
         'feature_defines': [
+          'ENABLE_RUBBER_BANDING=1',
           'WTF_USE_SKIA_ON_MAC_CHROMIUM=<(use_skia)',
         ],
       }],

Modified: trunk/Source/WebKit/chromium/public/WebInputEvent.h (92698 => 92699)


--- trunk/Source/WebKit/chromium/public/WebInputEvent.h	2011-08-09 19:29:21 UTC (rev 92698)
+++ trunk/Source/WebKit/chromium/public/WebInputEvent.h	2011-08-09 19:42:26 UTC (rev 92699)
@@ -100,6 +100,10 @@
         KeyUp,
         Char,
 
+        // WebGestureEvent
+        GestureScrollBegin,
+        GestureScrollEnd,
+
         // WebTouchEvent
         TouchStart,
         TouchMove,
@@ -279,6 +283,15 @@
 
 class WebMouseWheelEvent : public WebMouseEvent {
 public:
+    enum Phase {
+        PhaseNone        = 0,
+        PhaseBegan       = 1 << 1,
+        PhaseStationary  = 1 << 2,
+        PhaseChanged     = 1 << 3,
+        PhaseEnded       = 1 << 4,
+        PhaseCancelled   = 1 << 5,
+    };
+
     float deltaX;
     float deltaY;
     float wheelTicksX;
@@ -290,6 +303,10 @@
     // transfering it over the wire.
     int scrollByPage;
 
+    bool hasPreciseScrollingDeltas;
+    Phase phase;
+    Phase momentumPhase;
+
     WebMouseWheelEvent(unsigned sizeParam = sizeof(WebMouseWheelEvent))
         : WebMouseEvent(sizeParam)
         , deltaX(0.0f)
@@ -297,10 +314,31 @@
         , wheelTicksX(0.0f)
         , wheelTicksY(0.0f)
         , scrollByPage(false)
+        , hasPreciseScrollingDeltas(false)
+        , phase(PhaseNone)
+        , momentumPhase(PhaseNone)
     {
     }
 };
 
+// WebGestureEvent --------------------------------------------------------------
+
+class WebGestureEvent : public WebInputEvent {
+public:
+    int x;
+    int y;
+    int globalX;
+    int globalY;
+
+    WebGestureEvent(unsigned sizeParam = sizeof(WebGestureEvent))
+        : x(0)
+        , y(0)
+        , globalX(0)
+        , globalY(0)
+    {
+    }
+};
+
 // WebTouchEvent --------------------------------------------------------------
 
 class WebTouchEvent : public WebInputEvent {

Modified: trunk/Source/WebKit/chromium/public/mac/WebInputEventFactory.h (92698 => 92699)


--- trunk/Source/WebKit/chromium/public/mac/WebInputEventFactory.h	2011-08-09 19:29:21 UTC (rev 92698)
+++ trunk/Source/WebKit/chromium/public/mac/WebInputEventFactory.h	2011-08-09 19:42:26 UTC (rev 92699)
@@ -46,6 +46,7 @@
 class WebKeyboardEvent;
 class WebMouseEvent;
 class WebMouseWheelEvent;
+class WebGestureEvent;
 
 class WebInputEventFactory {
 public:
@@ -53,6 +54,7 @@
     WEBKIT_EXPORT static WebKeyboardEvent keyboardEvent(wchar_t character, int modifiers, double timeStampSeconds);
     WEBKIT_EXPORT static WebMouseEvent mouseEvent(NSEvent*, NSView*);
     WEBKIT_EXPORT static WebMouseWheelEvent mouseWheelEvent(NSEvent*, NSView*);
+    WEBKIT_EXPORT static WebGestureEvent gestureEvent(NSEvent *, NSView *);
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/chromium/src/WebInputEventConversion.cpp (92698 => 92699)


--- trunk/Source/WebKit/chromium/src/WebInputEventConversion.cpp	2011-08-09 19:29:21 UTC (rev 92698)
+++ trunk/Source/WebKit/chromium/src/WebInputEventConversion.cpp	2011-08-09 19:42:26 UTC (rev 92699)
@@ -100,8 +100,39 @@
     m_ctrlKey = (e.modifiers & WebInputEvent::ControlKey);
     m_altKey = (e.modifiers & WebInputEvent::AltKey);
     m_metaKey = (e.modifiers & WebInputEvent::MetaKey);
+#if OS(DARWIN)
+    m_hasPreciseScrollingDeltas = e.hasPreciseScrollingDeltas;
+    m_phase = static_cast<WebCore::PlatformWheelEventPhase>(e.phase);
+    m_momentumPhase = static_cast<WebCore::PlatformWheelEventPhase>(e.momentumPhase);
+    m_timestamp = e.timeStampSeconds;
+#endif
 }
 
+// PlatformGestureEventBuilder --------------------------------------------------
+
+#if ENABLE(GESTURE_EVENTS)
+PlatformGestureEventBuilder::PlatformGestureEventBuilder(Widget* widget, const WebGestureEvent& e)
+{
+    switch (e.type) {
+    case WebInputEvent::GestureScrollBegin:
+        m_type = PlatformGestureEvent::ScrollBeginType;
+        break;
+    case WebInputEvent::GestureScrollEnd:
+        m_type = PlatformGestureEvent::ScrollEndType;
+        break;
+    default:
+        ASSERT_NOT_REACHED();
+    }
+    m_position = widget->convertFromContainingWindow(IntPoint(e.x, e.y));
+    m_globalPosition = IntPoint(e.globalX, e.globalY);
+    m_timestamp = e.timeStampSeconds;
+    m_shiftKey = (e.modifiers & WebInputEvent::ShiftKey);
+    m_ctrlKey = (e.modifiers & WebInputEvent::ControlKey);
+    m_altKey = (e.modifiers & WebInputEvent::AltKey);
+    m_metaKey = (e.modifiers & WebInputEvent::MetaKey);
+}
+#endif
+
 // MakePlatformKeyboardEvent --------------------------------------------------
 
 static inline PlatformKeyboardEvent::Type toPlatformKeyboardEventType(WebInputEvent::Type type)

Modified: trunk/Source/WebKit/chromium/src/WebInputEventConversion.h (92698 => 92699)


--- trunk/Source/WebKit/chromium/src/WebInputEventConversion.h	2011-08-09 19:29:21 UTC (rev 92698)
+++ trunk/Source/WebKit/chromium/src/WebInputEventConversion.h	2011-08-09 19:42:26 UTC (rev 92699)
@@ -31,12 +31,12 @@
 #ifndef WebInputEventConversion_h
 #define WebInputEventConversion_h
 
-#include "WebInputEvent.h"
-
+#include "PlatformGestureEvent.h"
 #include "PlatformKeyboardEvent.h"
 #include "PlatformMouseEvent.h"
 #include "PlatformTouchEvent.h"
 #include "PlatformWheelEvent.h"
+#include "WebInputEvent.h"
 
 namespace WebCore {
 class KeyboardEvent;
@@ -51,6 +51,7 @@
 class WebMouseEvent;
 class WebMouseWheelEvent;
 class WebKeyboardEvent;
+class WebGestureEvent;
 
 // These classes are used to convert from WebInputEvent subclasses to
 // corresponding WebCore events.
@@ -65,6 +66,13 @@
     PlatformWheelEventBuilder(WebCore::Widget*, const WebMouseWheelEvent&);
 };
 
+#if ENABLE(GESTURE_EVENTS)
+class PlatformGestureEventBuilder : public WebCore::PlatformGestureEvent {
+public:
+    PlatformGestureEventBuilder(WebCore::Widget*, const WebGestureEvent&);
+};
+#endif
+
 class PlatformKeyboardEventBuilder : public WebCore::PlatformKeyboardEvent {
 public:
     PlatformKeyboardEventBuilder(const WebKeyboardEvent&);

Modified: trunk/Source/WebKit/chromium/src/WebPopupMenuImpl.cpp (92698 => 92699)


--- trunk/Source/WebKit/chromium/src/WebPopupMenuImpl.cpp	2011-08-09 19:29:21 UTC (rev 92698)
+++ trunk/Source/WebKit/chromium/src/WebPopupMenuImpl.cpp	2011-08-09 19:42:26 UTC (rev 92699)
@@ -133,6 +133,11 @@
     m_widget->handleWheelEvent(PlatformWheelEventBuilder(m_widget, event));
 }
 
+bool WebPopupMenuImpl::GestureEvent(const WebGestureEvent& event)
+{
+    return m_widget->handleGestureEvent(PlatformGestureEventBuilder(m_widget, event));
+}
+
 #if ENABLE(TOUCH_EVENTS)
 bool WebPopupMenuImpl::TouchEvent(const WebTouchEvent& event)
 {
@@ -266,6 +271,10 @@
     case WebInputEvent::TouchCancel:
         return TouchEvent(*static_cast<const WebTouchEvent*>(&inputEvent));
 
+    case WebInputEvent::GestureScrollBegin:
+    case WebInputEvent::GestureScrollEnd:
+        return GestureEvent(*static_cast<const WebGestureEvent*>(&inputEvent));
+
     case WebInputEvent::Undefined:
     case WebInputEvent::MouseEnter:
     case WebInputEvent::ContextMenu:

Modified: trunk/Source/WebKit/chromium/src/WebPopupMenuImpl.h (92698 => 92699)


--- trunk/Source/WebKit/chromium/src/WebPopupMenuImpl.h	2011-08-09 19:29:21 UTC (rev 92698)
+++ trunk/Source/WebKit/chromium/src/WebPopupMenuImpl.h	2011-08-09 19:42:26 UTC (rev 92699)
@@ -52,6 +52,7 @@
 }
 
 namespace WebKit {
+class WebGestureEvent;
 class WebKeyboardEvent;
 class WebMouseEvent;
 class WebMouseWheelEvent;
@@ -104,6 +105,7 @@
     void MouseUp(const WebMouseEvent&);
     void MouseDoubleClick(const WebMouseEvent&);
     void MouseWheel(const WebMouseWheelEvent&);
+    bool GestureEvent(const WebGestureEvent&);
     bool TouchEvent(const WebTouchEvent&);
     bool KeyEvent(const WebKeyboardEvent&);
 

Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.cpp (92698 => 92699)


--- trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2011-08-09 19:29:21 UTC (rev 92698)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.cpp	2011-08-09 19:42:26 UTC (rev 92699)
@@ -603,6 +603,14 @@
     return mainFrameImpl()->frame()->eventHandler()->handleWheelEvent(platformEvent);
 }
 
+#if ENABLE(GESTURE_EVENTS)
+bool WebViewImpl::gestureEvent(const WebGestureEvent& event)
+{
+    PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), event);
+    return mainFrameImpl()->frame()->eventHandler()->handleGestureEvent(platformEvent);
+}
+#endif
+
 bool WebViewImpl::keyEvent(const WebKeyboardEvent& event)
 {
     ASSERT((event.type == WebInputEvent::RawKeyDown)
@@ -1280,6 +1288,13 @@
         handled = charEvent(*static_cast<const WebKeyboardEvent*>(&inputEvent));
         break;
 
+#if ENABLE(GESTURE_EVENTS)
+    case WebInputEvent::GestureScrollBegin:
+    case WebInputEvent::GestureScrollEnd:
+        handled = gestureEvent(*static_cast<const WebGestureEvent*>(&inputEvent));
+        break;
+#endif
+
 #if ENABLE(TOUCH_EVENTS)
     case WebInputEvent::TouchStart:
     case WebInputEvent::TouchMove:

Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.h (92698 => 92699)


--- trunk/Source/WebKit/chromium/src/WebViewImpl.h	2011-08-09 19:29:21 UTC (rev 92698)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.h	2011-08-09 19:42:26 UTC (rev 92699)
@@ -84,6 +84,7 @@
 class WebDevToolsAgentClient;
 class WebDevToolsAgentPrivate;
 class WebFrameImpl;
+class WebGestureEvent;
 class WebImage;
 class WebKeyboardEvent;
 class WebMouseEvent;
@@ -277,6 +278,7 @@
     void mouseContextMenu(const WebMouseEvent&);
     void mouseDoubleClick(const WebMouseEvent&);
     bool mouseWheel(const WebMouseWheelEvent&);
+    bool gestureEvent(const WebGestureEvent&);
     bool keyEvent(const WebKeyboardEvent&);
     bool charEvent(const WebKeyboardEvent&);
     bool touchEvent(const WebTouchEvent&);

Modified: trunk/Source/WebKit/chromium/src/mac/WebInputEventFactory.mm (92698 => 92699)


--- trunk/Source/WebKit/chromium/src/mac/WebInputEventFactory.mm	2011-08-09 19:29:21 UTC (rev 92698)
+++ trunk/Source/WebKit/chromium/src/mac/WebInputEventFactory.mm	2011-08-09 19:42:26 UTC (rev 92699)
@@ -34,6 +34,37 @@
 #include "WebInputEvent.h"
 #include <wtf/ASCIICType.h>
 
+#if BUILDING_ON_LEOPARD || BUILDING_ON_SNOW_LEOPARD
+
+// Additional Lion APIs.
+enum {
+    NSEventPhaseNone        = 0,
+    NSEventPhaseBegan       = 0x1 << 0,
+    NSEventPhaseStationary  = 0x1 << 1,
+    NSEventPhaseChanged     = 0x1 << 2,
+    NSEventPhaseEnded       = 0x1 << 3,
+    NSEventPhaseCancelled   = 0x1 << 4
+};
+typedef NSUInteger NSEventPhase;
+
+@interface NSEvent (LionSDKDeclarations)
+- (NSEventPhase)phase;
+- (NSEventPhase)momentumPhase;
+@end
+
+#endif  // BUILDING_ON_LEOPARD || BUILDING_ON_SNOW_LEOPARD
+
+#if BUILDING_ON_LEOPARD
+
+// These are not defined in the 10.5 SDK but are defined in later SDKs inside
+// a MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 #ifdef.
+enum {
+    NSEventTypeBeginGesture     = 19,
+    NSEventTypeEndGesture       = 20
+};
+
+#endif  // BUILDING_ON_LEOPARD
+
 namespace WebKit {
 
 // WebKeyboardEvent -----------------------------------------------------------
@@ -149,6 +180,19 @@
     return WebCore::windowsKeyCodeForKeyCode([event keyCode]);
 }
 
+static WebInputEvent::Type gestureEventTypeForEvent(NSEvent *event)
+{
+    switch ([event type]) {
+    case NSEventTypeBeginGesture:
+        return WebInputEvent::GestureScrollBegin;
+    case NSEventTypeEndGesture:
+        return WebInputEvent::GestureScrollEnd;
+    default:
+        ASSERT_NOT_REACHED();
+        return WebInputEvent::GestureScrollEnd;
+    }
+}
+
 static inline NSString* textFromEvent(NSEvent* event)
 {
     if ([event type] == NSFlagsChanged)
@@ -707,6 +751,40 @@
 
 // WebMouseWheelEvent ---------------------------------------------------------
 
+static WebMouseWheelEvent::Phase phaseForNSEventPhase(NSEventPhase eventPhase)
+{
+    uint32_t phase = WebMouseWheelEvent::PhaseNone; 
+    if (eventPhase & NSEventPhaseBegan)
+        phase |= WebMouseWheelEvent::PhaseBegan;
+    if (eventPhase & NSEventPhaseStationary)
+        phase |= WebMouseWheelEvent::PhaseStationary;
+    if (eventPhase & NSEventPhaseChanged)
+        phase |= WebMouseWheelEvent::PhaseChanged;
+    if (eventPhase & NSEventPhaseEnded)
+        phase |= WebMouseWheelEvent::PhaseEnded;
+    if (eventPhase & NSEventPhaseCancelled)
+        phase |= WebMouseWheelEvent::PhaseCancelled;
+    return static_cast<WebMouseWheelEvent::Phase>(phase);
+}
+
+static WebMouseWheelEvent::Phase phaseForEvent(NSEvent *event)
+{
+    if (![event respondsToSelector:@selector(phase)])
+        return WebMouseWheelEvent::PhaseNone;
+
+    NSEventPhase eventPhase = [event phase];
+    return phaseForNSEventPhase(eventPhase);
+}
+
+static WebMouseWheelEvent::Phase momentumPhaseForEvent(NSEvent *event)
+{
+    if (![event respondsToSelector:@selector(momentumPhase)])
+        return WebMouseWheelEvent::PhaseNone;
+
+    NSEventPhase eventMomentumPhase = [event momentumPhase];
+    return phaseForNSEventPhase(eventMomentumPhase);
+}
+
 WebMouseWheelEvent WebInputEventFactory::mouseWheelEvent(NSEvent* event, NSView* view)
 {
     WebMouseWheelEvent result;
@@ -838,6 +916,7 @@
         result.deltaY = CGEventGetIntegerValueField(cgEvent, kCGScrollWheelEventPointDeltaAxis1);
         result.wheelTicksX = result.deltaX / scrollbarPixelsPerCocoaTick;
         result.wheelTicksY = result.deltaY / scrollbarPixelsPerCocoaTick;
+        result.hasPreciseScrollingDeltas = true;
     } else {
         result.deltaX = [event deltaX] * scrollbarPixelsPerCocoaTick;
         result.deltaY = [event deltaY] * scrollbarPixelsPerCocoaTick;
@@ -847,7 +926,30 @@
 
     result.timeStampSeconds = [event timestamp];
 
+    result.phase              = phaseForEvent(event);
+    result.momentumPhase      = momentumPhaseForEvent(event);
+
     return result;
 }
 
+WebGestureEvent WebInputEventFactory::gestureEvent(NSEvent *event, NSView *view)
+{
+    WebGestureEvent result;
+
+    // Use a temporary WebMouseEvent to get the location.
+    WebMouseEvent temp;
+
+    setWebEventLocationFromEventInView(&temp, event, view);
+    result.x = temp.x;
+    result.y = temp.y;
+    result.globalX = temp.globalX;
+    result.globalY = temp.globalY;
+
+    result.type = gestureEventTypeForEvent(event);
+    result.modifiers = modifiersFromEvent(event);
+    result.timeStampSeconds = [event timestamp];
+
+    return result;
+}
+
 } // namespace WebKit
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to