/*
* Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package javafx.scene.input;
import java.util.Collections;
import java.util.List;
import javafx.beans.NamedArg;
import javafx.event.EventTarget;
import javafx.event.EventType;
Touch event indicates a touch screen action. It contains detailed information
about each particular touch point.
Touch point represents a single touched finger and has its location, state (pressed/moved/released/stationary) and an ID unique in scope of a single gesture. For detailed reference see TouchPoint
.
For each multi-touch action a set of touch events is generated - for each touch point one. The event has type corresponds to its touch point's state. Each of the events also contain list of all the touch points. This design allows for handling complicated multi-touch actions from one place while keeping it possible to filter/consume each touch point separately. To recognize which events belong into a single set there is getEventSetId()
method.
Each touch point is - similarly to mouse dragging - delivered to a single node on which it was pressed, regardless of where it moves then. It is possible to change this behavior by using a grabbing mechanism described in TouchPoint
documentation.
Since: JavaFX 2.2
/**
* Touch event indicates a touch screen action. It contains detailed information
* about each particular touch point.
* <p>
* Touch point represents a single touched finger and has its location,
* state (pressed/moved/released/stationary) and an ID unique in scope of a
* single gesture. For detailed reference see {@link TouchPoint}.
* <p>
* For each multi-touch action a set of touch events is generated - for each
* touch point one. The event has type corresponds to its touch point's state.
* Each of the events also contain
* list of all the touch points. This design allows for handling complicated
* multi-touch actions from one place while keeping it possible to
* filter/consume each touch point separately. To recognize
* which events belong into a single set there is {@code getEventSetId()}
* method.
* <p>
* Each touch point is - similarly to mouse dragging - delivered to a single
* node on which it was pressed, regardless of where it moves then. It is
* possible to change this behavior by using a grabbing mechanism described
* in {@link TouchPoint} documentation.
*
* @since JavaFX 2.2
*/
public final class TouchEvent extends InputEvent {
private static final long serialVersionUID = 20121107L;
Common supertype for all touch event types.
/**
* Common supertype for all touch event types.
*/
public static final EventType<TouchEvent> ANY =
new EventType<TouchEvent>(InputEvent.ANY, "TOUCH");
This event occurs when the touch point is pressed (touched for the
first time).
/**
* This event occurs when the touch point is pressed (touched for the
* first time).
*/
public static final EventType<TouchEvent> TOUCH_PRESSED =
new EventType<TouchEvent>(ANY, "TOUCH_PRESSED");
This event occurs when the touch point is moved.
/**
* This event occurs when the touch point is moved.
*/
public static final EventType<TouchEvent> TOUCH_MOVED =
new EventType<TouchEvent>(ANY, "TOUCH_MOVED");
This event occurs when the touch point is released.
/**
* This event occurs when the touch point is released.
*/
public static final EventType<TouchEvent> TOUCH_RELEASED =
new EventType<TouchEvent>(ANY, "TOUCH_RELEASED");
This event occurs when the touch point is pressed and still (doesn't
move).
/**
* This event occurs when the touch point is pressed and still (doesn't
* move).
*/
public static final EventType<TouchEvent> TOUCH_STATIONARY =
new EventType<TouchEvent>(ANY, "TOUCH_STATIONARY");
Constructs new TouchEvent event.
Params: - source – the source of the event. Can be null.
- target – the target of the event. Can be null.
- eventType – The type of the event.
- touchPoint – the touch point of this event
- touchPoints – set of touch points for the multi-touch action
- eventSetId – set id of the multi-touch action
- shiftDown – true if shift modifier was pressed.
- controlDown – true if control modifier was pressed.
- altDown – true if alt modifier was pressed.
- metaDown – true if meta modifier was pressed.
Since: JavaFX 8.0
/**
* Constructs new TouchEvent event.
* @param source the source of the event. Can be null.
* @param target the target of the event. Can be null.
* @param eventType The type of the event.
* @param touchPoint the touch point of this event
* @param touchPoints set of touch points for the multi-touch action
* @param eventSetId set id of the multi-touch action
* @param shiftDown true if shift modifier was pressed.
* @param controlDown true if control modifier was pressed.
* @param altDown true if alt modifier was pressed.
* @param metaDown true if meta modifier was pressed.
* @since JavaFX 8.0
*/
public TouchEvent(@NamedArg("source") Object source, @NamedArg("target") EventTarget target, @NamedArg("eventType") EventType<TouchEvent> eventType,
@NamedArg("touchPoint") TouchPoint touchPoint, @NamedArg("touchPoints") List<TouchPoint> touchPoints, @NamedArg("eventSetId") int eventSetId,
@NamedArg("shiftDown") boolean shiftDown, @NamedArg("controlDown") boolean controlDown, @NamedArg("altDown") boolean altDown,
@NamedArg("metaDown") boolean metaDown) {
super(source, target, eventType);
this.touchPoints = touchPoints != null ? Collections.unmodifiableList(touchPoints) : null;
this.eventSetId = eventSetId;
this.shiftDown = shiftDown;
this.controlDown = controlDown;
this.altDown = altDown;
this.metaDown = metaDown;
this.touchPoint = touchPoint;
}
Constructs new TouchEvent event with null source and target.
Params: - eventType – The type of the event.
- touchPoint – the touch point of this event
- touchPoints – set of touch points for the multi-touch action
- eventSetId – set id of the multi-touch action
- shiftDown – true if shift modifier was pressed.
- controlDown – true if control modifier was pressed.
- altDown – true if alt modifier was pressed.
- metaDown – true if meta modifier was pressed.
Since: JavaFX 8.0
/**
* Constructs new TouchEvent event with null source and target.
* @param eventType The type of the event.
* @param touchPoint the touch point of this event
* @param touchPoints set of touch points for the multi-touch action
* @param eventSetId set id of the multi-touch action
* @param shiftDown true if shift modifier was pressed.
* @param controlDown true if control modifier was pressed.
* @param altDown true if alt modifier was pressed.
* @param metaDown true if meta modifier was pressed.
* @since JavaFX 8.0
*/
public TouchEvent(@NamedArg("eventType") EventType<TouchEvent> eventType,
@NamedArg("touchPoint") TouchPoint touchPoint, @NamedArg("touchPoints") List<TouchPoint> touchPoints, @NamedArg("eventSetId") int eventSetId,
@NamedArg("shiftDown") boolean shiftDown, @NamedArg("controlDown") boolean controlDown, @NamedArg("altDown") boolean altDown,
@NamedArg("metaDown") boolean metaDown) {
this(null, null, eventType, touchPoint, touchPoints, eventSetId,
shiftDown, controlDown, altDown, metaDown);
}
Returns number of touch points represented by this touch event set. The returned number matches the size of the touchPoints
list. Returns: The number of touch points represented by this touch event set.
/**
* Returns number of touch points represented by this touch event set.
* The returned number matches the size of the {@code touchPoints} list.
* @return The number of touch points represented by this touch event set.
*/
public int getTouchCount() {
return touchPoints.size();
}
Recomputes touch event for the given event source object.
Params: - event – Event to modify
- oldSource – Source object of the current values
- newSource – Source object to compute values for
/**
* Recomputes touch event for the given event source object.
* @param event Event to modify
* @param oldSource Source object of the current values
* @param newSource Source object to compute values for
*/
private static void recomputeToSource(TouchEvent event, Object oldSource,
Object newSource) {
for (TouchPoint tp : event.touchPoints) {
tp.recomputeToSource(oldSource, newSource);
}
}
{@inheritDoc}
Returns: the event copy with the new source and target
/**
* {@inheritDoc}
* @return the event copy with the new source and target
*/
@Override
public TouchEvent copyFor(Object newSource, EventTarget newTarget) {
TouchEvent e = (TouchEvent) super.copyFor(newSource, newTarget);
recomputeToSource(e, getSource(), newSource);
return e;
}
Creates a copy of the given event with the given fields substituted.
Params: - newSource – the new source of the copied event
- newTarget – the new target of the copied event
- type – the new eventType
Returns: the event copy with the fields substituted Since: JavaFX 8.0
/**
* Creates a copy of the given event with the given fields substituted.
* @param newSource the new source of the copied event
* @param newTarget the new target of the copied event
* @param type the new eventType
* @return the event copy with the fields substituted
* @since JavaFX 8.0
*/
public TouchEvent copyFor(Object newSource, EventTarget newTarget, EventType<TouchEvent> type) {
TouchEvent e = copyFor(newSource, newTarget);
e.eventType = type;
return e;
}
@Override
public EventType<TouchEvent> getEventType() {
return (EventType<TouchEvent>) super.getEventType();
}
private final int eventSetId;
Gets sequential number of the set of touch events representing the same
multi-touch action. For a multi-touch user action, number of touch points
may exist; each of them produces a touch event, each of those touch
events carry the same list of touch points - and all of them return the
same number from this method. Then state of some of the touch points
changes and the new set of events has new id. The id is guaranteed
to be sequential and unique in scope of one gesture (is reset when
all touch points are released).
Returns: Sequential id of event set unique in scope of a gesture
/**
* Gets sequential number of the set of touch events representing the same
* multi-touch action. For a multi-touch user action, number of touch points
* may exist; each of them produces a touch event, each of those touch
* events carry the same list of touch points - and all of them return the
* same number from this method. Then state of some of the touch points
* changes and the new set of events has new id. The id is guaranteed
* to be sequential and unique in scope of one gesture (is reset when
* all touch points are released).
*
* @return Sequential id of event set unique in scope of a gesture
*/
public final int getEventSetId() {
return eventSetId;
}
Whether or not the Shift modifier is down on this event.
/**
* Whether or not the Shift modifier is down on this event.
*/
private final boolean shiftDown;
Whether or not the Shift modifier is down on this event.
Returns: true if the Shift modifier is down on this event
/**
* Whether or not the Shift modifier is down on this event.
* @return true if the Shift modifier is down on this event
*/
public final boolean isShiftDown() {
return shiftDown;
}
Whether or not the Control modifier is down on this event.
/**
* Whether or not the Control modifier is down on this event.
*/
private final boolean controlDown;
Whether or not the Control modifier is down on this event.
Returns: true if the Control modifier is down on this event
/**
* Whether or not the Control modifier is down on this event.
* @return true if the Control modifier is down on this event
*/
public final boolean isControlDown() {
return controlDown;
}
Whether or not the Alt modifier is down on this event.
/**
* Whether or not the Alt modifier is down on this event.
*/
private final boolean altDown;
Whether or not the Alt modifier is down on this event.
Returns: true if the Alt modifier is down on this event
/**
* Whether or not the Alt modifier is down on this event.
* @return true if the Alt modifier is down on this event
*/
public final boolean isAltDown() {
return altDown;
}
Whether or not the Meta modifier is down on this event.
/**
* Whether or not the Meta modifier is down on this event.
*/
private final boolean metaDown;
Whether or not the Meta modifier is down on this event.
Returns: true if the Meta modifier is down on this event
/**
* Whether or not the Meta modifier is down on this event.
* @return true if the Meta modifier is down on this event
*/
public final boolean isMetaDown() {
return metaDown;
}
private final TouchPoint touchPoint;
Gets the touch point of this event.
Returns: Touch point of this event
/**
* Gets the touch point of this event.
* @return Touch point of this event
*/
public TouchPoint getTouchPoint() {
return touchPoint;
}
private final List<TouchPoint> touchPoints;
Gets all the touch points represented by this set of touch events, including the touch point of this event. The list is unmodifiable and is sorted by their IDs, which means it is also sorted by the time they were pressed. To distinguish between touch points belonging to a node and unrelated touch points, TouchPoint's belongsTo
method can be used. Returns: All current touch points in an unmodifiable list
/**
* Gets all the touch points represented by this set of touch events,
* including the touch point of this event. The list is unmodifiable and
* is sorted by their IDs, which means it is also sorted by the time
* they were pressed. To distinguish between touch points belonging to
* a node and unrelated touch points, TouchPoint's {@code belongsTo}
* method can be used.
* @return All current touch points in an unmodifiable list
*/
public List<TouchPoint> getTouchPoints() {
return touchPoints;
}
Returns a string representation of this TouchEvent
object. Returns: a string representation of this TouchEvent
object.
/**
* Returns a string representation of this {@code TouchEvent} object.
* @return a string representation of this {@code TouchEvent} object.
*/
@Override public String toString() {
final StringBuilder sb = new StringBuilder("TouchEvent [");
sb.append("source = ").append(getSource());
sb.append(", target = ").append(getTarget());
sb.append(", eventType = ").append(getEventType());
sb.append(", consumed = ").append(isConsumed());
sb.append(", touchCount = ").append(getTouchCount());
sb.append(", eventSetId = ").append(getEventSetId());
sb.append(", touchPoint = ").append(getTouchPoint().toString());
return sb.append("]").toString();
}
}