Changeset 154673 in webkit


Ignore:
Timestamp:
Aug 27, 2013 3:09:06 AM (11 years ago)
Author:
Christophe Dumez
Message:

Implement DOM3 wheel event
https://bugs.webkit.org/show_bug.cgi?id=94081

Reviewed by Darin Adler.

Source/WebCore:

Add support for DOM Level 3 WheelEvent:
http://www.w3.org/TR/DOM-Level-3-Events/#events-WheelEvent

Firefox, IE10 and since recently Blink already support it so
it increases our cross-browser compatibility.

The non-standard 'mousewheel' event is still supported for backward
compatibility. Note that the deltas returned by the mousewheel and
the wheel events are not identical:

  • They have opposite signs.
  • The wheel event reports the actual amount of pixels that should be

scrolled while the legacy mousewheel event reports a factor of the
number of mouse wheel ticks (using a constant multiplier).

Tests: fast/events/wheelevent-basic.html

fast/events/wheelevent-constructor.html
fast/events/wheelevent-mousewheel-interaction.html

  • dom/Document.h:
  • dom/Document.idl:
  • dom/Element.h:
  • dom/Element.idl:
  • dom/EventNames.h:
  • dom/EventTarget.cpp:

(WebCore::legacyType):
(WebCore::EventTarget::shouldObserveLegacyType):
(WebCore::EventTarget::setupLegacyTypeObserverIfNeeded):
(WebCore::EventTarget::fireEventListeners):

  • dom/EventTarget.h:
  • dom/Node.cpp:

(WebCore::Node::didMoveToNewDocument):
(WebCore::tryAddEventListener):
(WebCore::tryRemoveEventListener):
(WebCore::Node::defaultEventHandler):

  • dom/WheelEvent.cpp:

(WebCore::WheelEventInit::WheelEventInit):
(WebCore::WheelEvent::WheelEvent):
(WebCore::WheelEvent::initWheelEvent):

  • dom/WheelEvent.h:

(WebCore::WheelEvent::deltaX):
(WebCore::WheelEvent::deltaY):
(WebCore::WheelEvent::deltaZ):
(WebCore::WheelEvent::wheelDelta):
(WebCore::WheelEvent::wheelDeltaX):
(WebCore::WheelEvent::wheelDeltaY):

  • dom/WheelEvent.idl:
  • html/HTMLAttributeNames.in:
  • html/HTMLElement.cpp:

(WebCore::HTMLElement::eventNameForAttributeName):

  • page/DOMWindow.cpp:

(WebCore::DOMWindow::addEventListener):
(WebCore::DOMWindow::removeEventListener):

  • page/DOMWindow.h:
  • page/DOMWindow.idl:
  • page/EventHandler.cpp:

(WebCore::EventHandler::defaultWheelEventHandler):

  • plugins/blackberry/PluginViewBlackBerry.cpp:

(WebCore::PluginView::handleWheelEvent):

  • svg/SVGElementInstance.cpp:
  • svg/SVGElementInstance.h:
  • svg/SVGElementInstance.idl:

LayoutTests:

Add several layout tests to check support for DOM3 wheel event.

  • fast/events/wheelevent-basic-expected.txt: Added.
  • fast/events/wheelevent-basic.html: Added.
  • fast/events/wheelevent-constructor-expected.txt: Added.
  • fast/events/wheelevent-constructor.html: Added.
  • fast/events/wheelevent-mousewheel-interaction-expected.txt: Added.
  • fast/events/wheelevent-mousewheel-interaction.html: Added.
  • platform/efl/fast/events/wheelevent-basic-expected.txt: Added.
