lib/fusuma/action_stack.rb in fusuma-0.2.2 vs lib/fusuma/action_stack.rb in fusuma-0.2.3
- old
+ new
@@ -1,14 +1,16 @@
module Fusuma
# manage actions
class ActionStack < Array
+ ELAPSED_TIME = 0.01
+
def initialize(*args)
super(*args)
end
def gesture_info
- return unless enough_actions? && enough_time_passed?
+ return unless enough_actions?
action_type = detect_action_type
direction = detect_direction(action_type)
return if direction.nil?
@last_triggered_time = last.time
finger = detect_finger
@@ -22,36 +24,25 @@
end
alias << push
private
- def elapsed_time
- return 0 if length.zero?
- last.time - first.time
+ def detect_direction(action_type)
+ vector = generate_vector(action_type)
+ return if vector && !vector.enough?
+ vector.direction
end
- def detect_direction(action_type)
+ def generate_vector(action_type)
case action_type
when 'swipe'
- detect_swipe
+ avg_swipe
when 'pinch'
- detect_pinch
+ avg_pinch
end
end
- def detect_swipe
- swipe = avg_swipe
- return unless swipe.enough_distance?
- swipe.direction
- end
-
- def detect_pinch
- pinch = avg_pinch
- return unless pinch.enough_diameter?
- pinch.direction
- end
-
def detect_finger
last.finger
end
def avg_swipe
@@ -84,17 +75,18 @@
return false if last.class != GestureAction
last.action
end
def enough_actions?
- (length > 1) && (elapsed_time > 0.05)
+ length > 2
end
- def enough_time_passed?
- (last.time - last_triggerd_time) > 0.5
+ def enough_elapsed_time?
+ return false if length.zero?
+ (last.time - first.time) > ELAPSED_TIME
end
- def last_triggerd_time
+ def last_triggered_time
@last_triggered_time ||= 0
end
def detect_action_type
first.action =~ /GESTURE_(.*?)_/