예제 #1
0
 internal void INTERNAL_Reset()
 {
     activePointers.Clear();
     numPointers           = 0;
     delayedStateChange    = GestureState.Idle;
     pointersNumState      = PointersNumState.TooFew;
     requiredGestureFailed = false;
     reset();
 }
예제 #2
0
 internal void INTERNAL_PointersUpdated(IList <Pointer> pointers)
 {
     pointersNumState = PointersNumState.InRange;
     if (minPointers > 0 && numPointers < minPointers)
     {
         pointersNumState = PointersNumState.TooFew;
     }
     if (maxPointers > 0 && pointersNumState == PointersNumState.InRange && numPointers > maxPointers)
     {
         pointersNumState = PointersNumState.TooMany;
     }
     pointersUpdated(pointers);
 }
예제 #3
0
        internal void INTERNAL_PointersCancelled(IList <Pointer> pointers)
        {
            var count = pointers.Count;
            var total = numPointers - count;

            pointersNumState = PointersNumState.InRange;

            if (minPointers <= 0)
            {
                // have no pointers
                if (total == 0)
                {
                    pointersNumState = PointersNumState.PassedMinThreshold;
                }
            }
            else
            {
                if (numPointers >= minPointers)
                {
                    // had >= MinPointers, got < MinPointers
                    if (total < minPointers)
                    {
                        pointersNumState = PointersNumState.PassedMinThreshold;
                    }
                }
                // last event we already were under MinPointers
                else
                {
                    pointersNumState = PointersNumState.TooFew;
                }
            }

            if (maxPointers > 0)
            {
                if (numPointers > maxPointers)
                {
                    if (total <= maxPointers)
                    {
                        // this event we crossed both MinPointers and MaxPointers
                        if (pointersNumState == PointersNumState.PassedMinThreshold)
                        {
                            pointersNumState = PointersNumState.PassedMinMaxThreshold;
                        }
                        // this event we crossed MaxPointers
                        else
                        {
                            pointersNumState = PointersNumState.PassedMaxThreshold;
                        }
                    }
                    // last event we already were over MaxPointers
                    else
                    {
                        pointersNumState = PointersNumState.TooMany;
                    }
                }
            }

            for (var i = 0; i < count; i++)
            {
                activePointers.Remove(pointers[i]);
            }
            numPointers = total;
            pointersCancelled(pointers);
        }
예제 #4
0
        internal void INTERNAL_PointersReleased(IList <Pointer> pointers)
        {
            var count = pointers.Count;
            var total = numPointers - count;

            pointersNumState = PointersNumState.InRange;

            if (minPointers <= 0)
            {
                // have no pointers
                if (total == 0)
                {
                    pointersNumState = PointersNumState.PassedMinThreshold;
                }
            }
            else
            {
                if (numPointers >= minPointers)
                {
                    // had >= MinPointers, got < MinPointers
                    if (total < minPointers)
                    {
                        pointersNumState = PointersNumState.PassedMinThreshold;
                    }
                }
                // last event we already were under MinPointers
                else
                {
                    pointersNumState = PointersNumState.TooFew;
                }
            }

            if (maxPointers > 0)
            {
                if (numPointers > maxPointers)
                {
                    if (total <= maxPointers)
                    {
                        // this event we crossed both MinPointers and MaxPointers
                        if (pointersNumState == PointersNumState.PassedMinThreshold)
                        {
                            pointersNumState = PointersNumState.PassedMinMaxThreshold;
                        }
                        // this event we crossed MaxPointers
                        else
                        {
                            pointersNumState = PointersNumState.PassedMaxThreshold;
                        }
                    }
                    // last event we already were over MaxPointers
                    else
                    {
                        pointersNumState = PointersNumState.TooMany;
                    }
                }
            }

            for (var i = 0; i < count; i++)
            {
                activePointers.Remove(pointers[i]);
            }
            numPointers = total;

            if (NumPointers == 0)
            {
                var lastPoint = pointers[count - 1];
                if (shouldCachePointerPosition(lastPoint))
                {
                    cachedScreenPosition         = lastPoint.Position;
                    cachedPreviousScreenPosition = lastPoint.PreviousPosition;
                }
                else
                {
                    cachedScreenPosition         = TouchManager.INVALID_POSITION;
                    cachedPreviousScreenPosition = TouchManager.INVALID_POSITION;
                }
            }

            pointersReleased(pointers);
        }
예제 #5
0
        internal void INTERNAL_PointersPressed(IList <Pointer> pointers)
        {
            var count = pointers.Count;
            var total = numPointers + count;

            pointersNumState = PointersNumState.InRange;

            if (minPointers <= 0)
            {
                // MinPointers is not set and we got our first pointers
                if (numPointers == 0)
                {
                    pointersNumState = PointersNumState.PassedMinThreshold;
                }
            }
            else
            {
                if (numPointers < minPointers)
                {
                    // had < MinPointers, got >= MinPointers
                    if (total >= minPointers)
                    {
                        pointersNumState = PointersNumState.PassedMinThreshold;
                    }
                    else
                    {
                        pointersNumState = PointersNumState.TooFew;
                    }
                }
            }

            if (maxPointers > 0)
            {
                if (numPointers <= maxPointers)
                {
                    if (total > maxPointers)
                    {
                        // this event we crossed both MinPointers and MaxPointers
                        if (pointersNumState == PointersNumState.PassedMinThreshold)
                        {
                            pointersNumState = PointersNumState.PassedMinMaxThreshold;
                        }
                        // this event we crossed MaxPointers
                        else
                        {
                            pointersNumState = PointersNumState.PassedMaxThreshold;
                        }
                    }
                }
                // last event we already were over MaxPointers
                else
                {
                    pointersNumState = PointersNumState.TooMany;
                }
            }

            if (state == GestureState.Began || state == GestureState.Changed)
            {
                for (var i = 0; i < count; i++)
                {
                    pointers[i].INTERNAL_Retain();
                }
            }

            activePointers.AddRange(pointers);
            numPointers = total;
            pointersPressed(pointers);
        }