/// <summary>
        /// A handler for mouse down events
        /// </summary>
        /// <param name="sender">the object that generated the event</param>
        /// <param name="e">the mouse event data</param>
        public override void MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left) return;

            foreach (var f in _canvas.SelectedFigures)
            {
                foreach (var h in f.Handles)
                {
                    if (h.Touches(e.X, e.Y))
                        _selectedHandle = h;
                }
            }
            if (_selectedHandle != null) // mouse was pressed over a handle
            {
                _selectedHandle.Selected = true;
            }
            else
            {
                _canvas.ClearSelected();
                _selectedFigure = _canvas.FindFigureAtPoint(e.Location);
                if (_selectedFigure != null) // mouse was pressed over a figure
                {
                    _selectedFigure.Selected = true;
                    _canvas.TopFigure = _selectedFigure;
                    _figureLocator = _selectedFigure.RelativeLocator(e.Location);
                }
                else // just on the canvas, so make a selection rectangle
                {
                    _startPoint = e.Location;
                    _selectionBox = new Rectangle(e.Location, Size.Empty);
                    _canvas.SelectionRectangle = _selectionBox;
                    _canvas.Repaint(Rectangle.Inflate(_selectionBox, 1, 1));
                }
            }
        }