private bool IsOverflow(MouseEventArgs e) { PointF clientPt = DocumentWorkspace.DocumentToClient(new PointF(e.X, e.Y)); return(clientPt.X < -16384 || clientPt.Y < -16384); }
/// <summary> /// This method is called when the tool is active and a keyboard key is pressed /// and released that is not representable with a regular Unicode chararacter. /// An example would be the arrow keys. /// </summary> protected virtual void OnKeyPress(Keys key) { Point dir = Point.Empty; if (key != lastKey) { lastKeyboardMove = DateTime.MinValue; } lastKey = key; switch (key) { case Keys.Left: --dir.X; break; case Keys.Right: ++dir.X; break; case Keys.Up: --dir.Y; break; case Keys.Down: ++dir.Y; break; } if (!dir.Equals(Point.Empty)) { long span = DateTime.Now.Ticks - lastKeyboardMove.Ticks; if ((span * 4) > TimeSpan.TicksPerSecond) { keyboardMoveRepeats = 0; keyboardMoveSpeed = 1; } else { keyboardMoveRepeats++; if (keyboardMoveRepeats > 15 && (keyboardMoveRepeats % 4) == 0) { keyboardMoveSpeed++; } } lastKeyboardMove = DateTime.Now; int offset = (int)(Math.Ceiling(DocumentWorkspace.ScaleFactor.Ratio) * (double)keyboardMoveSpeed); Cursor.Position = new Point(Cursor.Position.X + offset * dir.X, Cursor.Position.Y + offset * dir.Y); Point location = DocumentWorkspace.PointToScreen(Point.Truncate(DocumentWorkspace.DocumentToClient(PointF.Empty))); PointF stylusLocF = new PointF((float)Cursor.Position.X - (float)location.X, (float)Cursor.Position.Y - (float)location.Y); Point stylusLoc = new Point(Cursor.Position.X - location.X, Cursor.Position.Y - location.Y); stylusLoc = DocumentWorkspace.ScaleFactor.UnscalePoint(stylusLoc); stylusLocF = DocumentWorkspace.ScaleFactor.UnscalePoint(stylusLocF); DocumentWorkspace.PerformDocumentMouseMove(new StylusEventArgs(lastButton, 1, stylusLocF.X, stylusLocF.Y, 0, 1.0f)); DocumentWorkspace.PerformDocumentMouseMove(new MouseEventArgs(lastButton, 1, stylusLoc.X, stylusLoc.Y, 0)); } }