Beispiel #1
0
        /// <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));
            }
        }