Use unaccelerated scrolling deltas when rubber-banding
authorandersca@apple.com <andersca@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 15 May 2012 20:02:47 +0000 (20:02 +0000)
committerandersca@apple.com <andersca@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 15 May 2012 20:02:47 +0000 (20:02 +0000)
https://bugs.webkit.org/show_bug.cgi?id=86503
<rdar://problem/11378742>

Reviewed by Sam Weinig.

Source/WebCore:

* WebCore.exp.in:
* platform/PlatformWheelEvent.h:
(WebCore::PlatformWheelEvent::PlatformWheelEvent):
(PlatformWheelEvent):
(WebCore::PlatformWheelEvent::scrollCount):
(WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaX):
(WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaY):
Add scroll count and unaccelerated scrolling deltas.

* platform/mac/ScrollElasticityController.mm:
(WebCore::elasticDeltaForTimeDelta):
(WebCore::elasticDeltaForReboundDelta):
(WebCore::reboundDeltaForElasticDelta):
Call the new WKSI functions.

(WebCore::ScrollElasticityController::handleWheelEvent):
Use the unaccelerated scrolling deltas when needed.

* platform/mac/WebCoreSystemInterface.h:
* platform/mac/WebCoreSystemInterface.mm:
Add new WKSI functions.

Source/WebKit/mac:

* WebCoreSupport/WebSystemInterface.mm:
(InitWebCoreSystemInterface):
Init new WKSI functions.

Source/WebKit2:

* Shared/WebEvent.h:
(WebWheelEvent):
(WebKit::WebWheelEvent::scrollCount):
(WebKit::WebWheelEvent::unacceleratedScrollingDelta):
Add scroll count and unaccelerated scrolling delta.

