Changeset 92699 in webkit


Ignore:
Timestamp:
Aug 9, 2011 12:42:26 PM (13 years ago)
Author:
commit-queue@webkit.org
Message:

[Chromium] Enable rubber banding when scrolling.

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

Patch by Alexei Svitkine <asvitkine@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):

Location:
trunk/Source
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r92698 r92699  
     12011-08-09  Alexei Svitkine  <asvitkine@chromium.org>
     2
     3        [Chromium] Enable rubber banding when scrolling.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=65707
     6
     7        Reviewed by Dimitri Glazkov.
     8
     9        No new tests since this is just syncing changes to chromium platform.
     10
     11        * platform/PlatformWheelEvent.h:
     12        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
     13        * platform/chromium/ScrollAnimatorChromiumMac.mm:
     14        (WebCore::ScrollAnimatorChromiumMac::handleGestureEvent):
     15
    1162011-08-09  Vsevolod Vlasov  <vsevik@chromium.org>
    217
  • trunk/Source/WebCore/platform/PlatformWheelEvent.h

    r92617 r92699  
    7474    };
    7575
    76 #if PLATFORM(MAC)
     76#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
    7777    enum PlatformWheelEventPhase {
    7878        PlatformWheelEventPhaseNone        = 0,
     
    9898            , m_altKey(false)
    9999            , m_metaKey(false)
    100 #if PLATFORM(MAC)
     100#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
    101101            , m_hasPreciseScrollingDeltas(false)
    102102            , m_phase(PlatformWheelEventPhaseNone)
     
    120120            , m_altKey(altKey)
    121121            , m_metaKey(metaKey)
    122 #if PLATFORM(MAC)
     122#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
    123123            , m_hasPreciseScrollingDeltas(false)
    124124            , m_phase(PlatformWheelEventPhaseNone)
     
    175175        PlatformWheelEvent(NSEvent *, NSView *windowView);
    176176#endif
    177 
     177#endif
     178
     179#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
    178180        PlatformWheelEventPhase phase() const { return m_phase; }
    179181        PlatformWheelEventPhase momentumPhase() const { return m_momentumPhase; }
     
    214216        bool m_altKey;
    215217        bool m_metaKey;
    216 #if PLATFORM(MAC)
     218#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
    217219        bool m_hasPreciseScrollingDeltas;
    218220        PlatformWheelEventPhase m_phase;
  • trunk/Source/WebCore/platform/chromium/ScrollAnimatorChromiumMac.mm

    r92617 r92699  
    853853    if (gestureEvent.type() == PlatformGestureEvent::ScrollBeginType)
    854854        beginScrollGesture();
    855     else
     855    else if (gestureEvent.type() == PlatformGestureEvent::ScrollEndType)
    856856        endScrollGesture();
    857857}
  • trunk/Source/WebKit/chromium/ChangeLog

    r92694 r92699  
     12011-08-09  Alexei Svitkine  <asvitkine@chromium.org>
     2
     3        [Chromium] Enable rubber banding when scrolling.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=65707
     6
     7        Reviewed by Dimitri Glazkov.
     8
     9        * features.gypi:
     10        * public/WebInputEvent.h:
     11        (WebKit::WebMouseWheelEvent::WebMouseWheelEvent):
     12        (WebKit::WebGestureEvent::WebGestureEvent):
     13        * public/mac/WebInputEventFactory.h:
     14        * src/WebInputEventConversion.cpp:
     15        (WebKit::PlatformWheelEventBuilder::PlatformWheelEventBuilder):
     16        (WebKit::PlatformGestureEventBuilder::PlatformGestureEventBuilder):
     17        * src/WebInputEventConversion.h:
     18        * src/WebPopupMenuImpl.cpp:
     19        (WebKit::WebPopupMenuImpl::GestureEvent):
     20        (WebKit::WebPopupMenuImpl::handleInputEvent):
     21        * src/WebPopupMenuImpl.h:
     22        * src/WebViewImpl.cpp:
     23        (WebKit::WebViewImpl::gestureEvent):
     24        (WebKit::WebViewImpl::handleInputEvent):
     25        * src/WebViewImpl.h:
     26        * src/mac/WebInputEventFactory.mm:
     27        (WebKit::gestureEventTypeForEvent):
     28        (WebKit::phaseForNSEventPhase):
     29        (WebKit::phaseForEvent):
     30        (WebKit::momentumPhaseForEvent):
     31        (WebKit::WebInputEventFactory::mouseWheelEvent):
     32        (WebKit::WebInputEventFactory::gestureEvent):
     33
    1342011-08-09  Dmitry Lomov  <dslomov@google.com>
    235
  • trunk/Source/WebKit/chromium/features.gypi

    r92617 r92699  
    154154      ['OS=="mac"', {
    155155        'feature_defines': [
     156          'ENABLE_RUBBER_BANDING=1',
    156157          'WTF_USE_SKIA_ON_MAC_CHROMIUM=<(use_skia)',
    157158        ],
  • trunk/Source/WebKit/chromium/public/WebInputEvent.h

    r92617 r92699  
    101101        Char,
    102102
     103        // WebGestureEvent
     104        GestureScrollBegin,
     105        GestureScrollEnd,
     106
    103107        // WebTouchEvent
    104108        TouchStart,
     
    280284class WebMouseWheelEvent : public WebMouseEvent {
    281285public:
     286    enum Phase {
     287        PhaseNone        = 0,
     288        PhaseBegan       = 1 << 1,
     289        PhaseStationary  = 1 << 2,
     290        PhaseChanged     = 1 << 3,
     291        PhaseEnded       = 1 << 4,
     292        PhaseCancelled   = 1 << 5,
     293    };
     294
    282295    float deltaX;
    283296    float deltaY;
     
    290303    // transfering it over the wire.
    291304    int scrollByPage;
     305
     306    bool hasPreciseScrollingDeltas;
     307    Phase phase;
     308    Phase momentumPhase;
    292309
    293310    WebMouseWheelEvent(unsigned sizeParam = sizeof(WebMouseWheelEvent))
     
    298315        , wheelTicksY(0.0f)
    299316        , scrollByPage(false)
     317        , hasPreciseScrollingDeltas(false)
     318        , phase(PhaseNone)
     319        , momentumPhase(PhaseNone)
     320    {
     321    }
     322};
     323
     324// WebGestureEvent --------------------------------------------------------------
     325
     326class WebGestureEvent : public WebInputEvent {
     327public:
     328    int x;
     329    int y;
     330    int globalX;
     331    int globalY;
     332
     333    WebGestureEvent(unsigned sizeParam = sizeof(WebGestureEvent))
     334        : x(0)
     335        , y(0)
     336        , globalX(0)
     337        , globalY(0)
    300338    {
    301339    }
  • trunk/Source/WebKit/chromium/public/mac/WebInputEventFactory.h

    r92617 r92699  
    4747class WebMouseEvent;
    4848class WebMouseWheelEvent;
     49class WebGestureEvent;
    4950
    5051class WebInputEventFactory {
     
    5455    WEBKIT_EXPORT static WebMouseEvent mouseEvent(NSEvent*, NSView*);
    5556    WEBKIT_EXPORT static WebMouseWheelEvent mouseWheelEvent(NSEvent*, NSView*);
     57    WEBKIT_EXPORT static WebGestureEvent gestureEvent(NSEvent *, NSView *);
    5658};
    5759
  • trunk/Source/WebKit/chromium/src/WebInputEventConversion.cpp

    r92617 r92699  
    101101    m_altKey = (e.modifiers & WebInputEvent::AltKey);
    102102    m_metaKey = (e.modifiers & WebInputEvent::MetaKey);
    103 }
     103#if OS(DARWIN)
     104    m_hasPreciseScrollingDeltas = e.hasPreciseScrollingDeltas;
     105    m_phase = static_cast<WebCore::PlatformWheelEventPhase>(e.phase);
     106    m_momentumPhase = static_cast<WebCore::PlatformWheelEventPhase>(e.momentumPhase);
     107    m_timestamp = e.timeStampSeconds;
     108#endif
     109}
     110
     111// PlatformGestureEventBuilder --------------------------------------------------
     112
     113#if ENABLE(GESTURE_EVENTS)
     114PlatformGestureEventBuilder::PlatformGestureEventBuilder(Widget* widget, const WebGestureEvent& e)
     115{
     116    switch (e.type) {
     117    case WebInputEvent::GestureScrollBegin:
     118        m_type = PlatformGestureEvent::ScrollBeginType;
     119        break;
     120    case WebInputEvent::GestureScrollEnd:
     121        m_type = PlatformGestureEvent::ScrollEndType;
     122        break;
     123    default:
     124        ASSERT_NOT_REACHED();
     125    }
     126    m_position = widget->convertFromContainingWindow(IntPoint(e.x, e.y));
     127    m_globalPosition = IntPoint(e.globalX, e.globalY);
     128    m_timestamp = e.timeStampSeconds;
     129    m_shiftKey = (e.modifiers & WebInputEvent::ShiftKey);
     130    m_ctrlKey = (e.modifiers & WebInputEvent::ControlKey);
     131    m_altKey = (e.modifiers & WebInputEvent::AltKey);
     132    m_metaKey = (e.modifiers & WebInputEvent::MetaKey);
     133}
     134#endif
    104135
    105136// MakePlatformKeyboardEvent --------------------------------------------------
  • trunk/Source/WebKit/chromium/src/WebInputEventConversion.h

    r92617 r92699  
    3232#define WebInputEventConversion_h
    3333
    34 #include "WebInputEvent.h"
    35 
     34#include "PlatformGestureEvent.h"
    3635#include "PlatformKeyboardEvent.h"
    3736#include "PlatformMouseEvent.h"
    3837#include "PlatformTouchEvent.h"
    3938#include "PlatformWheelEvent.h"
     39#include "WebInputEvent.h"
    4040
    4141namespace WebCore {
     
    5252class WebMouseWheelEvent;
    5353class WebKeyboardEvent;
     54class WebGestureEvent;
    5455
    5556// These classes are used to convert from WebInputEvent subclasses to
     
    6566    PlatformWheelEventBuilder(WebCore::Widget*, const WebMouseWheelEvent&);
    6667};
     68
     69#if ENABLE(GESTURE_EVENTS)
     70class PlatformGestureEventBuilder : public WebCore::PlatformGestureEvent {
     71public:
     72    PlatformGestureEventBuilder(WebCore::Widget*, const WebGestureEvent&);
     73};
     74#endif
    6775
    6876class PlatformKeyboardEventBuilder : public WebCore::PlatformKeyboardEvent {
  • trunk/Source/WebKit/chromium/src/WebPopupMenuImpl.cpp

    r92617 r92699  
    134134}
    135135
     136bool WebPopupMenuImpl::GestureEvent(const WebGestureEvent& event)
     137{
     138    return m_widget->handleGestureEvent(PlatformGestureEventBuilder(m_widget, event));
     139}
     140
    136141#if ENABLE(TOUCH_EVENTS)
    137142bool WebPopupMenuImpl::TouchEvent(const WebTouchEvent& event)
     
    267272        return TouchEvent(*static_cast<const WebTouchEvent*>(&inputEvent));
    268273
     274    case WebInputEvent::GestureScrollBegin:
     275    case WebInputEvent::GestureScrollEnd:
     276        return GestureEvent(*static_cast<const WebGestureEvent*>(&inputEvent));
     277
    269278    case WebInputEvent::Undefined:
    270279    case WebInputEvent::MouseEnter:
  • trunk/Source/WebKit/chromium/src/WebPopupMenuImpl.h

    r92617 r92699  
    5353
    5454namespace WebKit {
     55class WebGestureEvent;
    5556class WebKeyboardEvent;
    5657class WebMouseEvent;
     
    105106    void MouseDoubleClick(const WebMouseEvent&);
    106107    void MouseWheel(const WebMouseWheelEvent&);
     108    bool GestureEvent(const WebGestureEvent&);
    107109    bool TouchEvent(const WebTouchEvent&);
    108110    bool KeyEvent(const WebKeyboardEvent&);
  • trunk/Source/WebKit/chromium/src/WebViewImpl.cpp

    r92617 r92699  
    604604}
    605605
     606#if ENABLE(GESTURE_EVENTS)
     607bool WebViewImpl::gestureEvent(const WebGestureEvent& event)
     608{
     609    PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), event);
     610    return mainFrameImpl()->frame()->eventHandler()->handleGestureEvent(platformEvent);
     611}
     612#endif
     613
    606614bool WebViewImpl::keyEvent(const WebKeyboardEvent& event)
    607615{
     
    12811289        break;
    12821290
     1291#if ENABLE(GESTURE_EVENTS)
     1292    case WebInputEvent::GestureScrollBegin:
     1293    case WebInputEvent::GestureScrollEnd:
     1294        handled = gestureEvent(*static_cast<const WebGestureEvent*>(&inputEvent));
     1295        break;
     1296#endif
     1297
    12831298#if ENABLE(TOUCH_EVENTS)
    12841299    case WebInputEvent::TouchStart:
  • trunk/Source/WebKit/chromium/src/WebViewImpl.h

    r92617 r92699  
    8585class WebDevToolsAgentPrivate;
    8686class WebFrameImpl;
     87class WebGestureEvent;
    8788class WebImage;
    8889class WebKeyboardEvent;
     
    278279    void mouseDoubleClick(const WebMouseEvent&);
    279280    bool mouseWheel(const WebMouseWheelEvent&);
     281    bool gestureEvent(const WebGestureEvent&);
    280282    bool keyEvent(const WebKeyboardEvent&);
    281283    bool charEvent(const WebKeyboardEvent&);
  • trunk/Source/WebKit/chromium/src/mac/WebInputEventFactory.mm

    r92617 r92699  
    3535#include <wtf/ASCIICType.h>
    3636
     37#if BUILDING_ON_LEOPARD || BUILDING_ON_SNOW_LEOPARD
     38
     39// Additional Lion APIs.
     40enum {
     41    NSEventPhaseNone        = 0,
     42    NSEventPhaseBegan       = 0x1 << 0,
     43    NSEventPhaseStationary  = 0x1 << 1,
     44    NSEventPhaseChanged     = 0x1 << 2,
     45    NSEventPhaseEnded       = 0x1 << 3,
     46    NSEventPhaseCancelled   = 0x1 << 4
     47};
     48typedef NSUInteger NSEventPhase;
     49
     50@interface NSEvent (LionSDKDeclarations)
     51- (NSEventPhase)phase;
     52- (NSEventPhase)momentumPhase;
     53@end
     54
     55#endif  // BUILDING_ON_LEOPARD || BUILDING_ON_SNOW_LEOPARD
     56
     57#if BUILDING_ON_LEOPARD
     58
     59// These are not defined in the 10.5 SDK but are defined in later SDKs inside
     60// a MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 #ifdef.
     61enum {
     62    NSEventTypeBeginGesture     = 19,
     63    NSEventTypeEndGesture       = 20
     64};
     65
     66#endif  // BUILDING_ON_LEOPARD
     67
    3768namespace WebKit {
    3869
     
    148179    // E.g. the key next to Caps Lock has the same Event.keyCode on U.S. keyboard ('A') and on Russian keyboard (CYRILLIC LETTER EF).
    149180    return WebCore::windowsKeyCodeForKeyCode([event keyCode]);
     181}
     182
     183static WebInputEvent::Type gestureEventTypeForEvent(NSEvent *event)
     184{
     185    switch ([event type]) {
     186    case NSEventTypeBeginGesture:
     187        return WebInputEvent::GestureScrollBegin;
     188    case NSEventTypeEndGesture:
     189        return WebInputEvent::GestureScrollEnd;
     190    default:
     191        ASSERT_NOT_REACHED();
     192        return WebInputEvent::GestureScrollEnd;
     193    }
    150194}
    151195
     
    708752// WebMouseWheelEvent ---------------------------------------------------------
    709753
     754static WebMouseWheelEvent::Phase phaseForNSEventPhase(NSEventPhase eventPhase)
     755{
     756    uint32_t phase = WebMouseWheelEvent::PhaseNone;
     757    if (eventPhase & NSEventPhaseBegan)
     758        phase |= WebMouseWheelEvent::PhaseBegan;
     759    if (eventPhase & NSEventPhaseStationary)
     760        phase |= WebMouseWheelEvent::PhaseStationary;
     761    if (eventPhase & NSEventPhaseChanged)
     762        phase |= WebMouseWheelEvent::PhaseChanged;
     763    if (eventPhase & NSEventPhaseEnded)
     764        phase |= WebMouseWheelEvent::PhaseEnded;
     765    if (eventPhase & NSEventPhaseCancelled)
     766        phase |= WebMouseWheelEvent::PhaseCancelled;
     767    return static_cast<WebMouseWheelEvent::Phase>(phase);
     768}
     769
     770static WebMouseWheelEvent::Phase phaseForEvent(NSEvent *event)
     771{
     772    if (![event respondsToSelector:@selector(phase)])
     773        return WebMouseWheelEvent::PhaseNone;
     774
     775    NSEventPhase eventPhase = [event phase];
     776    return phaseForNSEventPhase(eventPhase);
     777}
     778
     779static WebMouseWheelEvent::Phase momentumPhaseForEvent(NSEvent *event)
     780{
     781    if (![event respondsToSelector:@selector(momentumPhase)])
     782        return WebMouseWheelEvent::PhaseNone;
     783
     784    NSEventPhase eventMomentumPhase = [event momentumPhase];
     785    return phaseForNSEventPhase(eventMomentumPhase);
     786}
     787
    710788WebMouseWheelEvent WebInputEventFactory::mouseWheelEvent(NSEvent* event, NSView* view)
    711789{
     
    839917        result.wheelTicksX = result.deltaX / scrollbarPixelsPerCocoaTick;
    840918        result.wheelTicksY = result.deltaY / scrollbarPixelsPerCocoaTick;
     919        result.hasPreciseScrollingDeltas = true;
    841920    } else {
    842921        result.deltaX = [event deltaX] * scrollbarPixelsPerCocoaTick;
     
    848927    result.timeStampSeconds = [event timestamp];
    849928
     929    result.phase              = phaseForEvent(event);
     930    result.momentumPhase      = momentumPhaseForEvent(event);
     931
    850932    return result;
    851933}
    852934
     935WebGestureEvent WebInputEventFactory::gestureEvent(NSEvent *event, NSView *view)
     936{
     937    WebGestureEvent result;
     938
     939    // Use a temporary WebMouseEvent to get the location.
     940    WebMouseEvent temp;
     941
     942    setWebEventLocationFromEventInView(&temp, event, view);
     943    result.x = temp.x;
     944    result.y = temp.y;
     945    result.globalX = temp.globalX;
     946    result.globalY = temp.globalY;
     947
     948    result.type = gestureEventTypeForEvent(event);
     949    result.modifiers = modifiersFromEvent(event);
     950    result.timeStampSeconds = [event timestamp];
     951
     952    return result;
     953}
     954
    853955} // namespace WebKit
Note: See TracChangeset for help on using the changeset viewer.