- From: Maciej Stachowiak <mjs@apple.com>
- Date: Tue, 2 May 2006 18:02:44 -0700
- To: Public Web API <public-webapi@w3.org>
- Message-Id: <87C9B9A0-B8E4-42E4-87C1-751B77B8C6F6@apple.com>
Whoops, I meant to send this to the public list, but accidentally sent to member: Begin forwarded message: > For mouse wheel events, we have two important use cases we want to > cover: > > 1) Content using the existing nonstandard "mousewheel" event. In > this case, it is assumed that the event is for a vertical scroll > only, and apparently content depends on the delta not being 0. > > 2) Content that wants to handle both vertical and horizontal scroll > at once, to avoid "stairstepping". This requires a single event > that has access to both scroll deltas and fires when either one is > non-zero. > > Here is a use case that seems sort of useful but was not seen by > the WG as compelling enough to introduce extra design complexity: > > 3) Cancel the horizontal scroll only, but not the vertical scroll. > > > Here is a proposed design to handle this. > > When mouse wheeling occurs, the implementation dispatches a > "mousemultiwheel" event. This event includes both scroll deltas. > See stawman proposal for IDL interface below. The default action of > the "mousemultiwheel" event is to dispatch a "mousewheel" event if > the y delta is non-zero, and then scroll. However, if the > "mousewheel" event is cancelled, only the horizontal part of the > scrolling is done. This can reasonably address both use cases. > Here's an ASCII art diagram of the flow: > > > [ "mousemultiwheel" ] --------------> [ "mousewheel" ] =====> > default scroll > default action > > > This addresses use cases 1 and 2. It does not address use case 3. > Use case 3 could be addressed in one of two ways, either add a > "mousewheelx" event which is dispatched for non-zero x delta only, > or to make wheelDeltaX and wheelDeltaY read-write instead of read- > only, with the actual scroll that occurs using the modified value. > The WG members present decided not to add either of these > complexities. > > > Proposed IDL interface for WheelEvent: > > interface WheelEvent : UIEvent { > readonly attribute long screenX; > readonly attribute long screenY; > readonly attribute long clientX; > readonly attribute long clientY; > readonly attribute boolean ctrlKey; > readonly attribute boolean shiftKey; > readonly attribute boolean altKey; > readonly attribute boolean metaKey; > readonly attribute long wheelDelta; > > void initWheelEvent(in DOMString typeArg, > in boolean canBubbleArg, > in boolean cancelableArg, > in views::AbstractView viewArg, > in long detailArg, > in long screenXArg, > in long screenYArg, > in long clientXArg, > in long clientYArg, > in boolean ctrlKeyArg, > in boolean altKeyArg, > in boolean shiftKeyArg, > in boolean metaKeyArg, > in long wheelDelta > ); > // Introduced in DOM Level 3: > boolean getModifierState(in DOMString keyIdentifierArg); > // Introduced in DOM Level 3: > void initMouseEventNS(in DOMString namespaceURI, > in DOMString typeArg, > in boolean canBubbleArg, > in boolean cancelableArg, > in views::AbstractView viewArg, > in long detailArg, > in long screenXArg, > in long screenYArg, > in long clientXArg, > in long clientYArg, > in DOMString modifiersList, > in long wheelDelta); > }; > > Proposed IDL interface for MultiWheelEvent (or should it have an > array or something to support a general number of wheels?): > > interface MultiWheelEvent : UIEvent { > readonly attribute long screenX; > readonly attribute long screenY; > readonly attribute long clientX; > readonly attribute long clientY; > readonly attribute boolean ctrlKey; > readonly attribute boolean shiftKey; > readonly attribute boolean altKey; > readonly attribute boolean metaKey; > readonly attribute long wheelDeltaX; > readonly attribute long wheelDeltaY; > readonly attribute long wheelDeltaZ; > > void initWheelEvent(in DOMString typeArg, > in boolean canBubbleArg, > in boolean cancelableArg, > in views::AbstractView viewArg, > in long detailArg, > in long screenXArg, > in long screenYArg, > in long clientXArg, > in long clientYArg, > in boolean ctrlKeyArg, > in boolean altKeyArg, > in boolean shiftKeyArg, > in boolean metaKeyArg, > in long wheelDeltaX, > in long wheelDeltaY, > in long wheelDeltaZ > ); > // Introduced in DOM Level 3: > boolean getModifierState(in DOMString keyIdentifierArg); > // Introduced in DOM Level 3: > void initMouseEventNS(in DOMString namespaceURI, > in DOMString typeArg, > in boolean canBubbleArg, > in boolean cancelableArg, > in views::AbstractView viewArg, > in long detailArg, > in long screenXArg, > in long screenYArg, > in long clientXArg, > in long clientYArg, > in DOMString modifiersList, > in long wheelDeltaX, > in long wheelDeltaY, > in long wheelDeltaZ); > }; >
Received on Wednesday, 3 May 2006 01:03:01 UTC