| Index: client/touch/TouchUtil.dart
|
| ===================================================================
|
| --- client/touch/TouchUtil.dart (revision 4144)
|
| +++ client/touch/TouchUtil.dart (working copy)
|
| @@ -1,242 +0,0 @@
|
| -// Copyright (c) 2011, 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.
|
| -
|
| -/**
|
| - * Wraps a callback with translations of mouse events to touch events. Use
|
| - * this function to invoke your callback that expects touch events after
|
| - * touch events are created from the actual mouse events.
|
| - */
|
| -EventListener mouseToTouchCallback(EventListener callback) {
|
| - return (MouseEvent e) {
|
| - var touches = <Touch>[];
|
| - var targetTouches = <Touch>[];
|
| - var changedTouches = <Touch>[];
|
| - final mockTouch = new MockTouch(e);
|
| - final mockTouchList = <Touch>[mockTouch];
|
| - if (e.type == 'mouseup') {
|
| - changedTouches = mockTouchList;
|
| - } else {
|
| - touches = mockTouchList;
|
| - targetTouches = mockTouchList;
|
| - }
|
| - callback(new MockTouchEvent(e, touches, targetTouches, changedTouches));
|
| - // Required to prevent spurious selection changes while tracking touches
|
| - // on devices that don't support touch events.
|
| - e.preventDefault();
|
| - };
|
| -}
|
| -
|
| -/** Helper method to attach event listeners to a [node]. */
|
| -void _addEventListeners(Element node,
|
| - EventListener onStart, EventListener onMove, EventListener onEnd,
|
| - EventListener onCancel, [bool capture = false]) {
|
| -
|
| - Function removeListeners;
|
| -
|
| - onEndWrapper(e) {
|
| - removeListeners();
|
| - return onEnd(e);
|
| - }
|
| -
|
| - onLeaveWrapper(e) {
|
| - removeListeners();
|
| - return onEnd(e);
|
| - }
|
| -
|
| - onCancelWrapper(e) {
|
| - removeListeners();
|
| - return onCancel(e);
|
| - }
|
| -
|
| - if (Device.supportsTouch) {
|
| - removeListeners = () {
|
| - document.on.touchMove.remove(onMove, capture);
|
| - document.on.touchEnd.remove(onEndWrapper, capture);
|
| - document.on.touchLeave.remove(onLeaveWrapper, capture);
|
| - document.on.touchCancel.remove(onCancelWrapper, capture);
|
| - };
|
| -
|
| - node.on.touchStart.add((e) {
|
| - document.on.touchMove.add(onMove, capture);
|
| - document.on.touchEnd.add(onEndWrapper, capture);
|
| - document.on.touchLeave.add(onLeaveWrapper, capture);
|
| - document.on.touchCancel.add(onCancelWrapper, capture);
|
| - return onStart(e);
|
| - }, capture);
|
| - } else {
|
| - onStart = mouseToTouchCallback(onStart);
|
| - onMove = mouseToTouchCallback(onMove);
|
| - onEnd = mouseToTouchCallback(onEnd);
|
| - // onLeave will never be called if the device does not support touches.
|
| -
|
| - removeListeners = () {
|
| - document.on.mouseMove.remove(onMove, capture);
|
| - document.on.mouseUp.remove(onEndWrapper, capture);
|
| - document.on.touchCancel.remove(onCancelWrapper, capture);
|
| - };
|
| -
|
| - node.on.mouseDown.add((e) {
|
| - document.on.mouseMove.add(onMove, capture);
|
| - document.on.mouseUp.add(onEndWrapper, capture);
|
| - document.on.touchCancel.add(onCancelWrapper, capture);
|
| - return onStart(e);
|
| - }, capture);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Gets whether the given touch event targets the node, or one of the node's
|
| - * children.
|
| - */
|
| -bool _touchEventTargetsNode(event, Node node) {
|
| - Node target = event.changedTouches[0].target;
|
| -
|
| - // TODO(rnystrom): Move this into Dom.
|
| - // Walk up the parents looking for the node.
|
| - while (target != null) {
|
| - if (target == node) {
|
| - return true;
|
| - }
|
| - target = target.parent;
|
| - }
|
| -
|
| - return false;
|
| -}
|
| -
|
| -interface Touchable {
|
| - /**
|
| - * Provide the HTML element that should respond to touch events.
|
| - */
|
| - Element getElement();
|
| -
|
| - /**
|
| - * The object has received a touchend event.
|
| - */
|
| - void onTouchEnd();
|
| -
|
| - /**
|
| - * The object has received a touchstart event.
|
| - * Returns return true if you want to allow a drag sequence to begin,
|
| - * false you want to disable dragging for the duration of this touch.
|
| - */
|
| - bool onTouchStart(TouchEvent e);
|
| -}
|
| -
|
| -interface Draggable extends Touchable {
|
| - /**
|
| - * The object's drag sequence is now complete.
|
| - */
|
| - void onDragEnd();
|
| -
|
| - /**
|
| - * The object has been dragged to a new position.
|
| - */
|
| - void onDragMove();
|
| -
|
| - /**
|
| - * The object has started dragging.
|
| - * Returns true to allow a drag sequence to begin (custom behavior),
|
| - * false to disable dragging for this touch duration (allow native scrolling).
|
| - */
|
| - bool onDragStart(TouchEvent e);
|
| -
|
| - bool get verticalEnabled();
|
| - bool get horizontalEnabled();
|
| -}
|
| -
|
| -class MockTouch implements Touch {
|
| - MouseEvent wrapped;
|
| -
|
| - MockTouch(MouseEvent this.wrapped) {}
|
| -
|
| - int get clientX() => wrapped.clientX;
|
| -
|
| - int get clientY() => wrapped.clientY;
|
| -
|
| - int get identifier() => 0;
|
| -
|
| - int get pageX() => wrapped.pageX;
|
| -
|
| - int get pageY() => wrapped.pageY;
|
| -
|
| - int get screenX() => wrapped.screenX;
|
| -
|
| - int get screenY() {return wrapped.screenY; }
|
| -
|
| - EventTarget get target() => wrapped.target;
|
| -
|
| - num get webkitForce() { throw new NotImplementedException(); }
|
| - int get webkitRadiusX() { throw new NotImplementedException(); }
|
| - int get webkitRadiusY() { throw new NotImplementedException(); }
|
| - num get webkitRotationAngle() { throw new NotImplementedException(); }
|
| -}
|
| -
|
| -class MockTouchEvent implements TouchEvent {
|
| - MouseEvent wrapped;
|
| - // TODO(jacobr): these are currently Lists instead of a TouchList.
|
| - final List<Touch> touches;
|
| - final List<Touch> targetTouches;
|
| - final List<Touch> changedTouches;
|
| - MockTouchEvent(MouseEvent this.wrapped, List<Touch> this.touches,
|
| - List<Touch> this.targetTouches,
|
| - List<Touch> this.changedTouches) {}
|
| -
|
| - bool get bubbles() => wrapped.bubbles;
|
| -
|
| - bool get cancelBubble() => wrapped.cancelBubble;
|
| -
|
| - void set cancelBubble(bool value) { wrapped.cancelBubble = value; }
|
| -
|
| - bool get cancelable() => wrapped.cancelable;
|
| -
|
| - EventTarget get currentTarget() => wrapped.currentTarget;
|
| -
|
| - bool get defaultPrevented() => wrapped.defaultPrevented;
|
| -
|
| - int get eventPhase() => wrapped.eventPhase;
|
| -
|
| - void set returnValue(bool value) { wrapped.returnValue = value; }
|
| -
|
| - bool get returnValue() => wrapped.returnValue;
|
| -
|
| - EventTarget get srcElement() => wrapped.srcElement;
|
| -
|
| - EventTarget get target() => wrapped.target;
|
| -
|
| - int get timeStamp() => wrapped.timeStamp;
|
| -
|
| - String get type() => wrapped.type;
|
| -
|
| - void preventDefault() { wrapped.preventDefault(); }
|
| -
|
| - void stopImmediatePropagation() { wrapped.stopImmediatePropagation(); }
|
| -
|
| - void stopPropagation() { wrapped.stopPropagation(); }
|
| -
|
| - int get charCode() => wrapped.charCode;
|
| -
|
| - int get detail() => wrapped.detail;
|
| -
|
| - int get keyCode() => wrapped.keyCode;
|
| -
|
| - int get layerX() => wrapped.layerX;
|
| -
|
| - int get layerY() => wrapped.layerY;
|
| -
|
| - int get pageX() => wrapped.pageX;
|
| -
|
| - int get pageY() => wrapped.pageY;
|
| -
|
| - Window get view() => wrapped.view;
|
| -
|
| - int get which() => wrapped.which;
|
| -
|
| - bool get altKey() => wrapped.altKey;
|
| -
|
| - bool get ctrlKey() => wrapped.ctrlKey;
|
| -
|
| - bool get metaKey() => wrapped.metaKey;
|
| -
|
| - bool get shiftKey() => wrapped.shiftKey;
|
| -}
|
|
|