private void StartResizing(SelectionArea area, SelectionArea.ResizeSide side)
        {
            _currentEditMode = EditMode.RESIZING;

            _activeResizeArea                  = area;
            _activeResizeAreaSide              = side;
            _activeResizeAreaXbeforeStart      = area.OffsetX;
            _activeResizeAreaYbeforeStart      = area.OffsetY;
            _activeResizeAreaWidthbeforeStart  = area.AreaWidth;
            _activeResizeAreaHeightbeforeStart = area.AreaHeight;

            switch (side)
            {
            case SelectionArea.ResizeSide.LEFT:
                drawCanvas.Cursor = Cursors.SizeWE;
                break;

            case SelectionArea.ResizeSide.TOP:
                drawCanvas.Cursor = Cursors.SizeNS;
                break;

            case SelectionArea.ResizeSide.RIGHT:
                drawCanvas.Cursor = Cursors.SizeWE;
                break;

            case SelectionArea.ResizeSide.BOTTOM:
                drawCanvas.Cursor = Cursors.SizeNS;
                break;
            }
        }
        private void UpdateResizeArea(Point currentMousePoint)
        {
            Point currentMousePointTransformed = _activeResizeArea.AreaCanvas.PointFromScreen(currentMousePoint);
            Point mouseDownPointTransformed    = _activeResizeArea.AreaCanvas.PointFromScreen(_mouseDownPoint);

            double deltaX = currentMousePointTransformed.X - mouseDownPointTransformed.X;
            double deltaY = currentMousePointTransformed.Y - mouseDownPointTransformed.Y;

            switch (_activeResizeAreaSide)
            {
            case SelectionArea.ResizeSide.LEFT:
                _activeResizeArea.OffsetX   = _activeResizeAreaXbeforeStart + deltaX;
                _activeResizeArea.AreaWidth = _activeResizeAreaWidthbeforeStart - deltaX;
                break;

            case SelectionArea.ResizeSide.TOP:
                _activeResizeArea.OffsetY    = _activeResizeAreaYbeforeStart + deltaY;
                _activeResizeArea.AreaHeight = _activeResizeAreaHeightbeforeStart - deltaY;
                break;

            case SelectionArea.ResizeSide.RIGHT:
                _activeResizeArea.AreaWidth = _activeResizeAreaWidthbeforeStart + deltaX;
                break;

            case SelectionArea.ResizeSide.BOTTOM:
                _activeResizeArea.AreaHeight = _activeResizeAreaHeightbeforeStart + deltaY;
                break;
            }

            if (_activeResizeArea.OffsetX > _activeResizeAreaXbeforeStart + _activeResizeAreaWidthbeforeStart)
            {
                _activeResizeAreaSide = SelectionArea.ResizeSide.RIGHT;
            }
            if (_activeResizeArea.OffsetY > _activeResizeAreaYbeforeStart + _activeResizeAreaHeightbeforeStart)
            {
                _activeResizeAreaSide = SelectionArea.ResizeSide.BOTTOM;
            }
            if (_activeResizeArea.AreaWidth < 0)
            {
                _activeResizeAreaSide = SelectionArea.ResizeSide.LEFT;
            }
            if (_activeResizeArea.AreaHeight < 0)
            {
                _activeResizeAreaSide = SelectionArea.ResizeSide.TOP;
            }
        }
        private void drawCanvas_MouseUp(object sender, MouseButtonEventArgs e)
        {
            _isMouseDown      = false;
            drawCanvas.Cursor = Cursors.Pen;

            if (_currentEditMode == EditMode.INSERTING)
            {
                _activeInsertArea = null;
            }
            else if (_currentEditMode == EditMode.RESIZING)
            {
                _activeResizeArea     = null;
                _activeResizeAreaSide = SelectionArea.ResizeSide.NONE;
                _currentEditMode      = EditMode.INSERTING;
            }
            else if (_currentEditMode == EditMode.ROTATING)
            {
                _activeRotateArea = null;
                _currentEditMode  = EditMode.INSERTING;
            }
        }