Changeset 117129 in webkit
- Timestamp:
- May 15, 2012 1:02:47 PM (12 years ago)
- Location:
- trunk/Source
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r117128 r117129 1 2012-05-15 Anders Carlsson <andersca@apple.com> 2 3 Use unaccelerated scrolling deltas when rubber-banding 4 https://bugs.webkit.org/show_bug.cgi?id=86503 5 <rdar://problem/11378742> 6 7 Reviewed by Sam Weinig. 8 9 * WebCore.exp.in: 10 * platform/PlatformWheelEvent.h: 11 (WebCore::PlatformWheelEvent::PlatformWheelEvent): 12 (PlatformWheelEvent): 13 (WebCore::PlatformWheelEvent::scrollCount): 14 (WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaX): 15 (WebCore::PlatformWheelEvent::unacceleratedScrollingDeltaY): 16 Add scroll count and unaccelerated scrolling deltas. 17 18 * platform/mac/ScrollElasticityController.mm: 19 (WebCore::elasticDeltaForTimeDelta): 20 (WebCore::elasticDeltaForReboundDelta): 21 (WebCore::reboundDeltaForElasticDelta): 22 Call the new WKSI functions. 23 24 (WebCore::ScrollElasticityController::handleWheelEvent): 25 Use the unaccelerated scrolling deltas when needed. 26 27 * platform/mac/WebCoreSystemInterface.h: 28 * platform/mac/WebCoreSystemInterface.mm: 29 Add new WKSI functions. 30 1 31 2012-05-15 Terry Anderson <tdanderson@chromium.org> 2 32 -
trunk/Source/WebCore/WebCore.exp.in
r117041 r117129 1694 1694 _wkFilterAddData 1695 1695 _wkFilterDataComplete 1696 _wkNSElasticDeltaForTimeDelta 1697 _wkNSElasticDeltaForReboundDelta 1698 _wkNSReboundDeltaForElasticDelta 1696 1699 #endif 1697 1700 -
trunk/Source/WebCore/platform/PlatformWheelEvent.h
r110371 r117129 95 95 , m_phase(PlatformWheelEventPhaseNone) 96 96 , m_momentumPhase(PlatformWheelEventPhaseNone) 97 , m_scrollCount(0) 98 , m_unacceleratedScrollingDeltaX(0) 99 , m_unacceleratedScrollingDeltaY(0) 97 100 #endif 98 101 { … … 113 116 , m_phase(PlatformWheelEventPhaseNone) 114 117 , m_momentumPhase(PlatformWheelEventPhaseNone) 118 , m_scrollCount(0) 119 , m_unacceleratedScrollingDeltaX(0) 120 , m_unacceleratedScrollingDeltaY(0) 115 121 #endif 116 122 { … … 154 160 PlatformWheelEventPhase momentumPhase() const { return m_momentumPhase; } 155 161 bool hasPreciseScrollingDeltas() const { return m_hasPreciseScrollingDeltas; } 162 163 unsigned scrollCount() const { return m_scrollCount; } 164 float unacceleratedScrollingDeltaX() const { return m_unacceleratedScrollingDeltaX; } 165 float unacceleratedScrollingDeltaY() const { return m_unacceleratedScrollingDeltaY; } 156 166 #endif 157 167 … … 182 192 PlatformWheelEventPhase m_phase; 183 193 PlatformWheelEventPhase m_momentumPhase; 194 unsigned m_scrollCount; 195 float m_unacceleratedScrollingDeltaX; 196 float m_unacceleratedScrollingDeltaY; 184 197 #endif 185 198 }; -
trunk/Source/WebCore/platform/mac/ScrollElasticityController.mm
r111102 r117129 28 28 29 29 #include "PlatformWheelEvent.h" 30 #include "WebCoreSystemInterface.h" 30 31 #include <sys/time.h> 31 32 #include <sys/sysctl.h> … … 68 69 69 70 static const float scrollVelocityZeroingTimeout = 0.10f; 70 static const float rubberbandStiffness = 20;71 71 static const float rubberbandDirectionLockStretchRatio = 1; 72 72 static const float rubberbandMinimumRequiredDeltaBeforeStretch = 10; 73 74 #if defined(BUILDING_ON_LEOPARD) || defined(BULDING_ON_SNOW_LEOPARD) || defined(BUILDING_ON_LION) 75 static const float rubberbandStiffness = 20; 73 76 static const float rubberbandAmplitude = 0.31f; 74 77 static const float rubberbandPeriod = 1.6f; … … 93 96 return delta * rubberbandStiffness; 94 97 } 98 #else 99 static float elasticDeltaForTimeDelta(float initialPosition, float initialVelocity, float elapsedTime) 100 { 101 return wkNSElasticDeltaForTimeDelta(initialPosition, initialVelocity, elapsedTime); 102 } 103 104 static float elasticDeltaForReboundDelta(float delta) 105 { 106 return wkNSElasticDeltaForReboundDelta(delta); 107 } 108 109 static float reboundDeltaForElasticDelta(float delta) 110 { 111 return wkNSReboundDeltaForElasticDelta(delta); 112 } 113 #endif 95 114 96 115 static float scrollWheelMultiplier() … … 160 179 m_overflowScrollDelta = FloatSize(); 161 180 162 float eventCoalescedDeltaX = -wheelEvent.deltaX(); 163 float eventCoalescedDeltaY = -wheelEvent.deltaY(); 181 IntSize stretchAmount = m_client->stretchAmount(); 182 bool isVerticallyStretched = stretchAmount.height(); 183 bool isHorizontallyStretched = stretchAmount.width(); 184 185 float eventCoalescedDeltaX; 186 float eventCoalescedDeltaY; 187 188 if (isVerticallyStretched || isHorizontallyStretched) { 189 eventCoalescedDeltaX = -wheelEvent.unacceleratedScrollingDeltaX(); 190 eventCoalescedDeltaY = -wheelEvent.unacceleratedScrollingDeltaY(); 191 } else { 192 eventCoalescedDeltaX = -wheelEvent.deltaX(); 193 eventCoalescedDeltaY = -wheelEvent.deltaY(); 194 } 164 195 165 196 deltaX += eventCoalescedDeltaX; … … 172 203 deltaY = 0; 173 204 174 bool isVerticallyStretched = false;175 bool isHorizontallyStretched = false;176 205 bool shouldStretch = false; 177 178 IntSize stretchAmount = m_client->stretchAmount();179 180 isHorizontallyStretched = stretchAmount.width();181 isVerticallyStretched = stretchAmount.height();182 206 183 207 PlatformWheelEventPhase momentumPhase = wheelEvent.momentumPhase(); -
trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.h
r116493 r117129 324 324 extern const char* (*wkFilterAddData)(WebFilterEvaluator *, const char* data, int* length); 325 325 extern const char* (*wkFilterDataComplete)(WebFilterEvaluator *, int* length); 326 327 extern CGFloat (*wkNSElasticDeltaForTimeDelta)(CGFloat initialPosition, CGFloat initialVelocity, CGFloat elapsedTime); 328 extern CGFloat (*wkNSElasticDeltaForReboundDelta)(CGFloat delta); 329 extern CGFloat (*wkNSReboundDeltaForElasticDelta)(CGFloat delta); 326 330 #endif 327 331 -
trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.mm
r116473 r117129 203 203 const char* (*wkFilterAddData)(WebFilterEvaluator *, const char* data, int* length); 204 204 const char* (*wkFilterDataComplete)(WebFilterEvaluator *, int* length); 205 #endif 205 206 CGFloat (*wkNSElasticDeltaForTimeDelta)(CGFloat initialPosition, CGFloat initialVelocity, CGFloat elapsedTime); 207 CGFloat (*wkNSElasticDeltaForReboundDelta)(CGFloat delta); 208 CGFloat (*wkNSReboundDeltaForElasticDelta)(CGFloat delta); 209 #endif 210 -
trunk/Source/WebKit/mac/ChangeLog
r117028 r117129 1 2012-05-15 Anders Carlsson <andersca@apple.com> 2 3 Use unaccelerated scrolling deltas when rubber-banding 4 https://bugs.webkit.org/show_bug.cgi?id=86503 5 <rdar://problem/11378742> 6 7 Reviewed by Sam Weinig. 8 9 * WebCoreSupport/WebSystemInterface.mm: 10 (InitWebCoreSystemInterface): 11 Init new WKSI functions. 12 1 13 2012-05-14 Luke Macpherson <macpherson@chromium.org> 2 14 -
trunk/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm
r116479 r117129 199 199 INIT(FilterAddData); 200 200 INIT(FilterDataComplete); 201 #endif 201 202 INIT(NSElasticDeltaForTimeDelta); 203 INIT(NSElasticDeltaForReboundDelta); 204 INIT(NSReboundDeltaForElasticDelta); 205 #endif 206 202 207 #endif 203 208 didInit = true; -
trunk/Source/WebKit2/ChangeLog
r117125 r117129 1 2012-05-15 Anders Carlsson <andersca@apple.com> 2 3 Use unaccelerated scrolling deltas when rubber-banding 4 https://bugs.webkit.org/show_bug.cgi?id=86503 5 <rdar://problem/11378742> 6 7 Reviewed by Sam Weinig. 8 9 * Shared/WebEvent.h: 10 (WebWheelEvent): 11 (WebKit::WebWheelEvent::scrollCount): 12 (WebKit::WebWheelEvent::unacceleratedScrollingDelta): 13 Add scroll count and unaccelerated scrolling delta. 14 15 * Shared/WebEventConversion.cpp: 16 (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent): 17 Initialize scroll count and unaccelerated scrolling deltas. 18 19 * Shared/WebWheelEvent.cpp: 20 (WebKit::WebWheelEvent::WebWheelEvent): 21 Initialize scroll count and unaccelerated scrolling deltas. 22 23 (WebKit::WebWheelEvent::encode): 24 (WebKit::WebWheelEvent::decode): 25 Encode and decode scroll count and unaccelerated scrolling deltas. 26 27 * Shared/mac/WebEventFactory.mm: 28 (WebKit::WebEventFactory::createWebWheelEvent): 29 Initialize the scroll count and unaccelerated scrolling deltas from the underlying NSEvent. 30 31 * UIProcess/WebPageProxy.cpp: 32 (WebKit::coalesce): 33 Coalesce unaccelerated scrolling deltas as well. 34 35 * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm: 36 (InitWebCoreSystemInterface): 37 Init new WKSI functions. 38 1 39 2012-05-15 Sheriff Bot <webkit.review.bot@gmail.com> 2 40 -
trunk/Source/WebKit2/Shared/WebEvent.h
r106949 r117129 183 183 WebWheelEvent(Type, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, const WebCore::FloatSize& delta, const WebCore::FloatSize& wheelTicks, Granularity, Modifiers, double timestamp); 184 184 #if PLATFORM(MAC) 185 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);185 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); 186 186 #endif 187 187 … … 196 196 Phase momentumPhase() const { return static_cast<Phase>(m_momentumPhase); } 197 197 bool hasPreciseScrollingDeltas() const { return m_hasPreciseScrollingDeltas; } 198 uint32_t scrollCount() const { return m_scrollCount; } 199 const WebCore::FloatSize& unacceleratedScrollingDelta() const { return m_unacceleratedScrollingDelta; } 198 200 #endif 199 201 … … 214 216 uint32_t m_momentumPhase; // Phase 215 217 bool m_hasPreciseScrollingDeltas; 218 uint32_t m_scrollCount; 219 WebCore::FloatSize m_unacceleratedScrollingDelta; 216 220 #endif 217 221 }; -
trunk/Source/WebKit2/Shared/WebEventConversion.cpp
r106949 r117129 137 137 m_momentumPhase = static_cast<WebCore::PlatformWheelEventPhase>(webEvent.momentumPhase()); 138 138 m_hasPreciseScrollingDeltas = webEvent.hasPreciseScrollingDeltas(); 139 m_scrollCount = webEvent.scrollCount(); 140 m_unacceleratedScrollingDeltaX = webEvent.unacceleratedScrollingDelta().width(); 141 m_unacceleratedScrollingDeltaY = webEvent.unacceleratedScrollingDelta().height(); 139 142 #endif 140 143 } -
trunk/Source/WebKit2/Shared/WebWheelEvent.cpp
r96613 r117129 45 45 , m_phase(PhaseNone) 46 46 , m_hasPreciseScrollingDeltas(false) 47 , m_scrollCount(0) 47 48 #endif 48 49 { … … 51 52 52 53 #if PLATFORM(MAC) 53 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)54 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) 54 55 : WebEvent(type, modifiers, timestamp) 55 56 , m_position(position) … … 62 63 , m_momentumPhase(momentumPhase) 63 64 , m_hasPreciseScrollingDeltas(hasPreciseScrollingDeltas) 65 , m_scrollCount(scrollCount) 66 , m_unacceleratedScrollingDelta(unacceleratedScrollingDelta) 64 67 { 65 68 ASSERT(isWheelEventType(type)); … … 81 84 encoder->encode(m_momentumPhase); 82 85 encoder->encode(m_hasPreciseScrollingDeltas); 86 encoder->encode(m_scrollCount); 87 encoder->encode(m_unacceleratedScrollingDelta); 83 88 #endif 84 89 } … … 107 112 if (!decoder->decode(t.m_hasPreciseScrollingDeltas)) 108 113 return false; 114 if (!decoder->decode(t.m_scrollCount)) 115 return false; 116 if (!decoder->decode(t.m_unacceleratedScrollingDelta)) 117 return false; 109 118 #endif 110 119 return true; -
trunk/Source/WebKit2/Shared/mac/WebEventFactory.mm
r117085 r117129 36 36 37 37 using namespace WebCore; 38 39 @interface NSEvent (WebNSEventDetails) 40 - (NSInteger)_scrollCount; 41 - (CGFloat)_unacceleratedScrollingDeltaX; 42 - (CGFloat)_unacceleratedScrollingDeltaY; 43 @end 38 44 39 45 namespace WebKit { … … 388 394 NSPoint globalPosition = globalPointForEvent(event); 389 395 390 WebWheelEvent::Granularity granularity = WebWheelEvent::ScrollByPixelWheelEvent;391 392 396 BOOL continuous; 393 397 float deltaX = 0; … … 410 414 } 411 415 412 WebWheelEvent::Phase phase = phaseForEvent(event); 413 WebWheelEvent::Phase momentumPhase = momentumPhaseForEvent(event); 414 bool hasPreciseScrollingDeltas = continuous; 415 WebEvent::Modifiers modifiers = modifiersForEvent(event); 416 double timestamp = [event timestamp]; 416 WebWheelEvent::Granularity granularity = WebWheelEvent::ScrollByPixelWheelEvent; 417 417 418 #if HAVE(INVERTED_WHEEL_EVENTS) 418 419 bool directionInvertedFromDevice = [event isDirectionInvertedFromDevice]; … … 420 421 bool directionInvertedFromDevice = false; 421 422 #endif 422 return WebWheelEvent(WebEvent::Wheel, IntPoint(position), IntPoint(globalPosition), FloatSize(deltaX, deltaY), FloatSize(wheelTicksX, wheelTicksY), granularity, phase, momentumPhase, hasPreciseScrollingDeltas, modifiers, timestamp, directionInvertedFromDevice); 423 424 WebWheelEvent::Phase phase = phaseForEvent(event); 425 WebWheelEvent::Phase momentumPhase = momentumPhaseForEvent(event); 426 bool hasPreciseScrollingDeltas = continuous; 427 428 uint32_t scrollCount; 429 FloatSize unacceleratedScrollingDelta; 430 431 static bool nsEventSupportsScrollCount = [NSEvent instancesRespondToSelector:@selector(_scrollCount)]; 432 if (nsEventSupportsScrollCount) { 433 scrollCount = [event _scrollCount]; 434 unacceleratedScrollingDelta = FloatSize([event _unacceleratedScrollingDeltaX], [event _unacceleratedScrollingDeltaY]); 435 } else { 436 scrollCount = 0; 437 unacceleratedScrollingDelta = FloatSize(deltaX, deltaY); 438 } 439 440 WebEvent::Modifiers modifiers = modifiersForEvent(event); 441 double timestamp = [event timestamp]; 442 443 return WebWheelEvent(WebEvent::Wheel, IntPoint(position), IntPoint(globalPosition), FloatSize(deltaX, deltaY), FloatSize(wheelTicksX, wheelTicksY), granularity, directionInvertedFromDevice, phase, momentumPhase, hasPreciseScrollingDeltas, scrollCount, unacceleratedScrollingDelta, modifiers, timestamp); 423 444 } 424 445 -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r116993 r117129 1022 1022 1023 1023 #if PLATFORM(MAC) 1024 return WebWheelEvent(WebEvent::Wheel, b.position(), b.globalPosition(), mergedDelta, mergedWheelTicks, b.granularity(), b.phase(), b.momentumPhase(), b.hasPreciseScrollingDeltas(), b.modifiers(), b.timestamp(), b.directionInvertedFromDevice()); 1024 FloatSize mergedUnacceleratedScrollingDelta = a.unacceleratedScrollingDelta() + b.unacceleratedScrollingDelta(); 1025 1026 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()); 1025 1027 #else 1026 1028 return WebWheelEvent(WebEvent::Wheel, b.position(), b.globalPosition(), mergedDelta, mergedWheelTicks, b.granularity(), b.modifiers(), b.timestamp()); -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm
r116473 r117129 182 182 INIT(FilterAddData); 183 183 INIT(FilterDataComplete); 184 185 INIT(NSElasticDeltaForTimeDelta); 186 INIT(NSElasticDeltaForReboundDelta); 187 INIT(NSReboundDeltaForElasticDelta); 184 188 #endif 185 189
Note: See TracChangeset
for help on using the changeset viewer.