/// <summary>
        /// Returns true to specify the event has been handled and should not be processed any further.
        /// </summary>
        public bool OnMouseMove(MouseEventArgs e)
        {
            if (IsBuildingObject)
            {
                _pane.Focus();

                // If we refresh, the value of the incoming mouse position lags with 1 iteration.
                _pane.Invalidate();
                return(false);
            }

            bool refreshRequired = false;

            PointF drawingSpaceLocation = _pane.GraphicsWrapper.ActualSpaceToDrawingSpace(e.Location, true);

            // Handle mouse hover requests.
            foreach (DynamicCustomObject dynamicObject in _dynamicCustomObjects)
            {
                if (dynamicObject.SetMouseHover(drawingSpaceLocation))
                {
                    refreshRequired = true;
                }
            }

            // Handle drag.
            if (_selectedDynamicCustomObjects.Count > 0 && _dragLastDrawingSpaceMouseLocation.HasValue)
            {
                PointF drawingSpaceDragVector = new PointF(drawingSpaceLocation.X - _dragLastDrawingSpaceMouseLocation.Value.X, drawingSpaceLocation.Y - _dragLastDrawingSpaceMouseLocation.Value.Y);
                foreach (DynamicCustomObject dynamicObject in _selectedDynamicCustomObjects)
                {
                    dynamicObject.Drag(drawingSpaceDragVector);
                }

                _dragLastDrawingSpaceMouseLocation = drawingSpaceLocation;
                refreshRequired = true;
            }


            if (refreshRequired)
            {
                _pane.Refresh();
            }

            return(false);
        }