Location:
trunk
Files:
7 added
23 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r154662 r154673  
     12013-08-27  Christophe Dumez  <ch.dumez@sisa.samsung.com>
     2
     3        Implement DOM3 wheel event
     4        https://bugs.webkit.org/show_bug.cgi?id=94081
     5
     6        Reviewed by Darin Adler.
     7
     8        Add several layout tests to check support for DOM3 wheel event.
     9
     10        * fast/events/wheelevent-basic-expected.txt: Added.
     11        * fast/events/wheelevent-basic.html: Added.
     12        * fast/events/wheelevent-constructor-expected.txt: Added.
     13        * fast/events/wheelevent-constructor.html: Added.
     14        * fast/events/wheelevent-mousewheel-interaction-expected.txt: Added.
     15        * fast/events/wheelevent-mousewheel-interaction.html: Added.
     16        * platform/efl/fast/events/wheelevent-basic-expected.txt: Added.
     17
    1182013-08-26  Ryosuke Niwa  <rniwa@webkit.org>
    219
  • trunk/Source/WebCore/ChangeLog

    r154672 r154673  
     12013-08-27  Christophe Dumez  <ch.dumez@sisa.samsung.com>
     2
     3        Implement DOM3 wheel event
     4        https://bugs.webkit.org/show_bug.cgi?id=94081
     5
     6        Reviewed by Darin Adler.
     7
     8        Add support for DOM Level 3 WheelEvent:
     9        http://www.w3.org/TR/DOM-Level-3-Events/#events-WheelEvent
     10
     11        Firefox, IE10 and since recently Blink already support it so
     12        it increases our cross-browser compatibility.
     13
     14        The non-standard 'mousewheel' event is still supported for backward
     15        compatibility. Note that the deltas returned by the mousewheel and
     16        the wheel events are not identical:
     17        - They have opposite signs.
     18        - The wheel event reports the actual amount of pixels that should be
     19        scrolled while the legacy mousewheel event reports a factor of the
     20        number of mouse wheel ticks (using a constant multiplier).
     21
     22        Tests: fast/events/wheelevent-basic.html
     23               fast/events/wheelevent-constructor.html
     24               fast/events/wheelevent-mousewheel-interaction.html
     25
     26        * dom/Document.h:
     27        * dom/Document.idl:
     28        * dom/Element.h:
     29        * dom/Element.idl:
     30        * dom/EventNames.h:
     31        * dom/EventTarget.cpp:
     32        (WebCore::legacyType):
     33        (WebCore::EventTarget::shouldObserveLegacyType):
     34        (WebCore::EventTarget::setupLegacyTypeObserverIfNeeded):
     35        (WebCore::EventTarget::fireEventListeners):
     36        * dom/EventTarget.h:
     37        * dom/Node.cpp:
     38        (WebCore::Node::didMoveToNewDocument):
     39        (WebCore::tryAddEventListener):
     40        (WebCore::tryRemoveEventListener):
     41        (WebCore::Node::defaultEventHandler):
     42        * dom/WheelEvent.cpp:
     43        (WebCore::WheelEventInit::WheelEventInit):
     44        (WebCore::WheelEvent::WheelEvent):
     45        (WebCore::WheelEvent::initWheelEvent):
     46        * dom/WheelEvent.h:
     47        (WebCore::WheelEvent::deltaX):
     48        (WebCore::WheelEvent::deltaY):
     49        (WebCore::WheelEvent::deltaZ):
     50        (WebCore::WheelEvent::wheelDelta):
     51        (WebCore::WheelEvent::wheelDeltaX):
     52        (WebCore::WheelEvent::wheelDeltaY):
     53        * dom/WheelEvent.idl:
     54        * html/HTMLAttributeNames.in:
     55        * html/HTMLElement.cpp:
     56        (WebCore::HTMLElement::eventNameForAttributeName):
     57        * page/DOMWindow.cpp:
     58        (WebCore::DOMWindow::addEventListener):
     59        (WebCore::DOMWindow::removeEventListener):
     60        * page/DOMWindow.h:
     61        * page/DOMWindow.idl:
     62        * page/EventHandler.cpp:
     63        (WebCore::EventHandler::defaultWheelEventHandler):
     64        * plugins/blackberry/PluginViewBlackBerry.cpp:
     65        (WebCore::PluginView::handleWheelEvent):
     66        * svg/SVGElementInstance.cpp:
     67        * svg/SVGElementInstance.h:
     68        * svg/SVGElementInstance.idl:
     69
    1702013-08-27  Allan Sandfeld Jensen  <allan.jensen@digia.com>
    271
  • trunk/Source/WebCore/dom/Document.h

    r154597 r154673  
    279279    DEFINE_ATTRIBUTE_EVENT_LISTENER(select);
    280280    DEFINE_ATTRIBUTE_EVENT_LISTENER(submit);
     281    DEFINE_ATTRIBUTE_EVENT_LISTENER(wheel);
    281282
    282283    DEFINE_ATTRIBUTE_EVENT_LISTENER(blur);
  • trunk/Source/WebCore/dom/Document.idl

    r153772 r154673  
    275275    [NotEnumerable] attribute EventListener onselect;
    276276    [NotEnumerable] attribute EventListener onsubmit;
     277    [NotEnumerable] attribute EventListener onwheel;
    277278
    278279    // [NotEnumerable] attribute EventListener oncanplay;
  • trunk/Source/WebCore/dom/Element.h

    r154541 r154673  
    9898    DEFINE_ATTRIBUTE_EVENT_LISTENER(select);
    9999    DEFINE_ATTRIBUTE_EVENT_LISTENER(submit);
     100    DEFINE_ATTRIBUTE_EVENT_LISTENER(wheel);
    100101
    101102    // These four attribute event handler attributes are overridden by HTMLBodyElement
  • trunk/Source/WebCore/dom/Element.idl

    r154057 r154673  
    190190    [NotEnumerable] attribute EventListener onselect;
    191191    [NotEnumerable] attribute EventListener onsubmit;
     192    [NotEnumerable] attribute EventListener onwheel;
    192193
    193194    // [NotEnumerable] attribute EventListener oncanplay;
  • trunk/Source/WebCore/dom/EventNames.h

    r151777 r154673  
    123123    macro(versionchange) \
    124124    macro(visibilitychange) \
     125    macro(wheel) \
    125126    macro(write) \
    126127    macro(writeend) \
  • trunk/Source/WebCore/dom/EventTarget.cpp

    r153972 r154673  
    162162}
    163163
    164 static AtomicString prefixedType(const Event* event)
     164static const AtomicString& legacyType(const Event* event)
    165165{
    166166    if (event->type() == eventNames().transitionendEvent)
    167167        return eventNames().webkitTransitionEndEvent;
    168168
    169     return emptyString();
     169    if (event->type() == eventNames().wheelEvent)
     170        return eventNames().mousewheelEvent;
     171
     172    return emptyAtom;
     173}
     174
     175static inline bool shouldObserveLegacyType(const AtomicString& legacyTypeName, bool hasLegacyTypeListeners, bool hasNewTypeListeners, FeatureObserver::Feature& feature)
     176{
     177    if (legacyTypeName == eventNames().webkitTransitionEndEvent) {
     178        if (hasLegacyTypeListeners) {
     179            if (hasNewTypeListeners)
     180                feature = FeatureObserver::PrefixedAndUnprefixedTransitionEndEvent;
     181            else
     182                feature = FeatureObserver::PrefixedTransitionEndEvent;
     183        } else {
     184            ASSERT(hasNewTypeListeners);
     185            feature = FeatureObserver::UnprefixedTransitionEndEvent;
     186        }
     187        return true;
     188    }
     189    return false;
     190}
     191
     192void EventTarget::setupLegacyTypeObserverIfNeeded(const AtomicString& legacyTypeName, bool hasLegacyTypeListeners, bool hasNewTypeListeners)
     193{
     194    ASSERT(!legacyTypeName.isEmpty());
     195    ASSERT(hasLegacyTypeListeners || hasNewTypeListeners);
     196
     197    ScriptExecutionContext* context = scriptExecutionContext();
     198    if (!context || !context->isDocument())
     199        return;
     200
     201    Document* document = toDocument(context);
     202    if (!document->domWindow())
     203        return;
     204
     205    FeatureObserver::Feature feature;
     206    if (shouldObserveLegacyType(legacyTypeName, hasLegacyTypeListeners, hasNewTypeListeners, feature))
     207        FeatureObserver::observe(document->domWindow(), feature);
    170208}
    171209
     
    179217        return true;
    180218
    181     EventListenerVector* listenerPrefixedVector = 0;
    182     AtomicString prefixedTypeName = prefixedType(event);
    183     if (!prefixedTypeName.isEmpty())
    184         listenerPrefixedVector = d->eventListenerMap.find(prefixedTypeName);
    185 
    186     EventListenerVector* listenerUnprefixedVector = d->eventListenerMap.find(event->type());
    187 
    188     if (listenerUnprefixedVector)
    189         fireEventListeners(event, d, *listenerUnprefixedVector);
    190     else if (listenerPrefixedVector) {
    191         AtomicString unprefixedTypeName = event->type();
    192         event->setType(prefixedTypeName);
    193         fireEventListeners(event, d, *listenerPrefixedVector);
    194         event->setType(unprefixedTypeName);
    195     }
    196 
    197     if (!prefixedTypeName.isEmpty()) {
    198         ScriptExecutionContext* context = scriptExecutionContext();
    199         if (context && context->isDocument()) {
    200             Document* document = toDocument(context);
    201             if (document->domWindow()) {
    202                 if (listenerPrefixedVector)
    203                     if (listenerUnprefixedVector)
    204                         FeatureObserver::observe(document->domWindow(), FeatureObserver::PrefixedAndUnprefixedTransitionEndEvent);
    205                     else
    206                         FeatureObserver::observe(document->domWindow(), FeatureObserver::PrefixedTransitionEndEvent);
    207                 else if (listenerUnprefixedVector)
    208                     FeatureObserver::observe(document->domWindow(), FeatureObserver::UnprefixedTransitionEndEvent);
    209             }
    210         }
    211     }
     219    EventListenerVector* legacyListenersVector = 0;
     220    const AtomicString& legacyTypeName = legacyType(event);
     221    if (!legacyTypeName.isEmpty())
     222        legacyListenersVector = d->eventListenerMap.find(legacyTypeName);
     223
     224    EventListenerVector* listenersVector = d->eventListenerMap.find(event->type());
     225
     226    if (listenersVector)
     227        fireEventListeners(event, d, *listenersVector);
     228    else if (legacyListenersVector) {
     229        AtomicString typeName = event->type();
     230        event->setType(legacyTypeName);
     231        fireEventListeners(event, d, *legacyListenersVector);
     232        event->setType(typeName);
     233    }
     234
     235    if (!legacyTypeName.isEmpty() && (legacyListenersVector || listenersVector))
     236        setupLegacyTypeObserverIfNeeded(legacyTypeName, !!legacyListenersVector, !!listenersVector);
    212237
    213238    return !event->defaultPrevented();
  • trunk/Source/WebCore/dom/EventTarget.h

    r153972 r154673  
    148148       
    149149        void fireEventListeners(Event*, EventTargetData*, EventListenerVector&);
     150        void setupLegacyTypeObserverIfNeeded(const AtomicString& legacyTypeName, bool hasLegacyTypeListeners, bool hasNewTypeListeners);
    150151
    151152        friend class EventListenerIterator;
  • trunk/Source/WebCore/dom/Node.cpp

    r154541 r154673  
    18791879            cache->remove(this);
    18801880
    1881     const EventListenerVector& wheelListeners = getEventListeners(eventNames().mousewheelEvent);
     1881    const EventListenerVector& mousewheelListeners = getEventListeners(eventNames().mousewheelEvent);
     1882    for (size_t i = 0; i < mousewheelListeners.size(); ++i) {
     1883        oldDocument->didRemoveWheelEventHandler();
     1884        document()->didAddWheelEventHandler();
     1885    }
     1886
     1887    const EventListenerVector& wheelListeners = getEventListeners(eventNames().wheelEvent);
    18821888    for (size_t i = 0; i < wheelListeners.size(); ++i) {
    18831889        oldDocument->didRemoveWheelEventHandler();
     
    19141920    if (Document* document = targetNode->document()) {
    19151921        document->addListenerTypeIfNeeded(eventType);
    1916         if (eventType == eventNames().mousewheelEvent)
     1922        if (eventType == eventNames().wheelEvent || eventType == eventNames().mousewheelEvent)
    19171923            document->didAddWheelEventHandler();
    19181924        else if (eventNames().isTouchEventType(eventType))
     
    19361942    // listeners for each type, not just a bool - see https://bugs.webkit.org/show_bug.cgi?id=33861
    19371943    if (Document* document = targetNode->document()) {
    1938         if (eventType == eventNames().mousewheelEvent)
     1944        if (eventType == eventNames().wheelEvent || eventType == eventNames().mousewheelEvent)
    19391945            document->didRemoveWheelEventHandler();
    19401946        else if (eventNames().isTouchEventType(eventType))
     
    22442250        }
    22452251#endif
    2246     } else if (eventType == eventNames().mousewheelEvent && event->hasInterface(eventNames().interfaceForWheelEvent)) {
     2252    } else if ((eventType == eventNames().wheelEvent || eventType == eventNames().mousewheelEvent) && event->hasInterface(eventNames().interfaceForWheelEvent)) {
    22472253        WheelEvent* wheelEvent = static_cast<WheelEvent*>(event);
    22482254       
  • trunk/Source/WebCore/dom/WheelEvent.cpp

    r151757 r154673  
    44 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
    55 * Copyright (C) 2003, 2005, 2006, 2008, 2010, 2013 Apple Inc. All rights reserved.
     6 * Copyright (C) 2013 Samsung Electronics. All rights reserved.
    67 *
    78 * This library is free software; you can redistribute it and/or
     
    3435
    3536WheelEventInit::WheelEventInit()
    36     : wheelDeltaX(0)
     37    : deltaX(0)
     38    , deltaY(0)
     39    , deltaZ(0)
     40    , deltaMode(WheelEvent::DOM_DELTA_PIXEL)
     41    , wheelDeltaX(0)
    3742    , wheelDeltaY(0)
    38     , deltaMode(WheelEvent::DOM_DELTA_PIXEL)
    3943{
    4044}
    4145
    4246WheelEvent::WheelEvent()
    43     : m_deltaMode(DOM_DELTA_PIXEL)
     47    : m_deltaX(0)
     48    , m_deltaY(0)
     49    , m_deltaZ(0)
     50    , m_deltaMode(DOM_DELTA_PIXEL)
    4451    , m_directionInvertedFromDevice(false)
    4552{
     
    4855WheelEvent::WheelEvent(const AtomicString& type, const WheelEventInit& initializer)
    4956    : MouseEvent(type, initializer)
    50     , m_wheelDelta(IntPoint(initializer.wheelDeltaX, initializer.wheelDeltaY))
     57    , m_wheelDelta(initializer.wheelDeltaX ? initializer.wheelDeltaX : -initializer.deltaX, initializer.wheelDeltaY ? initializer.wheelDeltaY : -initializer.deltaY)
     58    , m_deltaX(initializer.deltaX ? initializer.deltaX : -initializer.wheelDeltaX)
     59    , m_deltaY(initializer.deltaY ? initializer.deltaY : -initializer.wheelDeltaY)
     60    , m_deltaZ(initializer.deltaZ)
    5161    , m_deltaMode(initializer.deltaMode)
    5262{
     
    5666    PassRefPtr<AbstractView> view, const IntPoint& screenLocation, const IntPoint& pageLocation,
    5767    bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool directionInvertedFromDevice, double timestamp)
    58     : MouseEvent(eventNames().mousewheelEvent,
     68    : MouseEvent(eventNames().wheelEvent,
    5969                 true, true, timestamp, view, 0, screenLocation.x(), screenLocation.y(),
    6070                 pageLocation.x(), pageLocation.y(),
     
    6373#endif
    6474                 ctrlKey, altKey, shiftKey, metaKey, 0, 0, 0, false)
    65     , m_wheelDelta(IntPoint(static_cast<int>(wheelTicks.x() * TickMultiplier), static_cast<int>(wheelTicks.y() * TickMultiplier)))
    66     , m_rawDelta(roundedIntPoint(rawDelta))
     75    , m_wheelDelta(wheelTicks.x() * TickMultiplier, wheelTicks.y() * TickMultiplier)
     76    , m_deltaX(-rawDelta.x())
     77    , m_deltaY(-rawDelta.y())
     78    , m_deltaZ(0)
    6779    , m_deltaMode(deltaMode)
    6880    , m_directionInvertedFromDevice(directionInvertedFromDevice)
     
    7789        return;
    7890   
    79     initUIEvent(eventNames().mousewheelEvent, true, true, view, 0);
     91    initUIEvent(eventNames().wheelEvent, true, true, view, 0);
    8092   
    8193    m_screenLocation = IntPoint(screenX, screenY);
     
    8496    m_shiftKey = shiftKey;
    8597    m_metaKey = metaKey;
    86    
    87     // Normalize to the Windows 120 multiple
     98
     99    // Normalize to 120 multiple for compatibility with IE.
    88100    m_wheelDelta = IntPoint(rawDeltaX * TickMultiplier, rawDeltaY * TickMultiplier);
    89    
    90     m_rawDelta = IntPoint(rawDeltaX, rawDeltaY);
     101    m_deltaX = -rawDeltaX;
     102    m_deltaY = -rawDeltaY;
     103
    91104    m_deltaMode = DOM_DELTA_PIXEL;
    92105    m_directionInvertedFromDevice = false;
  • trunk/Source/WebCore/dom/WheelEvent.h

    r151757 r154673  
    44 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
    55 * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2010, 2013 Apple Inc. All rights reserved.
     6 * Copyright (C) 2013 Samsung Electronics. All rights reserved.
    67 *
    78 * This library is free software; you can redistribute it and/or
     
    3637    WheelEventInit();
    3738
    38     int wheelDeltaX;
    39     int wheelDeltaY;
     39    double deltaX;
     40    double deltaY;
     41    double deltaZ;
    4042    unsigned deltaMode;
     43    int wheelDeltaX; // Deprecated.
     44    int wheelDeltaY; // Deprecated.
    4145};
    4246
     
    7882        bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
    7983
    80     int wheelDelta() const { return m_wheelDelta.y() ? m_wheelDelta.y() : m_wheelDelta.x(); }
    81     int wheelDeltaX() const { return m_wheelDelta.x(); }
    82     int wheelDeltaY() const { return m_wheelDelta.y(); }
    83     int rawDeltaX() const { return m_rawDelta.x(); }
    84     int rawDeltaY() const { return m_rawDelta.y(); }
     84    double deltaX() const { return m_deltaX; } // Positive when scrolling right.
     85    double deltaY() const { return m_deltaY; } // Positive when scrolling down.
     86    double deltaZ() const { return m_deltaZ; }
     87    int wheelDelta() const { return wheelDeltaY() ? wheelDeltaY() : wheelDeltaX(); } // Deprecated.
     88    int wheelDeltaX() const { return m_wheelDelta.x(); } // Deprecated, negative when scrolling right.
     89    int wheelDeltaY() const { return m_wheelDelta.y(); } // Deprecated, negative when scrolling down.
    8590    unsigned deltaMode() const { return m_deltaMode; }
    8691
     
    100105
    101106    IntPoint m_wheelDelta;
    102     IntPoint m_rawDelta;
     107    double m_deltaX;
     108    double m_deltaY;
     109    double m_deltaZ;
    103110    unsigned m_deltaMode;
    104111    bool m_directionInvertedFromDevice;
  • trunk/Source/WebCore/dom/WheelEvent.idl

    r149368 r154673  
    22 * Copyright (C) 2006, 2007, 2010 Apple Inc. All rights reserved.
    33 * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
     4 * Copyright (C) 2013 Samsung Electronics. All rights reserved.
    45 *
    56 * This library is free software; you can redistribute it and/or
     
    1920 */
    2021
     22// Introduced in DOM Level 3:
    2123[
    2224    ConstructorConditional=DOM4_EVENTS_CONSTRUCTOR,
    2325    ConstructorTemplate=Event
    2426] interface WheelEvent : MouseEvent {
     27    // DeltaModeCode
    2528    const unsigned long              DOM_DELTA_PIXEL = 0x00;
    2629    const unsigned long              DOM_DELTA_LINE  = 0x01;
    2730    const unsigned long              DOM_DELTA_PAGE  = 0x02;
    2831
     32    [InitializedByEventConstructor] readonly attribute double deltaX;
     33    [InitializedByEventConstructor] readonly attribute double deltaY;
     34    [InitializedByEventConstructor] readonly attribute double deltaZ;
     35    [InitializedByEventConstructor] readonly attribute unsigned long deltaMode;
     36
     37    // Legacy MouseWheelEvent API replaced by standard WheelEvent API.
    2938    [InitializedByEventConstructor] readonly attribute long wheelDeltaX;
    3039    [InitializedByEventConstructor] readonly attribute long wheelDeltaY;
    31     [InitializedByEventConstructor] readonly attribute unsigned long deltaMode;
    32 
    3340    readonly attribute long wheelDelta;
    3441
  • trunk/Source/WebCore/html/HTMLAttributeNames.in

    r154327 r154673  
    238238onselectionchange
    239239onwebkitspeechchange
     240onwheel
    240241onstalled
    241242onstorage
  • trunk/Source/WebCore/html/HTMLElement.cpp

    r154358 r154673  
    229229        attributeNameToEventNameMap.set(onmouseupAttr.localName(), eventNames().mouseupEvent);
    230230        attributeNameToEventNameMap.set(onmousewheelAttr.localName(), eventNames().mousewheelEvent);
     231        attributeNameToEventNameMap.set(onwheelAttr.localName(), eventNames().wheelEvent);
    231232        attributeNameToEventNameMap.set(onfocusAttr.localName(), eventNames().focusEvent);
    232233        attributeNameToEventNameMap.set(onfocusinAttr.localName(), eventNames().focusinEvent);
  • trunk/Source/WebCore/page/DOMWindow.cpp

    r154658 r154673  
    16251625    if (Document* document = this->document()) {
    16261626        document->addListenerTypeIfNeeded(eventType);
    1627         if (eventType == eventNames().mousewheelEvent)
     1627        if (eventType == eventNames().wheelEvent || eventType == eventNames().mousewheelEvent)
    16281628            document->didAddWheelEventHandler();
    16291629        else if (eventNames().isTouchEventType(eventType))
     
    16631663
    16641664    if (Document* document = this->document()) {
    1665         if (eventType == eventNames().mousewheelEvent)
     1665        if (eventType == eventNames().wheelEvent || eventType == eventNames().mousewheelEvent)
    16661666            document->didRemoveWheelEventHandler();
    16671667        else if (eventNames().isTouchEventType(eventType))
  • trunk/Source/WebCore/page/DOMWindow.h

    r153926 r154673  
    351351        DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitbeginfullscreen);
    352352        DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitendfullscreen);
     353        DEFINE_ATTRIBUTE_EVENT_LISTENER(wheel);
    353354
    354355        DEFINE_MAPPED_ATTRIBUTE_EVENT_LISTENER(webkitanimationstart, webkitAnimationStart);
  • trunk/Source/WebCore/page/DOMWindow.idl

    r152859 r154673  
    260260    attribute EventListener onvolumechange;
    261261    attribute EventListener onwaiting;
     262    attribute EventListener onwheel;
    262263
    263264    // Not implemented yet.
  • trunk/Source/WebCore/page/EventHandler.cpp

    r154663 r154673  
    25852585    // Break up into two scrolls if we need to.  Diagonal movement on
    25862586    // a MacBook pro is an example of a 2-dimensional mouse wheel event (where both deltaX and deltaY can be set).
    2587     if (dominantDirection != DominantScrollDirectionVertical && scrollNode(wheelEvent->rawDeltaX(), granularity, ScrollLeft, ScrollRight, startNode, &stopNode))
     2587    if (dominantDirection != DominantScrollDirectionVertical && scrollNode(wheelEvent->deltaX(), granularity, ScrollRight, ScrollLeft, startNode, &stopNode))
    25882588        wheelEvent->setDefaultHandled();
    25892589   
    2590     if (dominantDirection != DominantScrollDirectionHorizontal && scrollNode(wheelEvent->rawDeltaY(), granularity, ScrollUp, ScrollDown, startNode, &stopNode))
     2590    if (dominantDirection != DominantScrollDirectionHorizontal && scrollNode(wheelEvent->deltaY(), granularity, ScrollDown, ScrollUp, startNode, &stopNode))
    25912591        wheelEvent->setDefaultHandled();
    25922592   
  • trunk/Source/WebCore/plugins/blackberry/PluginViewBlackBerry.cpp

    r154272 r154673  
    329329    wheelEvent.flags = 0;
    330330
    331     wheelEvent.xDelta = event->rawDeltaX();
    332     wheelEvent.yDelta = event->rawDeltaY();
     331    wheelEvent.xDelta = -event->deltaX();
     332    wheelEvent.yDelta = -event->deltaY();
    333333
    334334    npEvent.type = NP_WheelEvent;
  • trunk/Source/WebCore/svg/SVGElementInstance.cpp

    r154462 r154673  
    6464DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElement(), mouseup);
    6565DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElement(), mousewheel);
     66DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElement(), wheel);
    6667DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElement(), beforecut);
    6768DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(SVGElementInstance, correspondingElement(), cut);
  • trunk/Source/WebCore/svg/SVGElementInstance.h

    r154462 r154673  
    122122    DECLARE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(correspondingElement(), mouseup);
    123123    DECLARE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(correspondingElement(), mousewheel);
     124    DECLARE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(correspondingElement(), wheel);
    124125    DECLARE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(correspondingElement(), beforecut);
    125126    DECLARE_FORWARDING_ATTRIBUTE_EVENT_LISTENER(correspondingElement(), cut);
  • trunk/Source/WebCore/svg/SVGElementInstance.idl

    r151714 r154673  
    7070    [NotEnumerable] attribute EventListener onmouseup;
    7171    [NotEnumerable] attribute EventListener onmousewheel;
     72    [NotEnumerable] attribute EventListener onwheel;
    7273    [NotEnumerable] attribute EventListener onbeforecut;
    7374    [NotEnumerable] attribute EventListener oncut;
Note: See TracChangeset for help on using the changeset viewer.