summaryrefslogtreecommitdiff
path: root/src/click_wiggle_filter_interpreter.cc
diff options
context:
space:
mode:
authorAndrew de los Reyes <adlr@chromium.org>2012-05-11 17:03:48 -0700
committerGerrit <chrome-bot@google.com>2012-06-06 13:40:58 -0700
commitc5fb4cd7241b30b1a82cd5fde042e84c2715b6cf (patch)
treedb7079fc704a92472337e605cf537185b618fffb /src/click_wiggle_filter_interpreter.cc
parent53beb84c17da79c1d66a47a09793dcfe0a148da1 (diff)
downloadlibchrome-gestures-c5fb4cd7241b30b1a82cd5fde042e84c2715b6cf.tar.gz
ClickWiggleFilterInterpreter: 1 finger click improvements
Historically we would suppress wobble from a single finger that was causing click down or up by adding the WARP flags to the finger for a fixed time after the click motion while there remained exactly one finger. We did this before palm detection. With this CL, we discount palms or possible palms from the finger count and we continue suppressing motion even if fingers arrive or depart during the suppression period. BUG=chromium-os:30799 TEST=unittest from log. saw failing log perform better. Change-Id: Iff5997f2f316e03cfae45f775781186d57d433e0 Reviewed-on: https://gerrit.chromium.org/gerrit/24525 Reviewed-by: Andrew de los Reyes <adlr@chromium.org> Tested-by: Andrew de los Reyes <adlr@chromium.org> Commit-Ready: Andrew de los Reyes <adlr@chromium.org>
Diffstat (limited to 'src/click_wiggle_filter_interpreter.cc')
-rw-r--r--src/click_wiggle_filter_interpreter.cc16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/click_wiggle_filter_interpreter.cc b/src/click_wiggle_filter_interpreter.cc
index a0fa946..c30f953 100644
--- a/src/click_wiggle_filter_interpreter.cc
+++ b/src/click_wiggle_filter_interpreter.cc
@@ -52,8 +52,15 @@ void ClickWiggleFilterInterpreter::UpdateClickWiggle(
const bool button_down_edge = button_down && !prev_button_down;
const bool button_up_edge = !button_down && prev_button_down;
- if (button_down_edge || button_up_edge)
+ if (button_down_edge || button_up_edge) {
button_edge_occurred_ = hwstate.timestamp;
+ size_t non_palm_count = 0;
+ for (size_t i = 0; i < hwstate.finger_cnt; i++)
+ if (!(hwstate.fingers[i].flags & (GESTURES_FINGER_PALM |
+ GESTURES_FINGER_POSSIBLE_PALM)))
+ non_palm_count++;
+ button_edge_with_one_finger_ = (non_palm_count < 2);
+ }
// Update wiggle_recs_ for each current finger
for (size_t i = 0; i < hwstate.finger_cnt; i++) {
@@ -119,9 +126,10 @@ void ClickWiggleFilterInterpreter::SetWarpFlags(HardwareState* hwstate) const {
if (button_edge_occurred_ != 0.0 &&
button_edge_occurred_ < hwstate->timestamp &&
button_edge_occurred_ + one_finger_click_wiggle_timeout_.val_ >
- hwstate->timestamp && hwstate->finger_cnt == 1) {
- hwstate->fingers[0].flags |=
- (GESTURES_FINGER_WARP_X | GESTURES_FINGER_WARP_Y);
+ hwstate->timestamp && button_edge_with_one_finger_) {
+ for (size_t i = 0; i < hwstate->finger_cnt; i++)
+ hwstate->fingers[i].flags |=
+ (GESTURES_FINGER_WARP_X | GESTURES_FINGER_WARP_Y);
// May as well return b/c already set warp on the only finger there is.
return;
}