Class 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 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.