| Index: ui/events/cocoa/events_mac.mm
|
| diff --git a/ui/events/cocoa/events_mac.mm b/ui/events/cocoa/events_mac.mm
|
| index dbfd64c7fdcd36360671423bdd98fca793366f23..1ba0544915609de04a90598786b49f13c6858c0c 100644
|
| --- a/ui/events/cocoa/events_mac.mm
|
| +++ b/ui/events/cocoa/events_mac.mm
|
| @@ -43,7 +43,7 @@ EventType EventTypeFromNative(const base::NativeEvent& native_event) {
|
| case NSMouseMoved:
|
| return ET_MOUSE_MOVED;
|
| case NSScrollWheel:
|
| - return ET_MOUSEWHEEL;
|
| + return ET_SCROLL;
|
| case NSMouseEntered:
|
| return ET_MOUSE_ENTERED;
|
| case NSMouseExited:
|
| @@ -153,10 +153,10 @@ gfx::Vector2d GetMouseWheelOffset(const base::NativeEvent& event) {
|
| // values when scrolling up or to the left. Scrolling quickly results in a
|
| // higher delta per click, up to about 15.0. (Quartz documentation suggests
|
| // +/-10).
|
| - // Multiply by 1000 to vaguely approximate WHEEL_DELTA on Windows (120).
|
| - const CGFloat kWheelDeltaMultiplier = 1000;
|
| - return gfx::Vector2d(kWheelDeltaMultiplier * [event deltaX],
|
| - kWheelDeltaMultiplier * [event deltaY]);
|
| + // Use the same multiplier as content::WebMouseWheelEventBuilder.
|
| + const double kScrollbarPixelsPerCocoaTick = 40.0;
|
| + return gfx::Vector2d(kScrollbarPixelsPerCocoaTick * [event deltaX],
|
| + kScrollbarPixelsPerCocoaTick * [event deltaY]);
|
| }
|
| }
|
|
|
| @@ -198,9 +198,36 @@ bool GetScrollOffsets(const base::NativeEvent& native_event,
|
| float* y_offset,
|
| float* x_offset_ordinal,
|
| float* y_offset_ordinal,
|
| - int* finger_count) {
|
| - NOTIMPLEMENTED();
|
| - return false;
|
| + int* finger_count,
|
| + int* momentum_phase) {
|
| + gfx::Vector2d offset = GetMouseWheelOffset(native_event);
|
| + *x_offset_ordinal = offset.x();
|
| + *y_offset_ordinal = offset.y();
|
| +
|
| + // For non-scrolling events, the finger count can be determined with
|
| + // [[native_event touchesMatchingPhase:NSTouchPhaseTouching inView:nil] count]
|
| + // but it's illegal to ask that of scroll events, so say two fingers.
|
| + *finger_count = 2;
|
| +
|
| + // If a user just rests two fingers on the touchpad without moving, AppKit
|
| + // uses NSEventPhaseMayBegin. Treat this the same as NSEventPhaseBegan.
|
| + const NSUInteger kBeginPhaseMask = NSEventPhaseBegan | NSEventPhaseMayBegin;
|
| + const NSUInteger kEndPhaseMask = NSEventPhaseCancelled | NSEventPhaseEnded;
|
| +
|
| + if ([native_event phase] & kBeginPhaseMask)
|
| + *momentum_phase |= EM_PHASE_MAY_BEGIN;
|
| +
|
| + if (([native_event phase] | [native_event momentumPhase]) & kEndPhaseMask)
|
| + *momentum_phase |= EM_PHASE_END;
|
| + else if ([native_event momentumPhase] != NSEventPhaseNone)
|
| + *momentum_phase |= EM_PHASE_INERTIAL_UPDATE;
|
| +
|
| + // If the event completely lacks phase information, there won't be further
|
| + // updates, so they must be treated as an end.
|
| + if (([native_event phase] | [native_event momentumPhase]) == NSEventPhaseNone)
|
| + *momentum_phase |= EM_PHASE_END;
|
| +
|
| + return true;
|
| }
|
|
|
| bool GetFlingData(const base::NativeEvent& native_event,
|
|
|