Improve TQProgressBar repaint optimization

pull/2/head
Slávek Banko 11 years ago
parent fbc4cf8e7f
commit 5b34ad0d8e

@ -212,13 +212,11 @@ void QProgressBar::setProgress( int progress )
progress < 0 || ( ( progress > total_steps ) && total_steps ) ) progress < 0 || ( ( progress > total_steps ) && total_steps ) )
return; return;
const bool needRepaint = isVisible() && requireRepaint( progress );
progress_val = progress; progress_val = progress;
setIndicator( progress_str, progress_val, total_steps ); setIndicator( progress_str, progress_val, total_steps );
if ( needRepaint ) { if ( isVisible() && repaintRequired() ) {
repaint( FALSE ); repaint( FALSE );
d->last_painted_progress = progress; d->last_painted_progress = progress;
} }
@ -358,10 +356,9 @@ void QProgressBar::styleChange( QStyle& old )
would require a repaint of the progress bar. This allows efficient would require a repaint of the progress bar. This allows efficient
repainting. repainting.
*/ */
bool QProgressBar::requireRepaint( int newProgress ) const bool QProgressBar::repaintRequired() const
{ {
if ( newProgress == progress_val || if ( progress_val == d->last_painted_progress ) {
newProgress == d->last_painted_progress ) {
return false; return false;
} }
@ -375,7 +372,7 @@ bool QProgressBar::requireRepaint( int newProgress ) const
progressPerPixel = float( total_steps ) / float( width ); progressPerPixel = float( total_steps ) / float( width );
} }
const int delta = d->last_painted_progress - newProgress; const int delta = d->last_painted_progress - progress_val;
return QABS( delta ) >= progressPerPixel; return QABS( delta ) >= progressPerPixel;
} }

@ -96,7 +96,7 @@ protected:
virtual bool setIndicator( QString & progress_str, int progress, virtual bool setIndicator( QString & progress_str, int progress,
int totalSteps ); int totalSteps );
void styleChange( QStyle& ); void styleChange( QStyle& );
bool requireRepaint( int newProgress ) const; bool repaintRequired() const;
private: private:
int total_steps; int total_steps;

Loading…
Cancel
Save