Class DoubleTapScrollGesture

java.lang.Object
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

  • Field Details

    • 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 Details

    • 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 Details