internal override void UpdateInput(bool isActive) { UpdateRawInputStatistics(); intermediatePositions.Clear(); intermediatePositions.AddRange(intermediatePositionsNextFrame); intermediatePositionsNextFrame.Clear(); // The rest of the code in this method is in theory COMPLETELY unnecessary since SetPosition is going to be called in the next frame // in the base mouse handler anyways. // SetPosition however happens to not work reliably on windows 8.1 and thus this extra call increases the chances of the cursor // not doing weird jumps at window boundaries. Point pixelPosition = new Point((int)Math.Round(position.X), (int)Math.Round(position.Y)); if (isActive && !AbsoluteMovement && !MouseManager.PosInWindow(pixelPosition, 1)) { Point nativeMousePosition = MouseManager.GetNativePosition(); if (!MouseManager.PosInWindow(nativeMousePosition)) { position.X = nativeMousePosition.X; position.Y = nativeMousePosition.Y; } else { MouseManager.SetNativePosition(pixelPosition); } } }
private void HandleCalibration(TouchPoint tp) { Thread.Sleep(50); Point nativeMousePosition = MouseManager.GetNativePosition(); if (ratioBase1.X == 0) { if (nativeMousePosition.X < 200) { ratioBase1.X = tp.X; ratioBase1S.X = nativeMousePosition.X; } } else { if (nativeMousePosition.X > 600) { ratioBase2.X = tp.X; ratioBase2S.X = nativeMousePosition.X; } } if (ratioBase1.Y == 0) { if (nativeMousePosition.Y < 200) { ratioBase1.Y = tp.Y; ratioBase1S.Y = nativeMousePosition.Y; } } else { if (nativeMousePosition.Y > 600) { ratioBase2.Y = tp.Y; ratioBase2S.Y = nativeMousePosition.Y; } } if (ratioBase2.X > 0 && ratioBase2.Y > 0) { Calibrated = true; rawRatio.X = (float)(ratioBase2.X - ratioBase1.X) / (ratioBase2S.X - ratioBase1S.X); rawRatio.Y = (float)(ratioBase2.Y - ratioBase1.Y) / (ratioBase2S.Y - ratioBase1S.Y); rawOffset.X = ratioBase1.X - (ratioBase1S.X * rawRatio.X); rawOffset.Y = ratioBase1.Y - (ratioBase1S.Y * rawRatio.Y); ConfigManager.sTouchCalibration = rawRatio.X.ToString(GameBase.nfi) + ":" + rawRatio.Y.ToString(GameBase.nfi) + ":" + rawOffset.X.ToString(GameBase.nfi) + ":" + rawOffset.Y.ToString(GameBase.nfi); NotificationManager.ShowMessageMassive("Touchscreen Calibration Complete!", 2000); } }
internal override void UpdateInput(bool isActive) { Point nativeMousePosition = MouseManager.GetNativePosition(); if (!isActive) { wasActive = false; position.X += nativeMousePosition.X - previousNativeMousePosition.X; position.Y += nativeMousePosition.Y - previousNativeMousePosition.Y; previousNativeMousePosition = nativeMousePosition; return; } previousNativeMousePosition = nativeMousePosition; if (!wasActive) { if (GameBase.TotalFramesRendered == 0 || !MouseManager.PosInWindow(nativeMousePosition)) { position.X = nativeMousePosition.X; position.Y = nativeMousePosition.Y; } else { Point pixelPosition = new Point((int)Math.Round(position.X), (int)Math.Round(position.Y)); MouseManager.SetNativePosition(pixelPosition, true); nativeMousePosition = MouseManager.GetNativePosition(); } } wasActive = true; if (ConfigManager.sMouseSpeed != 1 && !MouseManager.showMouse && !ConfigManager.sRawInput) { Point pixelPosition = new Point((int)Math.Round(position.X), (int)Math.Round(position.Y)); if (MouseManager.PosInWindow(new Point(nativeMousePosition.X, nativeMousePosition.Y))) { position.X += (nativeMousePosition.X - pixelPosition.X) * (float)ConfigManager.sMouseSpeed; position.Y += (nativeMousePosition.Y - pixelPosition.Y) * (float)ConfigManager.sMouseSpeed; pixelPosition = new Point((int)Math.Round(position.X), (int)Math.Round(position.Y)); } else { position.X = nativeMousePosition.X; position.Y = nativeMousePosition.Y; //the input stream is sometimes hooked by crappy mouse drivers. so we want to equalize //both changes and non changes in sensitivity mode. pixelPosition = new Point(nativeMousePosition.X, nativeMousePosition.Y); } MouseManager.SetNativePosition(pixelPosition); nativeMousePosition = MouseManager.GetNativePosition(); // Windows might restrict our mouse cursor's movement. In this case we adjust to windows' position. // (This is relevant for cursor clamping at monitor boundaries in full-screen and clamping to the osu! window in windowed mode) if (pixelPosition.X != nativeMousePosition.X) { Debug.Print("X position disparity detected."); position.X += nativeMousePosition.X - pixelPosition.X; } if (pixelPosition.Y != nativeMousePosition.Y) { Debug.Print("Y position disparity detected."); position.Y += nativeMousePosition.Y - pixelPosition.Y; } } else { position.X = nativeMousePosition.X; position.Y = nativeMousePosition.Y; } }
internal override bool Initialize() { previousNativeMousePosition = MouseManager.GetNativePosition(); return(true); }