diff options
author | Andrew de los Reyes <adlr@chromium.org> | 2012-05-11 17:03:48 -0700 |
---|---|---|
committer | Gerrit <chrome-bot@google.com> | 2012-06-06 13:40:58 -0700 |
commit | c5fb4cd7241b30b1a82cd5fde042e84c2715b6cf (patch) | |
tree | db7079fc704a92472337e605cf537185b618fffb /src/click_wiggle_filter_interpreter.cc | |
parent | 53beb84c17da79c1d66a47a09793dcfe0a148da1 (diff) | |
download | libchrome-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.cc | 16 |
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; } |