Fix handling selection in wxGrid::Render()
Temporarily reset the m_selection pointer itself instead of clearing the selection, this is much more efficient, especially for big grids, and also more correct, as the old code simply lost the original selection in non-block selection modes.
This commit is contained in:
parent
5f8e9c14ae
commit
9b820b74b2
@ -2301,17 +2301,12 @@ void wxGrid::Render( wxDC& dc,
|
||||
|
||||
// remove grid selection, don't paint selection colour
|
||||
// unless we have wxGRID_DRAW_SELECTION
|
||||
// block selections are the only ones catered for here
|
||||
wxGridCellCoordsArray selectedCells;
|
||||
bool hasSelection = IsSelection();
|
||||
if ( hasSelection && !( style & wxGRID_DRAW_SELECTION ) )
|
||||
wxGridSelection* selectionOrig = NULL;
|
||||
if ( m_selection && !( style & wxGRID_DRAW_SELECTION ) )
|
||||
{
|
||||
selectedCells = GetSelectionBlockTopLeft();
|
||||
// non block selections may not have a bottom right
|
||||
if ( GetSelectionBlockBottomRight().size() )
|
||||
selectedCells.Add( GetSelectionBlockBottomRight()[ 0 ] );
|
||||
|
||||
ClearSelection();
|
||||
// remove the selection temporarily, it will be restored below
|
||||
selectionOrig = m_selection;
|
||||
m_selection = NULL;
|
||||
}
|
||||
|
||||
// store user device origin
|
||||
@ -2437,12 +2432,9 @@ void wxGrid::Render( wxDC& dc,
|
||||
dc.SetDeviceOrigin( userOriginX, userOriginY );
|
||||
dc.SetUserScale( scaleUserX, scaleUserY );
|
||||
|
||||
if ( selectedCells.size() && !( style & wxGRID_DRAW_SELECTION ) )
|
||||
if ( selectionOrig )
|
||||
{
|
||||
SelectBlock( selectedCells[ 0 ].GetRow(),
|
||||
selectedCells[ 0 ].GetCol(),
|
||||
selectedCells[ selectedCells.size() -1 ].GetRow(),
|
||||
selectedCells[ selectedCells.size() -1 ].GetCol() );
|
||||
m_selection = selectionOrig;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user