Bug 1316505 part.1 Expose mozilla::WheelEvent::mLineOrPageDelta(X|Y) to chrome script via DOM WheelEvent r?smaug
It's useful for chrome script if chrome's wheel event handler just wants low resolution wheel events.
MozReview-Commit-ID: CTTfahFdow1
--- a/dom/events/WheelEvent.cpp
+++ b/dom/events/WheelEvent.cpp
@@ -104,16 +104,28 @@ WheelEvent::DeltaZ()
}
uint32_t
WheelEvent::DeltaMode()
{
return mEvent->AsWheelEvent()->mDeltaMode;
}
+int32_t
+WheelEvent::LineOrPageDeltaX()
+{
+ return mEvent->AsWheelEvent()->mLineOrPageDeltaX;
+}
+
+int32_t
+WheelEvent::LineOrPageDeltaY()
+{
+ return mEvent->AsWheelEvent()->mLineOrPageDeltaY;
+}
+
already_AddRefed<WheelEvent>
WheelEvent::Constructor(const GlobalObject& aGlobal,
const nsAString& aType,
const WheelEventInit& aParam,
ErrorResult& aRv)
{
nsCOMPtr<EventTarget> t = do_QueryInterface(aGlobal.GetAsSupports());
RefPtr<WheelEvent> e = new WheelEvent(t, nullptr, nullptr);
--- a/dom/events/WheelEvent.h
+++ b/dom/events/WheelEvent.h
@@ -40,16 +40,20 @@ public:
// NOTE: DeltaX(), DeltaY() and DeltaZ() return CSS pixels when deltaMode is
// DOM_DELTA_PIXEL. (The internal event's delta values are device pixels
// if it's dispatched by widget)
double DeltaX();
double DeltaY();
double DeltaZ();
uint32_t DeltaMode();
+ // Chrome only.
+ int32_t LineOrPageDeltaX();
+ int32_t LineOrPageDeltaY();
+
void
InitWheelEvent(const nsAString& aType, bool aCanBubble, bool aCancelable,
nsGlobalWindow* aView, int32_t aDetail,
int32_t aScreenX, int32_t aScreenY,
int32_t aClientX, int32_t aClientY, uint16_t aButton,
EventTarget* aRelatedTarget, const nsAString& aModifiersList,
double aDeltaX, double aDeltaY, double aDeltaZ,
uint32_t aDeltaMode);
--- a/dom/webidl/WheelEvent.webidl
+++ b/dom/webidl/WheelEvent.webidl
@@ -17,16 +17,30 @@ interface WheelEvent : MouseEvent
const unsigned long DOM_DELTA_LINE = 0x01;
const unsigned long DOM_DELTA_PAGE = 0x02;
readonly attribute double deltaX;
readonly attribute double deltaY;
readonly attribute double deltaZ;
readonly attribute unsigned long deltaMode;
+ // lineOrPageDelta attributes are useful when wheel event handlers want to
+ // handles wheel events as low resoultuion events. If the wheel device
+ // supports high resolution delta value, delta values may be less than 1.
+ // In such case, wheel event handler may need to wait to do something
+ // until accumulated delta value becomes 1 or -1. These attributes
+ // are useful for such case. For example, if each deltaY value is 0.4,
+ // lineOrPageDeltaY becomes 1 only when the first event and 4th event or
+ // the 3rd event (because accumulated deltaY value is 1.2) and the 5th event
+ // (because accumulated deltaY is 2.0). It depends on platforms if
+ // lineOrPageDelta is set to 1 at first event or later event. But the
+ // value is non-zero means that it's good timing to handle it on the
+ // platform.
+ [ChromeOnly] readonly attribute long lineOrPageDeltaX;
+ [ChromeOnly] readonly attribute long lineOrPageDeltaY;
};
dictionary WheelEventInit : MouseEventInit
{
double deltaX = 0;
double deltaY = 0;
double deltaZ = 0;
unsigned long deltaMode = 0;