Index: lib/html/templates/html/impl/impl_WheelEvent.darttemplate |
diff --git a/lib/html/templates/html/impl/impl_WheelEvent.darttemplate b/lib/html/templates/html/impl/impl_WheelEvent.darttemplate |
new file mode 100644 |
index 0000000000000000000000000000000000000000..dd21afabe2fc280017f089f0a3c107ab3a2c8c6b |
--- /dev/null |
+++ b/lib/html/templates/html/impl/impl_WheelEvent.darttemplate |
@@ -0,0 +1,85 @@ |
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC { |
+$!MEMBERS |
+ |
+$if DART2JS |
+ num get deltaY { |
+ if (JS('bool', '#.deltaY !== undefined', this)) { |
+ // W3C WheelEvent |
+ return this._deltaY; |
+ } else if (JS('bool', '#.wheelDelta !== undefined', this)) { |
+ // Chrome and IE |
+ return this._wheelDelta; |
+ } else if (JS('bool', '#.detail !== undefined', this)) { |
+ // Firefox |
+ |
+ // Handle DOMMouseScroll case where it uses detail and the axis to |
+ // differentiate. |
+ if (JS('bool', '#.axis == MouseScrollEvent.VERTICAL_AXIS', this)) { |
+ var detail = this._detail; |
+ // Firefox is normally the number of lines to scale (normally 3) |
+ // so multiply it by 40 to get pixels to move, matching IE & WebKit. |
+ if (detail < 100) { |
+ return detail * 40; |
+ } |
+ return detail; |
+ } |
+ return 0; |
+ } |
+ throw const UnsupportedOperationException( |
+ 'deltaY is not supported'); |
+ } |
+ |
+ num get deltaX { |
+ if (JS('bool', '#.deltaX !== undefined', this)) { |
+ // W3C WheelEvent |
+ return this._deltaX; |
+ } else if (JS('bool', '#.wheelDeltaX !== undefined', this)) { |
+ // Chrome |
+ return this._wheelDeltaX; |
+ } else if (JS('bool', '#.detail !== undefined', this)) { |
+ // Firefox and IE. |
+ // IE will have detail set but will not set axis. |
+ |
+ // Handle DOMMouseScroll case where it uses detail and the axis to |
+ // differentiate. |
+ if (JS('bool', '#.axis !== undefined && #.axis == MouseScrollEvent.HORIZONTAL_AXIS', this, this)) { |
+ var detail = this._detail; |
+ // Firefox is normally the number of lines to scale (normally 3) |
+ // so multiply it by 40 to get pixels to move, matching IE & WebKit. |
+ if (detail < 100) { |
+ return detail * 40; |
+ } |
+ return detail; |
+ } |
+ return 0; |
+ } |
+ throw const UnsupportedOperationException( |
+ 'deltaX is not supported'); |
+ } |
+ |
+ int get deltaMode { |
+ if (JS('bool', '!!#.deltaMode', this)) { |
+ // If not available then we're poly-filling and doing pixel scroll. |
+ return 0; |
+ } |
+ return this._deltaMode; |
+ } |
+ |
+ num get _deltaY() native 'return this.deltaY'; |
+ num get _deltaX() native 'return this.deltaX'; |
+ num get _wheelDelta() native 'return this.wheelDelta'; |
+ num get _wheelDeltaX() native 'return this.wheelDeltaX'; |
+ num get _detail() native 'return this.detail'; |
+ int get _deltaMode() native 'return this.deltaMode'; |
+ |
+$else |
+ num get deltaY native 'WheelEvent_wheelDelta_Getter'; |
+ num get deltaX native 'WheelEvent_wheelDeltaX_Getter'; |
+ int get deltaMode => 0; |
+ |
+$endif |
+} |