* Shared/WebEventConversion.cpp:
(WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
Initialize scroll count and unaccelerated scrolling deltas.

* Shared/WebWheelEvent.cpp:
(WebKit::WebWheelEvent::WebWheelEvent):
Initialize scroll count and unaccelerated scrolling deltas.

(WebKit::WebWheelEvent::encode):
(WebKit::WebWheelEvent::decode):
Encode and decode scroll count and unaccelerated scrolling deltas.

* Shared/mac/WebEventFactory.mm:
(WebKit::WebEventFactory::createWebWheelEvent):
Initialize the scroll count and unaccelerated scrolling deltas from the underlying NSEvent.

* UIProcess/WebPageProxy.cpp:
(WebKit::coalesce):
Coalesce unaccelerated scrolling deltas as well.

* WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
(InitWebCoreSystemInterface):
Init new WKSI functions.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@117129 268f45cc-cd09-0410-ab3c-d52691b4dbfc

15 files changed:
Source/WebCore/ChangeLog
Source/WebCore/WebCore.exp.in
Source/WebCore/platform/PlatformWheelEvent.h
Source/WebCore/platform/mac/ScrollElasticityController.mm
Source/WebCore/platform/mac/WebCoreSystemInterface.h
Source/WebCore/platform/mac/WebCoreSystemInterface.mm
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm
Source/WebKit2/ChangeLog
Source/WebKit2/Shared/WebEvent.h
Source/WebKit2/Shared/WebEventConversion.cpp
Source/WebKit2/Shared/WebWheelEvent.cpp
Source/WebKit2/Shared/mac/WebEventFactory.mm
Source/WebKit2/UIProcess/WebPageProxy.cpp
Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm

index eccdc77..b4161bd 100644 (file)
@@ -1,3 +1,33 @@
+2012-05-15  Anders Carlsson  <andersca@apple.com>
+
+        Use unaccelerated scrolling deltas when rubber-banding
+        https://bugs.webkit.org/show_bug.cgi?id=86503
+        <rdar://problem/11378742>
+
+        Reviewed by Sam Weinig.
+
+        * WebCore.exp.in:
+        * platform/PlatformWheelEvent.h:
+        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
+        (PlatformWheelEvent):
+        (WebCore::PlatformWheelEvent::scrollCount):
+        (WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaX):
+        (WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaY):
+        Add scroll count and unaccelerated scrolling deltas.
+
+        * platform/mac/ScrollElasticityController.mm:
+        (WebCore::elasticDeltaForTimeDelta):
+        (WebCore::elasticDeltaForReboundDelta):
+        (WebCore::reboundDeltaForElasticDelta):
+        Call the new WKSI functions.
+
+        (WebCore::ScrollElasticityController::handleWheelEvent):
+        Use the unaccelerated scrolling deltas when needed.
+
+        * platform/mac/WebCoreSystemInterface.h:
+        * platform/mac/WebCoreSystemInterface.mm:
+        Add new WKSI functions.
+
 2012-05-15  Terry Anderson  <tdanderson@chromium.org>
 
         [chromium] Compute the best target node on a GestureTap event
index 2ba31a1..74fa604 100644 (file)
@@ -1693,6 +1693,9 @@ _wkFilterRelease
 _wkFilterWasBlocked
 _wkFilterAddData
 _wkFilterDataComplete
+_wkNSElasticDeltaForTimeDelta
+_wkNSElasticDeltaForReboundDelta
+_wkNSReboundDeltaForElasticDelta
 #endif
 
 #if ENABLE(SVG)
index 084b455..279e1cf 100644 (file)
@@ -94,6 +94,9 @@ namespace WebCore {
             , m_hasPreciseScrollingDeltas(false)
             , m_phase(PlatformWheelEventPhaseNone)
             , m_momentumPhase(PlatformWheelEventPhaseNone)
+            , m_scrollCount(0)
+            , m_unacceleratedScrollingDeltaX(0)
+            , m_unacceleratedScrollingDeltaY(0)
 #endif
         {
         }
@@ -112,6 +115,9 @@ namespace WebCore {
             , m_hasPreciseScrollingDeltas(false)
             , m_phase(PlatformWheelEventPhaseNone)
             , m_momentumPhase(PlatformWheelEventPhaseNone)
+            , m_scrollCount(0)
+            , m_unacceleratedScrollingDeltaX(0)
+            , m_unacceleratedScrollingDeltaY(0)
 #endif
         {
         }
@@ -153,6 +159,10 @@ namespace WebCore {
         PlatformWheelEventPhase phase() const { return m_phase; }
         PlatformWheelEventPhase momentumPhase() const { return m_momentumPhase; }
         bool hasPreciseScrollingDeltas() const { return m_hasPreciseScrollingDeltas; }
+
+        unsigned scrollCount() const { return m_scrollCount; }
+        float unacceleratedScrollingDeltaX() const { return m_unacceleratedScrollingDeltaX; }
+        float unacceleratedScrollingDeltaY() const { return m_unacceleratedScrollingDeltaY; }
 #endif
 
 #if PLATFORM(WIN)
@@ -181,6 +191,9 @@ namespace WebCore {
         bool m_hasPreciseScrollingDeltas;
         PlatformWheelEventPhase m_phase;
         PlatformWheelEventPhase m_momentumPhase;
+        unsigned m_scrollCount;
+        float m_unacceleratedScrollingDeltaX;
+        float m_unacceleratedScrollingDeltaY;
 #endif
     };
 
index a817846..d122b56 100644 (file)
@@ -27,6 +27,7 @@
 #include "ScrollElasticityController.h"
 
 #include "PlatformWheelEvent.h"
+#include "WebCoreSystemInterface.h"
 #include <sys/time.h>
 #include <sys/sysctl.h>
 
@@ -67,9 +68,11 @@ static NSTimeInterval systemUptime()
 namespace WebCore {
 
 static const float scrollVelocityZeroingTimeout = 0.10f;
-static const float rubberbandStiffness = 20;
 static const float rubberbandDirectionLockStretchRatio = 1;
 static const float rubberbandMinimumRequiredDeltaBeforeStretch = 10;
+
+#if defined(BUILDING_ON_LEOPARD) || defined(BULDING_ON_SNOW_LEOPARD) || defined(BUILDING_ON_LION)
+static const float rubberbandStiffness = 20;
 static const float rubberbandAmplitude = 0.31f;
 static const float rubberbandPeriod = 1.6f;
 
@@ -92,6 +95,22 @@ static float reboundDeltaForElasticDelta(float delta)
 {
     return delta * rubberbandStiffness;
 }
+#else
+static float elasticDeltaForTimeDelta(float initialPosition, float initialVelocity, float elapsedTime)
+{
+    return wkNSElasticDeltaForTimeDelta(initialPosition, initialVelocity, elapsedTime);
+}
+
+static float elasticDeltaForReboundDelta(float delta)
+{
+    return wkNSElasticDeltaForReboundDelta(delta);
+}
+
+static float reboundDeltaForElasticDelta(float delta)
+{
+    return wkNSReboundDeltaForElasticDelta(delta);
+}
+#endif
 
 static float scrollWheelMultiplier()
 {
@@ -159,8 +178,20 @@ bool ScrollElasticityController::handleWheelEvent(const PlatformWheelEvent& whee
     // Reset overflow values because we may decide to remove delta at various points and put it into overflow.
     m_overflowScrollDelta = FloatSize();
 
-    float eventCoalescedDeltaX = -wheelEvent.deltaX();
-    float eventCoalescedDeltaY = -wheelEvent.deltaY();
+    IntSize stretchAmount = m_client->stretchAmount();
+    bool isVerticallyStretched = stretchAmount.height();
+    bool isHorizontallyStretched = stretchAmount.width();
+
+    float eventCoalescedDeltaX;
+    float eventCoalescedDeltaY;
+
+    if (isVerticallyStretched || isHorizontallyStretched) {
+        eventCoalescedDeltaX = -wheelEvent.unacceleratedScrollingDeltaX();
+        eventCoalescedDeltaY = -wheelEvent.unacceleratedScrollingDeltaY();
+    } else {
+        eventCoalescedDeltaX = -wheelEvent.deltaX();
+        eventCoalescedDeltaY = -wheelEvent.deltaY();
+    }
 
     deltaX += eventCoalescedDeltaX;
     deltaY += eventCoalescedDeltaY;
@@ -171,15 +202,8 @@ bool ScrollElasticityController::handleWheelEvent(const PlatformWheelEvent& whee
     else
         deltaY = 0;
 
-    bool isVerticallyStretched = false;
-    bool isHorizontallyStretched = false;
     bool shouldStretch = false;
 
-    IntSize stretchAmount = m_client->stretchAmount();
-
-    isHorizontallyStretched = stretchAmount.width();
-    isVerticallyStretched = stretchAmount.height();
-
     PlatformWheelEventPhase momentumPhase = wheelEvent.momentumPhase();
 
     // If we are starting momentum scrolling then do some setup.
index dd16fa1..908dd95 100644 (file)
@@ -323,6 +323,10 @@ extern void (*wkFilterRelease)(WebFilterEvaluator *);
 extern BOOL (*wkFilterWasBlocked)(WebFilterEvaluator *);
 extern const char* (*wkFilterAddData)(WebFilterEvaluator *, const char* data, int* length);
 extern const char* (*wkFilterDataComplete)(WebFilterEvaluator *, int* length);
+
+extern CGFloat (*wkNSElasticDeltaForTimeDelta)(CGFloat initialPosition, CGFloat initialVelocity, CGFloat elapsedTime);
+extern CGFloat (*wkNSElasticDeltaForReboundDelta)(CGFloat delta);
+extern CGFloat (*wkNSReboundDeltaForElasticDelta)(CGFloat delta);
 #endif
 
 }
index 439a2f2..c087a5d 100644 (file)
@@ -202,4 +202,9 @@ void (*wkFilterRelease)(WebFilterEvaluator *);
 BOOL (*wkFilterWasBlocked)(WebFilterEvaluator *);
 const char* (*wkFilterAddData)(WebFilterEvaluator *, const char* data, int* length);
 const char* (*wkFilterDataComplete)(WebFilterEvaluator *, int* length);
+
+CGFloat (*wkNSElasticDeltaForTimeDelta)(CGFloat initialPosition, CGFloat initialVelocity, CGFloat elapsedTime);
+CGFloat (*wkNSElasticDeltaForReboundDelta)(CGFloat delta);
+CGFloat (*wkNSReboundDeltaForElasticDelta)(CGFloat delta);
 #endif
+
index 13a5fff..bab9b35 100644 (file)
@@ -1,3 +1,15 @@
+2012-05-15  Anders Carlsson  <andersca@apple.com>
+
+        Use unaccelerated scrolling deltas when rubber-banding
+        https://bugs.webkit.org/show_bug.cgi?id=86503
+        <rdar://problem/11378742>
+
+        Reviewed by Sam Weinig.
+
+        * WebCoreSupport/WebSystemInterface.mm:
+        (InitWebCoreSystemInterface):
+        Init new WKSI functions.
+
 2012-05-14  Luke Macpherson  <macpherson@chromium.org>
 
         Introduce ENABLE_CSS_VARIABLES compile flag.
index 00f79b5..d1f2f15 100644 (file)
@@ -198,7 +198,12 @@ void InitWebCoreSystemInterface(void)
     INIT(FilterWasBlocked);
     INIT(FilterAddData);
     INIT(FilterDataComplete);
+
+    INIT(NSElasticDeltaForTimeDelta);
+    INIT(NSElasticDeltaForReboundDelta);
+    INIT(NSReboundDeltaForElasticDelta);
 #endif
+
 #endif
     didInit = true;
 }
index cc08588..7d6166c 100644 (file)
@@ -1,3 +1,41 @@
+2012-05-15  Anders Carlsson  <andersca@apple.com>
+
+        Use unaccelerated scrolling deltas when rubber-banding
+        https://bugs.webkit.org/show_bug.cgi?id=86503
+        <rdar://problem/11378742>
+
+        Reviewed by Sam Weinig.
+
+        * Shared/WebEvent.h:
+        (WebWheelEvent):
+        (WebKit::WebWheelEvent::scrollCount):
+        (WebKit::WebWheelEvent::unacceleratedScrollingDelta):
+        Add scroll count and unaccelerated scrolling delta.
+
+        * Shared/WebEventConversion.cpp:
+        (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent):
+        Initialize scroll count and unaccelerated scrolling deltas.
+
+        * Shared/WebWheelEvent.cpp:
+        (WebKit::WebWheelEvent::WebWheelEvent):
+        Initialize scroll count and unaccelerated scrolling deltas.
+
+        (WebKit::WebWheelEvent::encode):
+        (WebKit::WebWheelEvent::decode):
+        Encode and decode scroll count and unaccelerated scrolling deltas.
+
+        * Shared/mac/WebEventFactory.mm:
+        (WebKit::WebEventFactory::createWebWheelEvent):
+        Initialize the scroll count and unaccelerated scrolling deltas from the underlying NSEvent.
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::coalesce):
+        Coalesce unaccelerated scrolling deltas as well.
+
+        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
+        (InitWebCoreSystemInterface):
+        Init new WKSI functions.
+
 2012-05-15  Sheriff Bot  <webkit.review.bot@gmail.com>
 
         Unreviewed, rolling out r117095.
index 2aabf28..8111d51 100644 (file)
@@ -182,7 +182,7 @@ public:
 
     WebWheelEvent(Type, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, const WebCore::FloatSize& delta, const WebCore::FloatSize& wheelTicks, Granularity, Modifiers, double timestamp);
 #if PLATFORM(MAC)
-    WebWheelEvent(Type, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, const WebCore::FloatSize& delta, const WebCore::FloatSize& wheelTicks, Granularity, Phase, Phase momentumPhase, bool hasPreciseScrollingDeltas, Modifiers, double timestamp, bool directionInvertedFromDevice);
+    WebWheelEvent(Type, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, const WebCore::FloatSize& delta, const WebCore::FloatSize& wheelTicks, Granularity, bool directionInvertedFromDevice, Phase, Phase momentumPhase, bool hasPreciseScrollingDeltas, uint32_t scrollCount, const WebCore::FloatSize& unacceleratedScrollingDelta, Modifiers, double timestamp);
 #endif
 
     const WebCore::IntPoint position() const { return m_position; }
@@ -195,6 +195,8 @@ public:
     Phase phase() const { return static_cast<Phase>(m_phase); }
     Phase momentumPhase() const { return static_cast<Phase>(m_momentumPhase); }
     bool hasPreciseScrollingDeltas() const { return m_hasPreciseScrollingDeltas; }
+    uint32_t scrollCount() const { return m_scrollCount; }
+    const WebCore::FloatSize& unacceleratedScrollingDelta() const { return m_unacceleratedScrollingDelta; }
 #endif
 
     void encode(CoreIPC::ArgumentEncoder*) const;
@@ -213,6 +215,8 @@ private:
     uint32_t m_phase; // Phase
     uint32_t m_momentumPhase; // Phase
     bool m_hasPreciseScrollingDeltas;
+    uint32_t m_scrollCount;
+    WebCore::FloatSize m_unacceleratedScrollingDelta;
 #endif
 };
 
index ed8569d..8b61e27 100644 (file)
@@ -136,6 +136,9 @@ public:
         m_phase = static_cast<WebCore::PlatformWheelEventPhase>(webEvent.phase());
         m_momentumPhase = static_cast<WebCore::PlatformWheelEventPhase>(webEvent.momentumPhase());
         m_hasPreciseScrollingDeltas = webEvent.hasPreciseScrollingDeltas();
+        m_scrollCount = webEvent.scrollCount();
+        m_unacceleratedScrollingDeltaX = webEvent.unacceleratedScrollingDelta().width();
+        m_unacceleratedScrollingDeltaY = webEvent.unacceleratedScrollingDelta().height();
 #endif
     }
 };
index 845b9e5..37c691e 100644 (file)
@@ -44,13 +44,14 @@ WebWheelEvent::WebWheelEvent(Type type, const IntPoint& position, const IntPoint
 #if PLATFORM(MAC)
     , m_phase(PhaseNone)
     , m_hasPreciseScrollingDeltas(false)
+    , m_scrollCount(0)
 #endif
 {
     ASSERT(isWheelEventType(type));
 }
 
 #if PLATFORM(MAC)
-WebWheelEvent::WebWheelEvent(Type type, const IntPoint& position, const IntPoint& globalPosition, const FloatSize& delta, const FloatSize& wheelTicks, Granularity granularity, Phase phase, Phase momentumPhase, bool hasPreciseScrollingDeltas, Modifiers modifiers, double timestamp, bool directionInvertedFromDevice)
+WebWheelEvent::WebWheelEvent(Type type, const IntPoint& position, const IntPoint& globalPosition, const FloatSize& delta, const FloatSize& wheelTicks, Granularity granularity, bool directionInvertedFromDevice, Phase phase, Phase momentumPhase, bool hasPreciseScrollingDeltas, uint32_t scrollCount, const WebCore::FloatSize& unacceleratedScrollingDelta, Modifiers modifiers, double timestamp)
     : WebEvent(type, modifiers, timestamp)
     , m_position(position)
     , m_globalPosition(globalPosition)
@@ -61,6 +62,8 @@ WebWheelEvent::WebWheelEvent(Type type, const IntPoint& position, const IntPoint
     , m_phase(phase)
     , m_momentumPhase(momentumPhase)
     , m_hasPreciseScrollingDeltas(hasPreciseScrollingDeltas)
+    , m_scrollCount(scrollCount)
+    , m_unacceleratedScrollingDelta(unacceleratedScrollingDelta)
 {
     ASSERT(isWheelEventType(type));
 }
@@ -80,6 +83,8 @@ void WebWheelEvent::encode(CoreIPC::ArgumentEncoder* encoder) const
     encoder->encode(m_phase);
     encoder->encode(m_momentumPhase);
     encoder->encode(m_hasPreciseScrollingDeltas);
+    encoder->encode(m_scrollCount);
+    encoder->encode(m_unacceleratedScrollingDelta);
 #endif
 }
 
@@ -106,6 +111,10 @@ bool WebWheelEvent::decode(CoreIPC::ArgumentDecoder* decoder, WebWheelEvent& t)
         return false;
     if (!decoder->decode(t.m_hasPreciseScrollingDeltas))
         return false;
+    if (!decoder->decode(t.m_scrollCount))
+        return false;
+    if (!decoder->decode(t.m_unacceleratedScrollingDelta))
+        return false;
 #endif
     return true;
 }
index 2c773b2..7c18524 100644 (file)
 
 using namespace WebCore;
 
+@interface NSEvent (WebNSEventDetails)
+- (NSInteger)_scrollCount;
+- (CGFloat)_unacceleratedScrollingDeltaX;
+- (CGFloat)_unacceleratedScrollingDeltaY;
+@end
+
 namespace WebKit {
 
 // FIXME: This is a huge copy/paste from WebCore/PlatformEventFactoryMac.mm. The code should be merged.
@@ -387,8 +393,6 @@ WebWheelEvent WebEventFactory::createWebWheelEvent(NSEvent *event, NSView *windo
     NSPoint position = pointForEvent(event, windowView);
     NSPoint globalPosition = globalPointForEvent(event);
 
-    WebWheelEvent::Granularity granularity  = WebWheelEvent::ScrollByPixelWheelEvent;
-
     BOOL continuous;
     float deltaX = 0;
     float deltaY = 0;
@@ -409,17 +413,34 @@ WebWheelEvent WebEventFactory::createWebWheelEvent(NSEvent *event, NSView *windo
         deltaY *= static_cast<float>(Scrollbar::pixelsPerLineStep());
     }
 
-    WebWheelEvent::Phase phase              = phaseForEvent(event);
-    WebWheelEvent::Phase momentumPhase      = momentumPhaseForEvent(event);
-    bool hasPreciseScrollingDeltas          = continuous;
-    WebEvent::Modifiers modifiers           = modifiersForEvent(event);
-    double timestamp                        = [event timestamp];
+    WebWheelEvent::Granularity granularity  = WebWheelEvent::ScrollByPixelWheelEvent;
+
 #if HAVE(INVERTED_WHEEL_EVENTS)
     bool directionInvertedFromDevice        = [event isDirectionInvertedFromDevice];
 #else
     bool directionInvertedFromDevice        = false;
 #endif
-    return WebWheelEvent(WebEvent::Wheel, IntPoint(position), IntPoint(globalPosition), FloatSize(deltaX, deltaY), FloatSize(wheelTicksX, wheelTicksY), granularity, phase, momentumPhase, hasPreciseScrollingDeltas, modifiers, timestamp, directionInvertedFromDevice);
+
+    WebWheelEvent::Phase phase              = phaseForEvent(event);
+    WebWheelEvent::Phase momentumPhase      = momentumPhaseForEvent(event);
+    bool hasPreciseScrollingDeltas          = continuous;
+
+    uint32_t scrollCount;
+    FloatSize unacceleratedScrollingDelta;
+
+    static bool nsEventSupportsScrollCount = [NSEvent instancesRespondToSelector:@selector(_scrollCount)];
+    if (nsEventSupportsScrollCount) {
+        scrollCount = [event _scrollCount];
+        unacceleratedScrollingDelta = FloatSize([event _unacceleratedScrollingDeltaX], [event _unacceleratedScrollingDeltaY]);
+    } else {
+        scrollCount = 0;
+        unacceleratedScrollingDelta = FloatSize(deltaX, deltaY);
+    }
+
+    WebEvent::Modifiers modifiers           = modifiersForEvent(event);
+    double timestamp                        = [event timestamp];
+    
+    return WebWheelEvent(WebEvent::Wheel, IntPoint(position), IntPoint(globalPosition), FloatSize(deltaX, deltaY), FloatSize(wheelTicksX, wheelTicksY), granularity, directionInvertedFromDevice, phase, momentumPhase, hasPreciseScrollingDeltas, scrollCount, unacceleratedScrollingDelta, modifiers, timestamp);
 }
 
 WebKeyboardEvent WebEventFactory::createWebKeyboardEvent(NSEvent *event, NSView *)
index ff18c58..eb0ef71 100644 (file)
@@ -1021,7 +1021,9 @@ static WebWheelEvent coalesce(const WebWheelEvent& a, const WebWheelEvent& b)
     FloatSize mergedWheelTicks = a.wheelTicks() + b.wheelTicks();
 
 #if PLATFORM(MAC)
-    return WebWheelEvent(WebEvent::Wheel, b.position(), b.globalPosition(), mergedDelta, mergedWheelTicks, b.granularity(), b.phase(), b.momentumPhase(), b.hasPreciseScrollingDeltas(), b.modifiers(), b.timestamp(), b.directionInvertedFromDevice());
+    FloatSize mergedUnacceleratedScrollingDelta = a.unacceleratedScrollingDelta() + b.unacceleratedScrollingDelta();
+
+    return WebWheelEvent(WebEvent::Wheel, b.position(), b.globalPosition(), mergedDelta, mergedWheelTicks, b.granularity(), b.directionInvertedFromDevice(), b.phase(), b.momentumPhase(), b.hasPreciseScrollingDeltas(), b.scrollCount(), mergedUnacceleratedScrollingDelta, b.modifiers(), b.timestamp());
 #else
     return WebWheelEvent(WebEvent::Wheel, b.position(), b.globalPosition(), mergedDelta, mergedWheelTicks, b.granularity(), b.modifiers(), b.timestamp());
 #endif
index acf19c4..c1385f0 100644 (file)
@@ -181,6 +181,10 @@ void InitWebCoreSystemInterface(void)
         INIT(FilterWasBlocked);
         INIT(FilterAddData);
         INIT(FilterDataComplete);
+
+        INIT(NSElasticDeltaForTimeDelta);
+        INIT(NSElasticDeltaForReboundDelta);
+        INIT(NSReboundDeltaForElasticDelta);
 #endif
 
     });