/* * Copyright 2010 Google Inc. * * 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. */ package com.google.gwt.event.dom.client; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.Touch; import com.google.gwt.event.shared.EventHandler; /** * Abstract class representing touch events. * * See {@link <a href="http://developer.apple.com/library/safari/documentation/UserExperience/Reference/TouchEventClassReference/TouchEvent/TouchEvent.html">Safari Touch Event Documentation</a>} * @param <H> handler type */ public abstract class TouchEvent<H extends EventHandler> extends HumanInputEvent<H> { /** * Dectector for browser support for touch events. */ private static class TouchSupportDetector { private final boolean isSupported = detectTouchSupport(); public boolean isSupported() { return isSupported; } private native boolean detectTouchSupport() /*-{ var elem = document.createElement('div'); elem.setAttribute('ontouchstart', 'return;'); return (typeof elem.ontouchstart) == "function"; }-*/; } /** * Detector for browsers that do not support touch events. */ @SuppressWarnings("unused") private static class TouchSupportDetectorNo extends TouchSupportDetector { @Override public boolean isSupported() { return false; } } /** * The implementation singleton. */ private static TouchSupportDetector impl; /** * Runtime check for whether touch scrolling is supported in this browser. Returns true if touch * events are supported but touch based scrolling is not natively supported. * * @return true if touch events are supported, false if not */ public static boolean isSupported() { if (impl == null) { impl = GWT.create(TouchSupportDetector.class); } return impl.isSupported(); } /** * Get an array of {@link Touch touches} which have changed since the last * touch event fired. Note, that for {@link TouchEndEvent touch end events}, * the touch which has just ended will not be present in the array. Moreover, * if the touch which just ended was the last remaining touch, then a zero * length array will be returned. * * @return an array of touches */ public JsArray<Touch> getChangedTouches() { return getNativeEvent().getChangedTouches(); } /** * Get an array of {@link Touch touches} all touch which originated at the * same target as the current touch event. Note, that for {@link TouchEndEvent * touch end events}, the touch which has just ended will not be present in * the array. Moreover, if the touch which just ended was the last remaining * touch, then a zero length array will be returned. * * @return an array of touches */ public JsArray<Touch> getTargetTouches() { return getNativeEvent().getTargetTouches(); } /** * Get an array of all current {@link Touch touches}. Note, that for * {@link TouchEndEvent touch end events}, the touch which has just ended will * not be present in the array. Moreover, if the touch which just ended was * the last remaining touch, then a zero length array will be returned. * * @return an array of touches */ public JsArray<Touch> getTouches() { return getNativeEvent().getTouches(); } }