Beispiel #1
0
        /// <summary>
        /// This method is called many times per second, called by the DocumentWorkspace.
        /// </summary>
        protected virtual void OnPulse()
        {
            if (this.panTracking && this.lastButton == MouseButtons.Right)
            {
                Point      position        = this.lastMouseXY;
                RectangleF visibleRect     = DocumentWorkspace.VisibleDocumentRectangleF;
                PointF     visibleCenterPt = Utility.GetRectangleCenter(visibleRect);
                PointF     delta           = new PointF(position.X - visibleCenterPt.X, position.Y - visibleCenterPt.Y);
                PointF     newScroll       = DocumentWorkspace.DocumentScrollPositionF;

                this.trackingNub.Visible = true;

                if (delta.X != 0 || delta.Y != 0)
                {
                    newScroll.X += delta.X;
                    newScroll.Y += delta.Y;

                    ++this.ignoreMouseMove; // setting DocumentScrollPosition incurs a MouseMove event. ignore it prevents 'jittering' at non-integral zoom levels (like, say, 743%)
                    UI.SuspendControlPainting(DocumentWorkspace);
                    DocumentWorkspace.DocumentScrollPositionF = newScroll;
                    this.trackingNub.Visible  = true;
                    this.trackingNub.Location = Utility.GetRectangleCenter(DocumentWorkspace.VisibleDocumentRectangleF);
                    UI.ResumeControlPainting(DocumentWorkspace);
                    DocumentWorkspace.Invalidate(true);
                    Update();
                }
            }
        }