From 3665f7d07e1379fa6680934b20f3d00aafb5de96 Mon Sep 17 00:00:00 2001 From: Stefan Neis Date: Sun, 25 Jan 2004 14:26:06 +0000 Subject: [PATCH] Compute update rectangle only when needed [i.e. if (!m_grid->GetBatchCount())] [Patch 882656] git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25367 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/generic/gridsel.cpp | 100 +++++++++++++++++++++++++--------------- 1 file changed, 62 insertions(+), 38 deletions(-) diff --git a/src/generic/gridsel.cpp b/src/generic/gridsel.cpp index 17e8f0ecbc..d7487cb1df 100644 --- a/src/generic/gridsel.cpp +++ b/src/generic/gridsel.cpp @@ -259,10 +259,12 @@ void wxGridSelection::SelectRow( int row, } // Update View: - wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ), - wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) ); if ( !m_grid->GetBatchCount() ) + { + wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ), + wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r ); + } // Send Event wxGridRangeSelectEvent gridEvt( m_grid->GetId(), @@ -352,10 +354,12 @@ void wxGridSelection::SelectCol( int col, } // Update View: - wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ), - wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) ); if ( !m_grid->GetBatchCount() ) + { + wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ), + wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r ); + } // Send Event wxGridRangeSelectEvent gridEvt( m_grid->GetId(), @@ -494,10 +498,12 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, m_blockSelectionBottomRight.Add( wxGridCellCoords( bottomRow, rightCol ) ); // Update View: - wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( topRow, leftCol ), - wxGridCellCoords( bottomRow, rightCol ) ); if ( !m_grid->GetBatchCount() ) + { + wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( topRow, leftCol ), + wxGridCellCoords( bottomRow, rightCol ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r ); + } // Send Event, if not disabled. if ( sendEvent ) @@ -536,10 +542,12 @@ void wxGridSelection::SelectCell( int row, int col, m_cellSelection.Add( wxGridCellCoords( row, col ) ); // Update View: - wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, col ), - wxGridCellCoords( row, col ) ); if ( !m_grid->GetBatchCount() ) + { + wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, col ), + wxGridCellCoords( row, col ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r ); + } // Send event if (sendEvent) @@ -585,12 +593,13 @@ void wxGridSelection::ToggleCellSelection( int row, int col, wxGridCellCoords& coords = m_cellSelection[n]; if ( row == coords.GetRow() && col == coords.GetCol() ) { - wxRect r; - r = m_grid->BlockToDeviceRect( m_cellSelection[n], - m_cellSelection[n] ); + wxGridCellCoords coords = m_cellSelection[n]; m_cellSelection.RemoveAt(n); if ( !m_grid->GetBatchCount() ) + { + wxRect r = m_grid->BlockToDeviceRect( coords, coords ); ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r ); + } // Send event wxGridRangeSelectEvent gridEvt( m_grid->GetId(), @@ -647,19 +656,19 @@ void wxGridSelection::ToggleCellSelection( int row, int col, { if ( topRow < row ) SelectBlock( topRow, leftCol, row - 1, rightCol, - FALSE, FALSE, FALSE, FALSE, FALSE ); + FALSE, FALSE, FALSE, FALSE, FALSE ); if ( bottomRow > row ) SelectBlock( row + 1, leftCol, bottomRow, rightCol, - FALSE, FALSE, FALSE, FALSE, FALSE ); + FALSE, FALSE, FALSE, FALSE, FALSE ); } if ( m_selectionMode != wxGrid::wxGridSelectRows ) { if ( leftCol < col ) SelectBlock( row, leftCol, row, col - 1, - FALSE, FALSE, FALSE, FALSE, FALSE ); + FALSE, FALSE, FALSE, FALSE, FALSE ); if ( rightCol > col ) SelectBlock( row, col + 1, row, rightCol, - FALSE, FALSE, FALSE, FALSE, FALSE ); + FALSE, FALSE, FALSE, FALSE, FALSE ); } } } @@ -678,7 +687,7 @@ void wxGridSelection::ToggleCellSelection( int row, int col, { if ( col > 0 ) SelectBlock( row, 0, row, col - 1, - FALSE, FALSE, FALSE, FALSE, FALSE ); + FALSE, FALSE, FALSE, FALSE, FALSE ); if ( col < m_grid->GetNumberCols() - 1 ) SelectBlock( row, col + 1, row, m_grid->GetNumberCols() - 1, @@ -702,7 +711,7 @@ void wxGridSelection::ToggleCellSelection( int row, int col, { if ( row > 0 ) SelectBlock( 0, col, row - 1, col, - FALSE, FALSE, FALSE, FALSE, FALSE ); + FALSE, FALSE, FALSE, FALSE, FALSE ); if ( row < m_grid->GetNumberRows() - 1 ) SelectBlock( row + 1, col, m_grid->GetNumberRows() - 1, col, @@ -719,10 +728,13 @@ void wxGridSelection::ToggleCellSelection( int row, int col, { case wxGrid::wxGridSelectCells: { - r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, col ), - wxGridCellCoords( row, col ) ); if ( !m_grid->GetBatchCount() ) + { + r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, col ), + wxGridCellCoords( row, col ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r ); + } + wxGridRangeSelectEvent gridEvt( m_grid->GetId(), wxEVT_GRID_RANGE_SELECT, m_grid, @@ -736,10 +748,13 @@ void wxGridSelection::ToggleCellSelection( int row, int col, } case wxGrid::wxGridSelectRows: { - r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ), - wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) ); if ( !m_grid->GetBatchCount() ) + { + r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ), + wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r ); + } + wxGridRangeSelectEvent gridEvt( m_grid->GetId(), wxEVT_GRID_RANGE_SELECT, m_grid, @@ -753,10 +768,13 @@ void wxGridSelection::ToggleCellSelection( int row, int col, } case wxGrid::wxGridSelectColumns: { - r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ), - wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) ); if ( !m_grid->GetBatchCount() ) + { + r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ), + wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r ); + } + wxGridRangeSelectEvent gridEvt( m_grid->GetId(), wxEVT_GRID_RANGE_SELECT, m_grid, @@ -774,34 +792,38 @@ void wxGridSelection::ToggleCellSelection( int row, int col, void wxGridSelection::ClearSelection() { size_t n; + wxRect r; + wxGridCellCoords coords1, coords2; // deselect all invidiual cells and update the screen if ( m_selectionMode == wxGrid::wxGridSelectCells ) { - while( ( n = m_cellSelection.GetCount() ) > 0) { - wxRect r; n--; - r = m_grid->BlockToDeviceRect( m_cellSelection[n], - m_cellSelection[n] ); + coords1 = m_cellSelection[n]; m_cellSelection.RemoveAt(n); if ( !m_grid->GetBatchCount() ) + { + r = m_grid->BlockToDeviceRect( coords1, coords1 ); ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r ); + } } } // deselect all blocks and update the screen while( ( n = m_blockSelectionTopLeft.GetCount() ) > 0) { - wxRect r; n--; - r = m_grid->BlockToDeviceRect( m_blockSelectionTopLeft[n], - m_blockSelectionBottomRight[n] ); + coords1 = m_blockSelectionTopLeft[n]; + coords2 = m_blockSelectionBottomRight[n]; m_blockSelectionTopLeft.RemoveAt(n); m_blockSelectionBottomRight.RemoveAt(n); if ( !m_grid->GetBatchCount() ) + { + r = m_grid->BlockToDeviceRect( coords1, coords2 ); ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r ); + } } // deselect all rows and update the screen @@ -810,13 +832,14 @@ void wxGridSelection::ClearSelection() while( ( n = m_rowSelection.GetCount() ) > 0) { n--; - int & row = m_rowSelection[n]; - wxRect r; - r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ), - wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) ); + int row = m_rowSelection[n]; m_rowSelection.RemoveAt(n); if ( !m_grid->GetBatchCount() ) + { + r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ), + wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r ); + } } } @@ -826,13 +849,14 @@ void wxGridSelection::ClearSelection() while( ( n = m_colSelection.GetCount() ) > 0) { n--; - int & col = m_colSelection[n]; - wxRect r; - r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ), - wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) ); + int col = m_colSelection[n]; m_colSelection.RemoveAt(n); if ( !m_grid->GetBatchCount() ) + { + r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ), + wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r ); + } } } -- 2.45.2