public void MouseDown(Position.VirtualMousePosition mouseMove)
        {
            m_startPt = (PointD) mouseMove.GetPhysicalPoint();
            m_virtualDelta = new List<PointD>();
            m_realDelta = new List<PointD>();

            // initial movement is nothing
            m_virtualDelta.Add(PointD.Empty);
            m_realDelta.Add(PointD.Empty);
        }
 // called very frequently
 public void MouseMoved(Position.VirtualMousePosition mouseMove)
 {
     m_virtualDelta.Add(mouseMove.GetVirtualPointD() - mouseMove.GetLastVirtualPointD());
     m_realDelta.Add(new PointD (mouseMove.GetPhysicalPoint().X - mouseMove.GetLastPhysicalPoint().X,
                                 mouseMove.GetPhysicalPoint().Y - mouseMove.GetLastPhysicalPoint().Y));
     if (m_virtualDelta.Count > MouseLogger.TAIL_LENGTH)
     {
         // BUG: sometimes mouseMoved gets fired with no movement of the mouse,
         // flooding the event queue with many points of data estimated to be
         // > 40,000 points. Remove first half of the point data when such a
         // condition may occur.
         m_virtualDelta.RemoveRange(0, MouseLogger.TAIL_LENGTH / 2);
         m_realDelta.RemoveRange(0, MouseLogger.TAIL_LENGTH / 2);
     }
 }