/* * Copyright 2000-2016 Vaadin Ltd. * * 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.vaadin.client.event; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.event.dom.client.MouseEvent; import com.google.gwt.event.shared.EventHandler; /** * Abstract class representing Pointer events. * * @param <H> * handler type * * @since 7.2 */ public abstract class PointerEvent<H extends EventHandler> extends MouseEvent<H> { enum EventType { PointerDown, PointerMove, PointerOut, PointerOver, PointerUp, PointerCancel; String getNativeEventName() { return PointerEventSupport.getNativeEventName(this); } } public static final String TYPE_UNKNOWN = ""; public static final String TYPE_TOUCH = "touch"; public static final String TYPE_PEN = "pen"; public static final String TYPE_MOUSE = "mouse"; /** * Gets a unique identifier for the pointer that caused this event. The * identifiers of previously active but retired pointers may be recycled. * * @return unique pointer id */ public final int getPointerId() { return getPointerId(getNativeEvent()); } /** * Gets the width of the contact geometry of the pointer in CSS pixels. * * @return width in CSS pixels */ public final int getWidth() { return getWidth(getNativeEvent()); } /** * Gets the height of the contact geometry of the pointer in CSS pixels. * * @return height in CSS pixels. */ public final int getHeight() { return getHeight(getNativeEvent()); } /** * Gets the pressure of the pointer input as a value in the range of [0, 1] * where 0 and 1 represent the minimum and maximum, respectively. * * @return input pressure as a value between 0 and 1 */ public final double getPressure() { return getPressure(getNativeEvent()); } /** * Gets the angle between the Y-Z plane and the plane containing both the * transducer and the Y axis. A positive tilt is to the right. * * @return the tilt along the X axis as degrees in the range of [-90, 90], * or 0 if the device does not support tilt */ public final double getTiltX() { return getTiltX(getNativeEvent()); } /** * Gets the angle between the X-Z plane and the plane containing both the * transducer and the X axis. A positive tilt is towards the user. * * @return the tilt along the Y axis as degrees in the range of [-90, 90], * or 0 if the device does not support tilt */ public final double getTiltY() { return getTiltY(getNativeEvent()); } /** * Gets the type of the pointer device that caused this event. * * @see PointerEvent#TYPE_UNKNOWN * @see PointerEvent#TYPE_TOUCH * @see PointerEvent#TYPE_PEN * @see PointerEvent#TYPE_MOUSE * * @return a String indicating the type of the pointer device */ public final String getPointerType() { return getPointerType(getNativeEvent()); } /** * Indicates whether the pointer is the primary pointer of this type. * * @return true if the pointer is the primary pointer, otherwise false */ public final boolean isPrimary() { return isPrimary(getNativeEvent()); } private static native final int getPointerId(NativeEvent e) /*-{ return e.pointerId; }-*/; private static native final int getWidth(NativeEvent e) /*-{ return e.width; }-*/; private static native final int getHeight(NativeEvent e) /*-{ return e.height; }-*/; private static native final double getPressure(NativeEvent e) /*-{ return e.pressure; }-*/; private static native final double getTiltX(NativeEvent e) /*-{ return e.tiltX; }-*/; private static native final double getTiltY(NativeEvent e) /*-{ return e.tiltY; }-*/; private static native final String getPointerType(NativeEvent e) /*-{ var pointerType = e.pointerType; if (typeof pointerType === "number") { pointerType = [ , , "touch", "pen", "mouse" ][pointerType]; } return pointerType || ""; }-*/; private static native final boolean isPrimary(NativeEvent e) /*-{ return e.isPrimary; }-*/; }