- // Compute two optimal update rectangles:
- // Either one rectangle is a real subset of the
- // other, or they are (almost) disjoint!
- wxRect rect[4];
- bool need_refresh[4];
- need_refresh[0] =
- need_refresh[1] =
- need_refresh[2] =
- need_refresh[3] = FALSE;
- int i;
-
- // Store intermediate values
- wxCoord oldLeft = m_selectedTopLeft.GetCol();
- wxCoord oldTop = m_selectedTopLeft.GetRow();
- wxCoord oldRight = m_selectedBottomRight.GetCol();
- wxCoord oldBottom = m_selectedBottomRight.GetRow();
-
- // Determine the outer/inner coordinates.
- if (oldLeft > leftCol)
- {
- temp = oldLeft;
- oldLeft = leftCol;
- leftCol = temp;
- }
- if (oldTop > topRow )
- {
- temp = oldTop;
- oldTop = topRow;
- topRow = temp;
- }
- if (oldRight < rightCol )
- {
- temp = oldRight;
- oldRight = rightCol;
- rightCol = temp;
- }
- if (oldBottom < bottomRow)
- {
- temp = oldBottom;
- oldBottom = bottomRow;
- bottomRow = temp;
- }
-
- // Now, either the stuff marked old is the outer
- // rectangle or we don't have a situation where one
- // is contained in the other.
-
- if ( oldLeft < leftCol )
- {
- need_refresh[0] = TRUE;
- rect[0] = BlockToDeviceRect( wxGridCellCoords ( oldTop,
- oldLeft ),
- wxGridCellCoords ( oldBottom,
- leftCol - 1 ) );
- }
-
- if ( oldTop < topRow )
- {
- need_refresh[1] = TRUE;
- rect[1] = BlockToDeviceRect( wxGridCellCoords ( oldTop,
- leftCol ),
- wxGridCellCoords ( topRow - 1,
- rightCol ) );
- }
-
- if ( oldRight > rightCol )
- {
- need_refresh[2] = TRUE;
- rect[2] = BlockToDeviceRect( wxGridCellCoords ( oldTop,
- rightCol + 1 ),
- wxGridCellCoords ( oldBottom,
- oldRight ) );
- }
-
- if ( oldBottom > bottomRow )