3030PRESSED = 1
3131RELEASED = 2
3232
33+ SWIPE_DURATION_MS = 750
3334SWIPE_THRESHOLD = 35
3435SWIPE_RIGHT = 1
3536SWIPE_LEFT = 2
@@ -48,6 +49,7 @@ def __init__(self, width, height, irq_pin=None, res_pin=None):
4849 For Krux width = max_y, height = max_x
4950 """
5051 self .sample_time = 0
52+ self .pressed_time = 0
5153 self .y_regions = []
5254 self .x_regions = []
5355 self .index = 0
@@ -223,26 +225,35 @@ def current_state(self):
223225 data = self .touch_driver .current_point ()
224226 if isinstance (data , tuple ):
225227 self ._store_points (data )
226- elif data is None : # gets release then return to idle.
228+ return self .state
229+
230+ if data is None : # gets release then return to idle.
227231 if self .state == RELEASED : # On touch release
228232 self .state = IDLE
229- elif self .state == PRESSED :
233+ return self .state
234+
235+ if self .state == PRESSED :
230236 self .state = RELEASED
237+
231238 if self .release_point is not None :
232239 dx = self .release_point [0 ] - self .press_point [0 ][0 ]
233240 dy = self .release_point [1 ] - self .press_point [0 ][1 ]
234241
235242 if abs (dx ) > SWIPE_THRESHOLD or abs (dy ) > SWIPE_THRESHOLD :
236- # discards swipes with angle > 27 degrees
237- if abs (dx ) > abs (dy ) * 2 :
238- self .gesture = SWIPE_LEFT if dx < 0 else SWIPE_RIGHT
239- elif abs (dy ) > abs (dx ) * 2 :
240- self .gesture = SWIPE_UP if dy < 0 else SWIPE_DOWN
243+ # discard swipes that took more than ~1s
244+ if self .sample_time - self .pressed_time < SWIPE_DURATION_MS :
245+ # discards swipes with angle > 27 degrees
246+ if abs (dx ) > abs (dy ) * 2 :
247+ self .gesture = SWIPE_LEFT if dx < 0 else SWIPE_RIGHT
248+ elif abs (dy ) > abs (dx ) * 2 :
249+ self .gesture = SWIPE_UP if dy < 0 else SWIPE_DOWN
250+ else :
251+ self .gesture = SWIPE_NONE # undetermined diagonal swipe
241252 else :
242- # undetermined diagonal swipe
243- self .gesture = SWIPE_NONE
244- else :
245- print ("Touch error" )
253+ self . gesture = SWIPE_NONE # hold finger on screen for too long
254+ return self .state
255+
256+ print ("Touch error" )
246257 return self .state
247258
248259 def event (self , validate_position = True ):
@@ -257,6 +268,7 @@ def event(self, validate_position=True):
257268 if isinstance (self .touch_driver .irq_point , tuple ):
258269 if self .valid_position (self .touch_driver .irq_point ):
259270 self ._store_points (self .touch_driver .irq_point )
271+ self .pressed_time = time .ticks_ms ()
260272 return True
261273 return False
262274
0 commit comments