private void UpdateFingerDictionaries(bool isKeyDown, int id, Vector2 pos) { if (isKeyDown) { FingerIdToBeginPositions[id] = pos; FingerIdsToLastPos[id] = pos; } else { FingerIdToBeginPositions.Remove(id); FingerIdsToLastPos.Remove(id); } }
private void EndCurrentTap() { // add the gesture to the tap event list if the number of tap requirement is fulfilled if (currentNumberOfTaps == ConfigTap.RequiredNumberOfTaps) { var tapMeanPosition = ComputeMeanPosition(FingerIdToBeginPositions.Values); CurrentGestureEvents.Add(new GestureEventTap(ElapsedSinceBeginning, ConfigTap.RequiredNumberOfFingers, currentNumberOfTaps, NormalizeVector(tapMeanPosition))); } currentNumberOfTaps = 0; HasGestureStarted = false; FingerIdToBeginPositions.Clear(); }
protected override void ProcessDownEventPointer(int id, Vector2 pos) { if (!FingerIdToBeginPositions.ContainsKey(id)) { FingerIdToBeginPositions[id] = pos; } FingerIdsToLastPos[id] = pos; maxNbOfFingerTouched = Math.Max(maxNbOfFingerTouched, NbOfFingerOnScreen); isTapDown = true; if (NbOfFingerOnScreen == 1) { elapsedSinceTakeOff = TimeSpan.Zero; elapsedSinceDown = TimeSpan.Zero; HasGestureStarted = true; } if (HasGestureStarted && maxNbOfFingerTouched > ConfigTap.RequiredNumberOfFingers) { EndCurrentTap(); } if (HasGestureStarted && !HadFingerAtThatPosition(pos)) { EndCurrentTap(); maxNbOfFingerTouched = NbOfFingerOnScreen; elapsedSinceTakeOff = TimeSpan.Zero; elapsedSinceDown = TimeSpan.Zero; HasGestureStarted = true; foreach (var key in FingerIdsToLastPos.Keys) { FingerIdToBeginPositions[key] = FingerIdsToLastPos[key]; } } }
protected override void ProcessUpEventPointer(int id, Vector2 pos) { FingerIdToBeginPositions.Remove(id); HasGestureStarted = (NbOfFingerOnScreen == ConfigLongPress.RequiredNumberOfFingers); }