Show More
Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
References:
File last commit:
Show/Diff file:
Action:
FNA/src/Input/Touch/TouchCollection.cs
211 lines | 3.6 KiB | text/x-csharp | CSharpLexer
211 lines | 3.6 KiB | text/x-csharp | CSharpLexer
r0 | #region License | |||
/* FNA - XNA4 Reimplementation for Desktop Platforms | ||||
* Copyright 2009-2020 Ethan Lee and the MonoGame Team | ||||
* | ||||
* Released under the Microsoft Public License. | ||||
* See LICENSE for details. | ||||
*/ | ||||
#endregion | ||||
#region Using Statements | ||||
using System; | ||||
using System.Collections; | ||||
using System.Collections.Generic; | ||||
#endregion | ||||
namespace Microsoft.Xna.Framework.Input.Touch | ||||
{ | ||||
// https://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.touch.touchcollection.aspx | ||||
public struct TouchCollection : IList<TouchLocation>, ICollection<TouchLocation>, IEnumerable<TouchLocation>, IEnumerable | ||||
{ | ||||
#region Public Properties | ||||
public int Count | ||||
{ | ||||
get | ||||
{ | ||||
return touches.Count; | ||||
} | ||||
} | ||||
public bool IsConnected | ||||
{ | ||||
get | ||||
{ | ||||
return TouchPanel.TouchDeviceExists; | ||||
} | ||||
} | ||||
public bool IsReadOnly | ||||
{ | ||||
get | ||||
{ | ||||
return true; | ||||
} | ||||
} | ||||
public TouchLocation this[int index] | ||||
{ | ||||
get | ||||
{ | ||||
return touches[index]; | ||||
} | ||||
set | ||||
{ | ||||
// This will cause a runtime exception | ||||
touches[index] = value; | ||||
} | ||||
} | ||||
#endregion | ||||
#region Private Variables | ||||
private readonly List<TouchLocation> touches; | ||||
#endregion | ||||
#region Public Constructor | ||||
public TouchCollection(TouchLocation[] touches) | ||||
{ | ||||
this.touches = new List<TouchLocation>(touches); | ||||
} | ||||
#endregion | ||||
#region Public Methods | ||||
/* Since the collection is always readonly, using any | ||||
* method that attempts to modify touches will result | ||||
* in a System.NotSupportedException at runtime. | ||||
*/ | ||||
public void Add(TouchLocation item) | ||||
{ | ||||
touches.Add(item); | ||||
} | ||||
public void Clear() | ||||
{ | ||||
touches.Clear(); | ||||
} | ||||
public bool Contains(TouchLocation item) | ||||
{ | ||||
return touches.Contains(item); | ||||
} | ||||
public void CopyTo(TouchLocation[] array, int arrayIndex) | ||||
{ | ||||
touches.CopyTo(array, arrayIndex); | ||||
} | ||||
public bool FindById(int id, out TouchLocation touchLocation) | ||||
{ | ||||
foreach (TouchLocation touch in touches) | ||||
{ | ||||
if (touch.Id == id) | ||||
{ | ||||
touchLocation = touch; | ||||
return true; | ||||
} | ||||
} | ||||
touchLocation = new TouchLocation( | ||||
-1, | ||||
TouchLocationState.Invalid, | ||||
Vector2.Zero | ||||
); | ||||
return false; | ||||
} | ||||
public Enumerator GetEnumerator() | ||||
{ | ||||
return new Enumerator(this); | ||||
} | ||||
public int IndexOf(TouchLocation item) | ||||
{ | ||||
return touches.IndexOf(item); | ||||
} | ||||
public void Insert(int index, TouchLocation item) | ||||
{ | ||||
touches.Insert(index, item); | ||||
} | ||||
public bool Remove(TouchLocation item) | ||||
{ | ||||
return touches.Remove(item); | ||||
} | ||||
public void RemoveAt(int index) | ||||
{ | ||||
touches.RemoveAt(index); | ||||
} | ||||
#endregion | ||||
#region IEnumerator Methods | ||||
IEnumerator System.Collections.IEnumerable.GetEnumerator() | ||||
{ | ||||
return new Enumerator(this); | ||||
} | ||||
IEnumerator<TouchLocation> System.Collections.Generic.IEnumerable<TouchLocation>.GetEnumerator() | ||||
{ | ||||
return new Enumerator(this); | ||||
} | ||||
#endregion | ||||
#region Enumerator | ||||
// https://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.touch.touchcollection.enumerator.aspx | ||||
public struct Enumerator : IEnumerator<TouchLocation>, IDisposable, IEnumerator | ||||
{ | ||||
private TouchCollection collection; | ||||
private int position; | ||||
internal Enumerator(TouchCollection collection) | ||||
{ | ||||
this.collection = collection; | ||||
position = -1; | ||||
} | ||||
public TouchLocation Current | ||||
{ | ||||
get | ||||
{ | ||||
return collection[position]; | ||||
} | ||||
} | ||||
public bool MoveNext() | ||||
{ | ||||
position += 1; | ||||
return (position < collection.Count); | ||||
} | ||||
public void Dispose() | ||||
{ | ||||
} | ||||
object IEnumerator.Current | ||||
{ | ||||
get | ||||
{ | ||||
return collection[position]; | ||||
} | ||||
} | ||||
void IEnumerator.Reset() | ||||
{ | ||||
position = -1; | ||||
} | ||||
} | ||||
#endregion | ||||
} | ||||
} | ||||