void VelocityTracker::ClearPointers(BitSet32 id_bits) { BitSet32 remaining_id_bits(current_pointer_id_bits_.value & ~id_bits.value); current_pointer_id_bits_ = remaining_id_bits; if (active_pointer_id_ >= 0 && id_bits.has_bit(active_pointer_id_)) { active_pointer_id_ = !remaining_id_bits.is_empty() ? remaining_id_bits.first_marked_bit() : -1; } strategy_->ClearPointers(id_bits); }
void VelocityTracker::AddMovement(const TimeTicks& event_time, BitSet32 id_bits, const PointerXY* positions) { while (id_bits.count() > MAX_POINTERS) id_bits.clear_last_marked_bit(); if ((current_pointer_id_bits_.value & id_bits.value) && (event_time - last_event_time_) >= base::TimeDelta::FromMilliseconds(kAssumePointerMoveStoppedTimeMs)) { // We have not received any movements for too long. Assume that all pointers // have stopped. strategy_->Clear(); } last_event_time_ = event_time; current_pointer_id_bits_ = id_bits; if (active_pointer_id_ < 0 || !id_bits.has_bit(active_pointer_id_)) active_pointer_id_ = id_bits.is_empty() ? -1 : id_bits.first_marked_bit(); strategy_->AddMovement(event_time, id_bits, positions); }