| // Copyright 2013 The Closure Library Authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS-IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| /** |
| * @fileoverview Utilities to abstract mouse and touch events. |
| */ |
| |
| |
| goog.provide('goog.labs.events.touch'); |
| goog.provide('goog.labs.events.touch.TouchData'); |
| |
| goog.require('goog.array'); |
| goog.require('goog.asserts'); |
| goog.require('goog.events.EventType'); |
| goog.require('goog.string'); |
| |
| |
| /** |
| * Description the geometry and target of an event. |
| * |
| * @typedef {{ |
| * clientX: number, |
| * clientY: number, |
| * screenX: number, |
| * screenY: number, |
| * target: EventTarget |
| * }} |
| */ |
| goog.labs.events.touch.TouchData; |
| |
| |
| /** |
| * Takes a mouse or touch event and returns the relevent geometry and target |
| * data. |
| * @param {!Event} e A mouse or touch event. |
| * @return {!goog.labs.events.touch.TouchData} |
| */ |
| goog.labs.events.touch.getTouchData = function(e) { |
| |
| var source = e; |
| goog.asserts.assert( |
| goog.string.startsWith(e.type, 'touch') || |
| goog.string.startsWith(e.type, 'mouse'), |
| 'Event must be mouse or touch event.'); |
| |
| if (goog.string.startsWith(e.type, 'touch')) { |
| goog.asserts.assert( |
| goog.array.contains([ |
| goog.events.EventType.TOUCHCANCEL, |
| goog.events.EventType.TOUCHEND, |
| goog.events.EventType.TOUCHMOVE, |
| goog.events.EventType.TOUCHSTART |
| ], e.type), |
| 'Touch event not of valid type.'); |
| |
| // If the event is end or cancel, take the first changed touch, |
| // otherwise the first target touch. |
| source = (e.type == goog.events.EventType.TOUCHEND || |
| e.type == goog.events.EventType.TOUCHCANCEL) ? |
| e.changedTouches[0] : e.targetTouches[0]; |
| } |
| |
| return { |
| clientX: source['clientX'], |
| clientY: source['clientY'], |
| screenX: source['screenX'], |
| screenY: source['screenY'], |
| target: source['target'] |
| }; |
| }; |
| |