/// <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(); } } }