if ( !m_owner->ProcessEvent( event ) ) event.Skip();
}
-void wxGridWindow::OnEraseBackground(wxEraseEvent&)
-{ }
-
-
+// We are trapping erase background events to reduce flicker under MSW
+// and GTK but this can leave junk in the space beyond the last row and
+// col. So here we paint these spaces if they are visible.
+//
+void wxGridWindow::OnEraseBackground(wxEraseEvent& event)
+{
+ int cw, ch;
+ GetClientSize( &cw, &ch );
+
+ int right, bottom;
+ m_owner->CalcUnscrolledPosition( cw, ch, &right, &bottom );
+
+ wxRect rightRect;
+ rightRect = m_owner->CellToRect( 0, m_owner->GetNumberCols()-1 );
+
+ wxRect bottomRect;
+ bottomRect = m_owner->CellToRect( m_owner->GetNumberRows()-1, 0 );
+
+ if ( right > rightRect.GetRight() || bottom > bottomRect.GetBottom() )
+ {
+ int left, top;
+ m_owner->CalcUnscrolledPosition( 0, 0, &left, &top );
+
+ wxClientDC dc( this );
+ m_owner->PrepareDC( dc );
+ dc.SetBrush( wxBrush(m_owner->GetDefaultCellBackgroundColour(), wxSOLID) );
+ dc.SetPen( *wxTRANSPARENT_PEN );
+
+ if ( right > rightRect.GetRight() )
+ dc.DrawRectangle( rightRect.GetRight()+1, top, right - rightRect.GetRight(), ch );
+
+ if ( bottom > bottomRect.GetBottom() )
+ dc.DrawRectangle( left, bottomRect.GetBottom()+1, cw, bottom - bottomRect.GetBottom() );
+ }
+}
//////////////////////////////////////////////////////////////////////