public static ETransformType CheckTransformRect(Rectangle r, Point point) { Microsoft.Xna.Framework.Point p = new Microsoft.Xna.Framework.Point(point.X, point.Y); Rectangle rectTL = GetTransformRect(r, ETransformType.TopLeft); if (rectTL.Contains(p)) return ETransformType.TopLeft; Rectangle rectTR = GetTransformRect(r, ETransformType.TopRight); if (rectTR.Contains(p)) return ETransformType.TopRight; Rectangle rectBL = GetTransformRect(r, ETransformType.BottomLeft); if (rectBL.Contains(p)) return ETransformType.BottomLeft; Rectangle rectBR = GetTransformRect(r, ETransformType.BottomRight); if (rectBR.Contains(p)) return ETransformType.BottomRight; Rectangle rectT = GetTransformRect(r, ETransformType.Top); if (rectT.Contains(p)) return ETransformType.Top; Rectangle rectB = GetTransformRect(r, ETransformType.Bottom); if (rectB.Contains(p)) return ETransformType.Bottom; Rectangle rectL = GetTransformRect(r, ETransformType.Left); if (rectL.Contains(p)) return ETransformType.Left; Rectangle rectR = GetTransformRect(r, ETransformType.Right); if (rectR.Contains(p)) return ETransformType.Right; Rectangle rectM = GetTransformRect(r, ETransformType.Middle); if (rectM.Contains(p)) return ETransformType.Middle; Rectangle rectC = GetTransformRect(r, ETransformType.Center); if (rectC.Contains(p)) return ETransformType.Center; return ETransformType.None; }
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]; } }