com.jogamp.newt.event
Class DoubleTapScrollGesture

java.lang.Object
  extended by com.jogamp.newt.event.DoubleTapScrollGesture
All Implemented Interfaces:
GestureHandler

public class DoubleTapScrollGesture
extends Object
implements GestureHandler

2 pointer scroll/rotate gesture handler processing MouseEvents while producing MouseEvent.EVENT_MOUSE_WHEEL_MOVED events if gesture is completed.

Criteria related to parameters:

    - doubleTapSlop (scaled in pixels):
       - Max 2 finger distance to start 'scroll' mode
       - Max. distance diff of current 2-pointer middle and initiated 2-pointer middle.

    - touchSlop (scaled in pixels):
       - Min. movement w/ 2 pointer within ScaledDoubleTapSlop starting 'scroll' mode

    - Avoid computation if not within gesture, especially for MOVE/DRAG

    - Only allow gesture to start with PRESS

    - Leave gesture completely with RELEASE of both/all fingers, or dist-diff exceeds doubleTapSlop

    - Tolerate temporary lift 1 of 2 pointer

     - Always validate pointer-id
 

Implementation uses a n-state to get detect gesture:

from to action
NONE 1PRESS 1-pointer-pressed
1PRESS 2PRESS_T 2-pointer-pressed within doubleTapSlope
2PRESS_T SCROLL 2-pointer dragged, dist-diff within doubleTapSlop and scrollLen >= scrollSlop
2PRESS_C SCROLL 2-pointer dragged, dist-diff within doubleTapSlop
SCROLL SCROLL 2-pointer dragged, dist-diff within doubleTapSlop
State ST_2PRESS_C merely exist to pick up gesture after one pointer has been lost temporarily.

isWithinGesture() returns gestureState >= 2PRESS_C


Nested Class Summary
 
Nested classes/interfaces inherited from interface com.jogamp.newt.event.GestureHandler
GestureHandler.GestureEvent, GestureHandler.GestureListener
 
Field Summary
static float DOUBLE_TAP_SLOP_MM
          Two pointer 'double tap' slop in millimeter, defaults to 20 mm.
static int DOUBLE_TAP_SLOP_PIXEL
          Two pointer 'double tap' slop in pixels (fallback), defaults to 104 pixels.
static float SCROLL_SLOP_MM
          Scroll threshold in millimeter, defaults to 3 mm.
static int SCROLL_SLOP_PIXEL
          Scroll threshold in pixels (fallback), defaults to 16 pixels.
 
Fields inherited from interface com.jogamp.newt.event.GestureHandler
DEBUG
 
Constructor Summary
DoubleTapScrollGesture(int scaledScrollSlop, int scaledDoubleTapSlop)
          scaledScrollSlop < scaledDoubleTapSlop
 
Method Summary
 void clear(boolean clearStarted)
          Clears state of handler, i.e.
 InputEvent getGestureEvent()
          Returns the corresponding InputEvent for the gesture as detected by a previous GestureHandler.process(InputEvent), which has not been cleared.
 float[] getScrollDistanceXY()
           
 boolean hasGesture()
          Returns true if a previous GestureHandler.process(InputEvent) command produced a gesture, which has not been cleared.
 boolean isWithinGesture()
          Returns true if within a gesture as detected by a previous GestureHandler.process(InputEvent) command, which has not been cleared.
 boolean process(InputEvent in)
          Process the given InputEvent and returns true if it produced the gesture.
 String toString()
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

SCROLL_SLOP_PIXEL

public static final int SCROLL_SLOP_PIXEL
Scroll threshold in pixels (fallback), defaults to 16 pixels. Can be overriden by integer property newt.event.scroll_slop_pixel.


DOUBLE_TAP_SLOP_PIXEL

public static final int DOUBLE_TAP_SLOP_PIXEL
Two pointer 'double tap' slop in pixels (fallback), defaults to 104 pixels. Can be overriden by integer property newt.event.double_tap_slop_pixel.


SCROLL_SLOP_MM

public static final float SCROLL_SLOP_MM
Scroll threshold in millimeter, defaults to 3 mm. Can be overriden by integer property newt.event.scroll_slop_mm.


DOUBLE_TAP_SLOP_MM

public static final float DOUBLE_TAP_SLOP_MM
Two pointer 'double tap' slop in millimeter, defaults to 20 mm. Can be overriden by integer property newt.event.double_tap_slop_mm.

Constructor Detail

DoubleTapScrollGesture

public DoubleTapScrollGesture(int scaledScrollSlop,
                              int scaledDoubleTapSlop)
scaledScrollSlop < scaledDoubleTapSlop

Parameters:
scaledScrollSlop - Distance a pointer can wander before we think the user is scrolling in pixels.
scaledDoubleTapSlop - Distance in pixels between the first touch and second touch to still be considered a double tap.
Method Detail

toString

public String toString()
Overrides:
toString in class Object

clear

public void clear(boolean clearStarted)
Description copied from interface: GestureHandler
Clears state of handler, i.e. resets all states incl. previous detected gesture.

Specified by:
clear in interface GestureHandler
Parameters:
clearStarted - if true, also clears started state, otherwise stay within gesture - if appropriate. Staying within a gesture allows fluent continuous gesture sequence, e.g. for scrolling.

isWithinGesture

public boolean isWithinGesture()
Description copied from interface: GestureHandler
Returns true if within a gesture as detected by a previous GestureHandler.process(InputEvent) command, which has not been cleared. Otherwise returns false.

Specified by:
isWithinGesture in interface GestureHandler

hasGesture

public boolean hasGesture()
Description copied from interface: GestureHandler
Returns true if a previous GestureHandler.process(InputEvent) command produced a gesture, which has not been cleared. Otherwise returns false.

Specified by:
hasGesture in interface GestureHandler

getGestureEvent

public InputEvent getGestureEvent()
Description copied from interface: GestureHandler
Returns the corresponding InputEvent for the gesture as detected by a previous GestureHandler.process(InputEvent), which has not been cleared. Otherwise returns null.

Only implemented for gestures mapping to InputEvents.

Specified by:
getGestureEvent in interface GestureHandler

getScrollDistanceXY

public final float[] getScrollDistanceXY()

process

public boolean process(InputEvent in)
Description copied from interface: GestureHandler
Process the given InputEvent and returns true if it produced the gesture. Otherwise returns false.

If a gesture was already detected previously and has not been cleared, method does not process the event and returns true.

Besides validation of the event's details, the handler may also validate the InputEvent.InputClass and/or InputEvent.InputType.

Specified by:
process in interface GestureHandler


Copyright 2010 JogAmp Community.