Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(133)

Side by Side Diff: sdk/lib/html/dart2js/html_dart2js.dart

Issue 11931009: Adding support for the MouseWheel event in Streams. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | sdk/lib/html/dartium/html_dartium.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 library html; 1 library html;
2 2
3 import 'dart:async'; 3 import 'dart:async';
4 import 'dart:collection'; 4 import 'dart:collection';
5 import 'dart:html_common'; 5 import 'dart:html_common';
6 import 'dart:indexed_db'; 6 import 'dart:indexed_db';
7 import 'dart:isolate'; 7 import 'dart:isolate';
8 import 'dart:json' as json; 8 import 'dart:json' as json;
9 import 'dart:math'; 9 import 'dart:math';
10 import 'dart:svg' as svg; 10 import 'dart:svg' as svg;
(...skipping 7945 matching lines...) Expand 10 before | Expand all | Expand 10 after
7956 * [x-tags][] project. Please note: in the future it may be possible to 7956 * [x-tags][] project. Please note: in the future it may be possible to
7957 * `extend Element` from your class, in which case this field will be 7957 * `extend Element` from your class, in which case this field will be
7958 * deprecated and will simply return this [Element] object. 7958 * deprecated and will simply return this [Element] object.
7959 * 7959 *
7960 * [wc]: http://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/index.html 7960 * [wc]: http://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/index.html
7961 * [x-tags]: http://x-tags.org/ 7961 * [x-tags]: http://x-tags.org/
7962 */ 7962 */
7963 @Creates('Null') // Set from Dart code; does not instantiate a native type. 7963 @Creates('Null') // Set from Dart code; does not instantiate a native type.
7964 var xtag; 7964 var xtag;
7965 7965
7966 static const EventStreamProvider<WheelEvent> mouseWheelEvent =
7967 const _CustomEventStreamProvider<WheelEvent>(
7968 Element._determineMouseWheelEventType);
7969
7970 static String _determineMouseWheelEventType(EventTarget e) {
7971 if (JS('bool', '#.onwheel !== undefined', e)) {
7972 // W3C spec, and should be IE9+, but IE has a bug exposing onwheel.
7973 return 'wheel';
7974 } else if (JS('bool', '#.onmousewheel !== undefined', e)) {
7975 // Chrome & IE
7976 return 'mousewheel';
7977 } else {
7978 // Firefox
7979 return 'DOMMouseScroll';
7980 }
7981 }
7982
7966 /** 7983 /**
7967 * Creates a text node and inserts it into the DOM at the specified location. 7984 * Creates a text node and inserts it into the DOM at the specified location.
7968 * 7985 *
7969 * To see the possible values for [where], read the doc for 7986 * To see the possible values for [where], read the doc for
7970 * [insertAdjacentHtml]. 7987 * [insertAdjacentHtml].
7971 * 7988 *
7972 * See also: 7989 * See also:
7973 * 7990 *
7974 * * [insertAdjacentHtml] 7991 * * [insertAdjacentHtml]
7975 */ 7992 */
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
8446 Stream<MouseEvent> get onMouseDown => mouseDownEvent.forTarget(this); 8463 Stream<MouseEvent> get onMouseDown => mouseDownEvent.forTarget(this);
8447 8464
8448 Stream<MouseEvent> get onMouseMove => mouseMoveEvent.forTarget(this); 8465 Stream<MouseEvent> get onMouseMove => mouseMoveEvent.forTarget(this);
8449 8466
8450 Stream<MouseEvent> get onMouseOut => mouseOutEvent.forTarget(this); 8467 Stream<MouseEvent> get onMouseOut => mouseOutEvent.forTarget(this);
8451 8468
8452 Stream<MouseEvent> get onMouseOver => mouseOverEvent.forTarget(this); 8469 Stream<MouseEvent> get onMouseOver => mouseOverEvent.forTarget(this);
8453 8470
8454 Stream<MouseEvent> get onMouseUp => mouseUpEvent.forTarget(this); 8471 Stream<MouseEvent> get onMouseUp => mouseUpEvent.forTarget(this);
8455 8472
8473 Stream<WheelEvent> get onMouseWheel => mouseWheelEvent.forTarget(this);
8474
8456 Stream<Event> get onPaste => pasteEvent.forTarget(this); 8475 Stream<Event> get onPaste => pasteEvent.forTarget(this);
8457 8476
8458 Stream<Event> get onReset => resetEvent.forTarget(this); 8477 Stream<Event> get onReset => resetEvent.forTarget(this);
8459 8478
8460 Stream<Event> get onScroll => scrollEvent.forTarget(this); 8479 Stream<Event> get onScroll => scrollEvent.forTarget(this);
8461 8480
8462 Stream<Event> get onSearch => searchEvent.forTarget(this); 8481 Stream<Event> get onSearch => searchEvent.forTarget(this);
8463 8482
8464 Stream<Event> get onSelect => selectEvent.forTarget(this); 8483 Stream<Event> get onSelect => selectEvent.forTarget(this);
8465 8484
(...skipping 13304 matching lines...) Expand 10 before | Expand all | Expand 10 after
21770 EventListenerList get open => this['open']; 21789 EventListenerList get open => this['open'];
21771 } 21790 }
21772 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 21791 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
21773 // for details. All rights reserved. Use of this source code is governed by a 21792 // for details. All rights reserved. Use of this source code is governed by a
21774 // BSD-style license that can be found in the LICENSE file. 21793 // BSD-style license that can be found in the LICENSE file.
21775 21794
21776 21795
21777 /// @domName WheelEvent 21796 /// @domName WheelEvent
21778 class WheelEvent extends MouseEvent native "*WheelEvent" { 21797 class WheelEvent extends MouseEvent native "*WheelEvent" {
21779 21798
21799 factory WheelEvent(
21800 String type,
21801 Window view,
21802 int wheelDeltaX,
21803 int wheelDeltaY,
21804 int detail,
21805 int screenX,
21806 int screenY,
21807 int clientX,
21808 int clientY,
21809 int button,
21810 [bool canBubble = true,
21811 bool cancelable = true,
21812 bool ctrlKey = false,
21813 bool altKey = false,
21814 bool shiftKey = false,
21815 bool metaKey = false,
21816 EventTarget relatedTarget = null]) {
Siggi Cherem (dart-lang) 2013/01/16 18:52:00 generally indentation here looks strange. Consider
blois 2013/01/16 20:04:02 Updated. In general I find the collapsed form fair
21817
21818 var eventType = 'WheelEvent';
21819 if (_Device.isFirefox) {
21820 eventType = 'MouseScrollEvents';
21821 }
21822 final event = document.$dom_createEvent(eventType);
21823
21824 if (_Device.isWebKit) {
21825 event.$dom_initMouseEvent(
21826 type,
21827 canBubble,
21828 cancelable,
21829 view,
21830 detail,
21831 screenX,
21832 screenY,
21833 clientX,
21834 clientY,
21835 ctrlKey,
21836 altKey,
21837 shiftKey,
21838 metaKey,
21839 button,
21840 relatedTarget);
21841 event.$dom_initWebKitWheelEvent(
21842 wheelDeltaX,
21843 (wheelDeltaY / 120).toInt(), // Chrome does an auto-convert to pixels.
21844 view,
21845 screenX,
21846 screenY,
21847 clientX,
21848 clientY,
21849 ctrlKey,
21850 altKey,
21851 shiftKey,
21852 metaKey);
21853 }
21854 else if (_Device.isIE) {
Siggi Cherem (dart-lang) 2013/01/16 18:52:00 move else to previous line?
blois 2013/01/16 20:04:02 Was a by-product of template expansion, updated wi
21855 var modifiers = [];
21856 if (ctrlKey) {
21857 modifiers.push('Control');
21858 }
21859 if (altKey) {
21860 modifiers.push('Alt');
21861 }
21862 if (shiftKey) {
21863 modifiers.push('Shift');
21864 }
21865 if (metaKey) {
21866 modifiers.push('Meta');
21867 }
21868 var modifiersList = modifiers.join(' ');
21869 event._initIEWheelEvent(
21870 type,
21871 canBubble,
21872 cancelable,
21873 view,
21874 detail,
21875 screenX,
21876 screenY,
21877 clientX,
21878 clientY,
21879 button,
21880 relatedTarget,
21881 modifiersList,
Siggi Cherem (dart-lang) 2013/01/16 18:52:00 nit: maybe simply inline modifiers.join(' ') here?
blois 2013/01/16 20:04:02 Done.
21882 wheelDeltaX,
21883 wheelDeltaY,
21884 0,
21885 0);
21886 } else if (_Device.isFirefox) {
21887 var axis = 0;
21888 var detail = 0;
21889 if (wheelDeltaX != 0 && wheelDeltaY != 0) {
21890 throw UnsupportedError(
21891 'Cannot modify wheelDeltaX and wheelDeltaY simultaneously');
21892 }
21893 if (wheelDeltaY != 0) {
21894 detail = wheelDeltaY;
21895 axis = JS('int', 'MouseScrollEvent.VERTICAL_AXIS');
21896 } else if (wheelDeltaX != 0) {
21897 detail = wheelDeltaX;
21898 axis = JS('int', 'MouseScrollEvent.HORIZONTAL_AXIS');
21899 }
21900 event._initFireFoxMouseScrollEvent(
21901 type,
21902 canBubble,
21903 cancelable,
21904 view,
21905 detail,
21906 screenX,
21907 screenY,
21908 clientX,
21909 clientY,
21910 ctrlKey,
21911 altKey,
21912 shiftKey,
21913 metaKey,
21914 button,
21915 relatedTarget,
21916 axis);
21917 }
21918 return event;
21919 }
21920
21921
21780 /// @domName WheelEvent.webkitDirectionInvertedFromDevice; @docsEditable true 21922 /// @domName WheelEvent.webkitDirectionInvertedFromDevice; @docsEditable true
21781 final bool webkitDirectionInvertedFromDevice; 21923 final bool webkitDirectionInvertedFromDevice;
21782 21924
21783 /// @domName WheelEvent.initWebKitWheelEvent; @docsEditable true 21925 /// @domName WheelEvent.initWebKitWheelEvent; @docsEditable true
21784 void initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, Window view, int s creenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool s hiftKey, bool metaKey) native; 21926 @JSName('initWebKitWheelEvent')
21927 void $dom_initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, Window view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, b ool shiftKey, bool metaKey) native;
21785 21928
21786 21929
21787 /** @domName WheelEvent.deltaY */ 21930 /** @domName WheelEvent.deltaY */
21788 num get deltaY { 21931 num get deltaY {
21789 if (JS('bool', '#.deltaY !== undefined', this)) { 21932 if (JS('bool', '#.deltaY !== undefined', this)) {
21790 // W3C WheelEvent 21933 // W3C WheelEvent
21791 return this._deltaY; 21934 return this._deltaY;
21792 } else if (JS('bool', '#.wheelDelta !== undefined', this)) { 21935 } else if (JS('bool', '#.wheelDelta !== undefined', this)) {
21793 // Chrome and IE 21936 // Chrome and IE
21794 return this._wheelDelta; 21937 return this._wheelDelta;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
21849 return this._deltaMode; 21992 return this._deltaMode;
21850 } 21993 }
21851 21994
21852 num get _deltaY => JS('num', '#.deltaY', this); 21995 num get _deltaY => JS('num', '#.deltaY', this);
21853 num get _deltaX => JS('num', '#.deltaX', this); 21996 num get _deltaX => JS('num', '#.deltaX', this);
21854 num get _wheelDelta => JS('num', '#.wheelDelta', this); 21997 num get _wheelDelta => JS('num', '#.wheelDelta', this);
21855 num get _wheelDeltaX => JS('num', '#.wheelDeltaX', this); 21998 num get _wheelDeltaX => JS('num', '#.wheelDeltaX', this);
21856 num get _detail => JS('num', '#.detail', this); 21999 num get _detail => JS('num', '#.detail', this);
21857 int get _deltaMode => JS('int', '#.deltaMode', this); 22000 int get _deltaMode => JS('int', '#.deltaMode', this);
21858 22001
22002 @JSName('initMouseScrollEvent')
22003 void _initFireFoxMouseScrollEvent(
22004 String type,
22005 bool canBubble,
22006 bool cancelable,
22007 Window view,
22008 int detail,
22009 int screenX,
22010 int screenY,
22011 int clientX,
22012 int clientY,
22013 bool ctrlKey,
22014 bool altKey,
22015 bool shiftKey,
22016 bool metaKey,
22017 int button,
22018 EventTarget relatedTarget,
22019 int axis) native;
22020
22021 @JSName('initWheelEvent')
22022 void _initIEWheelEvent(
22023 String eventType,
22024 bool canBubble,
22025 bool cancelable,
22026 Window view,
22027 int detail,
22028 int screenX,
22029 int screenY,
22030 int clientX,
22031 int clientY,
22032 int button,
22033 EventTarget relatedTarget,
22034 String modifiersList,
22035 int deltaX,
22036 int deltaY,
22037 int deltaZ,
22038 int deltaMode) native;
22039
21859 } 22040 }
21860 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 22041 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
21861 // for details. All rights reserved. Use of this source code is governed by a 22042 // for details. All rights reserved. Use of this source code is governed by a
21862 // BSD-style license that can be found in the LICENSE file. 22043 // BSD-style license that can be found in the LICENSE file.
21863 22044
21864 22045
21865 /// @domName Window 22046 /// @domName Window
21866 class Window extends EventTarget implements WindowBase native "@*DOMWindow" { 22047 class Window extends EventTarget implements WindowBase native "@*DOMWindow" {
21867 22048
21868 Document get document => JS('Document', '#.document', this); 22049 Document get document => JS('Document', '#.document', this);
(...skipping 3657 matching lines...) Expand 10 before | Expand all | Expand 10 after
25526 * MediaElement.pauseEvent.forTarget(document.body).listen(...); 25707 * MediaElement.pauseEvent.forTarget(document.body).listen(...);
25527 * 25708 *
25528 * See also: 25709 * See also:
25529 * 25710 *
25530 * [addEventListener](http://docs.webplatform.org/wiki/dom/methods/addEventLis tener) 25711 * [addEventListener](http://docs.webplatform.org/wiki/dom/methods/addEventLis tener)
25531 */ 25712 */
25532 Stream<T> forTarget(EventTarget e, {bool useCapture: false}) { 25713 Stream<T> forTarget(EventTarget e, {bool useCapture: false}) {
25533 return new _EventStream(e, _eventType, useCapture); 25714 return new _EventStream(e, _eventType, useCapture);
25534 } 25715 }
25535 } 25716 }
25717
25718 typedef String _EventTypeGetter(EventTarget target);
Siggi Cherem (dart-lang) 2013/01/16 18:52:00 did you mean to use this type somewhere? (e.g. fie
blois 2013/01/16 20:04:02 Yes, but dart2js checked mode issue blocked it. re
25719
25720 /**
25721 * A factory to expose DOM events as streams, where the DOM event name has to
25722 * be determined on the fly (for example, mouse wheel events).
25723 */
25724 class _CustomEventStreamProvider<T extends Event>
25725 implements EventStreamProvider<T> {
25726
25727 final _eventTypeGetter;
25728 const _CustomEventStreamProvider(this._eventTypeGetter);
25729
25730 Stream<T> forTarget(EventTarget e, {bool useCapture: false}) {
25731 return new _EventStream(e, _eventTypeGetter(e), useCapture);
25732 }
25733 }
25536 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 25734 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
25537 // for details. All rights reserved. Use of this source code is governed by a 25735 // for details. All rights reserved. Use of this source code is governed by a
25538 // BSD-style license that can be found in the LICENSE file. 25736 // BSD-style license that can be found in the LICENSE file.
25539 25737
25540 25738
25541 /** 25739 /**
25542 * Works with KeyboardEvent and KeyEvent to determine how to expose information 25740 * Works with KeyboardEvent and KeyEvent to determine how to expose information
25543 * about Key(board)Events. This class functions like an EventListenerList, and 25741 * about Key(board)Events. This class functions like an EventListenerList, and
25544 * provides a consistent interface for the Dart 25742 * provides a consistent interface for the Dart
25545 * user, despite the fact that a multitude of browsers that have varying 25743 * user, despite the fact that a multitude of browsers that have varying
(...skipping 2532 matching lines...) Expand 10 before | Expand all | Expand 10 after
28078 _position = nextPosition; 28276 _position = nextPosition;
28079 return true; 28277 return true;
28080 } 28278 }
28081 _current = null; 28279 _current = null;
28082 _position = _array.length; 28280 _position = _array.length;
28083 return false; 28281 return false;
28084 } 28282 }
28085 28283
28086 T get current => _current; 28284 T get current => _current;
28087 } 28285 }
OLDNEW
« no previous file with comments | « no previous file | sdk/lib/html/dartium/html_dartium.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698