Azmyth.Editor.Grid.Grid_MouseMove C# (CSharp) Method

Grid_MouseMove() private method

private Grid_MouseMove ( object sender, MouseEventArgs e ) : void
sender object
e MouseEventArgs
return void
        private void Grid_MouseMove(object sender, MouseEventArgs e)
        {
            Point p = e.Location;

                if (m_dragging)
                {

                    m_deltaX = p.X - m_lastMousePosition.X;
                    m_deltaY = p.Y - m_lastMousePosition.Y;

                    m_offsetX += m_deltaX;
                    m_offsetY += m_deltaY;

                    selection.X += m_deltaX;
                    selection.Y += m_deltaY;

                    // I changed this from ceiling to Floor.  It made more sense to me to have this represent the # of
                    // whole cells offset from the viewport and not to include a partial cell in this.  It shouldn't be too
                    // hard to flip this in the other direction, if you wanted tho.
                    m_cellOffsetX = m_offsetX / m_cellSize;
                    m_cellOffsetY = (int)System.Math.Floor((double)m_offsetY / (double)m_cellSize);

                    m_lastMousePosition = (e.Location);

                    Invalidate();
                }

                if (m_selecting && m_multiSelect)
                {
                    // TODO: Improved pointer tracking

                    m_selectDeltaX = p.X - m_lastSelectMousePosition.X;
                    m_selectDeltaY = p.Y - m_lastSelectMousePosition.Y;

                    m_selectionOffsetX += m_selectDeltaX;
                    m_selectionOffsetY += m_selectDeltaY;

                    selection.Height = System.Math.Abs(m_cellSize + m_selectionOffsetY + m_selectDeltaY);
                    selection.Width = System.Math.Abs(m_cellSize + m_selectionOffsetX + m_selectDeltaX);
                    selection.X = System.Math.Min(m_selectionStartX, m_selectionStartX + m_cellSize + m_selectionOffsetX + m_selectDeltaX);
                    selection.Y = System.Math.Min(m_selectionStartY, m_selectionStartY + m_cellSize + m_selectionOffsetY + m_selectDeltaY);

                    m_lastSelectMousePosition = e.Location;

                    Invalidate();
                }

                if(m_selecting && !m_multiSelect)
                {
                    m_lastMousePosition = (e.Location);
                    m_lastSelectMousePosition = e.Location;
                    m_selectDeltaX = 0;
                    m_selectionOffsetX = 0;
                    m_selectDeltaY = 0;
                    m_selectionOffsetY = 0;

                    m_selectedX = GetCellX(e.Location);
                    m_selectedY = GetCellY(e.Location);

                    var cellX = (int)System.Math.Floor((((double)m_mouseOffsetX) / ((double)m_cellSize)));
                    var cellY = (int)System.Math.Floor((((double)m_mouseOffsetY) / ((double)m_cellSize)));

                    m_selectionStartX = cellX * m_cellSize + GetPartialCellSizeX();
                    m_selectionStartY = cellY * m_cellSize + GetPartialCellSizeY();

                    selection = new Rectangle(m_selectionStartX, m_selectionStartY, m_cellSize, m_cellSize);

                    if (SelectionMade != null)
                    {
                        SelectionMade(new Rectangle(m_selectedX, m_selectedY, 1, 1));
                    }

                    Invalidate();
                }
        }