private void pointerHandler(RawPointerInput data) { // Actual touch TrackingPoint p = trackingPoints.Find(t => t.Tag.ToString() == data.ID.ToString()); Point pos = window.PointToClient(data.PixelLocationRaw); if ((data.Flags & RawPointerFlags.Down) > 0) { if (p == null) { p = new TrackingPoint(new PointF(pos.X, pos.Y), data.ID); TriggerOnDown(p); } } else if (p != null) { p.Location = new PointF(pos.X, pos.Y); if ((data.Flags & RawPointerFlags.Up) > 0 || (data.Flags & RawPointerFlags.CaptureChanged) > 0) { TriggerOnUp(p); } else { TriggerOnMove(p); } } }
private void PointerHandler(RawPointerInput data) { Point posPoint = GameBase.Form.PointToClient(data.PixelLocationRaw); Microsoft.Xna.Framework.Point offset = GameBase.ViewportOffset; posPoint.X -= offset.X; posPoint.Y -= offset.Y; Vector2 pos = new Vector2(posPoint.X, posPoint.Y); if ((data.Flags & RawPointerFlags.Down) > 0 && !currentTouchButtons.Contains(data.ID)) { // No need to even attempt to press a button if 2 are already pressed. if (currentTouchButtons.Count < 2) { CurrentButton = ButtonState.Pressed; } currentTouchID = data.ID; currentTouchButtons.Add(data.ID); // We expect the touch positions to already be in window-space TouchDownPositions.Add(data.ID, pos / GameBase.WindowManager.Ratio); } if (currentTouchID == data.ID) { position = posPoint; intermediatePositionsNextFrame.Add(pos); } if ((data.Flags & RawPointerFlags.Up) > 0 || (data.Flags & RawPointerFlags.CaptureChanged) > 0) { if (currentTouchButtons.Contains(data.ID)) { if (currentTouchButtons.Count <= 2) { if (currentTouchButtons.Count == 1) { left = ButtonState.Released; right = ButtonState.Released; isLeft = true; } else { CurrentButton = ButtonState.Released; } } currentTouchButtons.Remove(data.ID); TouchDownPositions.Remove(data.ID); } currentTouchID = currentTouchButtons.Count == 0 ? -1 : currentTouchButtons[currentTouchButtons.Count - 1]; } }
public static extern bool GetPointerInfo(int pointerID, out RawPointerInput type);