(much) more efficient report mode redrawing

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10967 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2001-07-11 13:35:07 +00:00
parent 4a20e7568e
commit b84839aea9

View File

@@ -2397,7 +2397,6 @@ void wxListMainWindow::RefreshAfter( size_t lineFrom )
CalcScrolledPosition( rect.x, rect.y, &rect.x, &rect.y ); CalcScrolledPosition( rect.x, rect.y, &rect.x, &rect.y );
RefreshRect( rect ); RefreshRect( rect );
} }
else // !report else // !report
{ {
@@ -2433,10 +2432,24 @@ void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
size_t visibleFrom, visibleTo; size_t visibleFrom, visibleTo;
GetVisibleLinesRange(&visibleFrom, &visibleTo); GetVisibleLinesRange(&visibleFrom, &visibleTo);
wxRect rectLine;
wxCoord xOrig, yOrig;
CalcUnscrolledPosition(0, 0, &xOrig, &yOrig);
for ( size_t line = visibleFrom; line <= visibleTo; line++ ) for ( size_t line = visibleFrom; line <= visibleTo; line++ )
{ {
rectLine = GetLineRect(line);
if ( !IsExposed(rectLine.x - xOrig, rectLine.y - yOrig,
rectLine.width, rectLine.height) )
{
// don't redraw unaffected lines to avoid flicker
continue;
}
GetLine(line)->DrawInReportMode( &dc, GetLine(line)->DrawInReportMode( &dc,
GetLineRect(line), rectLine,
GetLineHighlightRect(line), GetLineHighlightRect(line),
IsHighlighted(line) ); IsHighlighted(line) );
} }
@@ -3756,6 +3769,7 @@ void wxListMainWindow::DeleteItem( long lindex )
m_lines.RemoveAt( index ); m_lines.RemoveAt( index );
} }
m_dirty = TRUE;
RefreshAfter(index); RefreshAfter(index);
} }
@@ -3934,6 +3948,7 @@ void wxListMainWindow::InsertItem( wxListItem &item )
m_lines.Insert( line, id ); m_lines.Insert( line, id );
m_dirty = TRUE;
RefreshLines(id, GetItemCount() - 1); RefreshLines(id, GetItemCount() - 1);
} }