summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2013-11-21 12:18:56 -0500
committerKohei Yoshida <kohei.yoshida@collabora.com>2013-11-22 09:07:21 -0500
commitab580b750d1cac4a1286c882839d26bb289155d0 (patch)
treee370b98e2e2e2d4cef6daa0a1ef52295d250e565
parentbc795c6acfa1a143843e84f17d53f2485da6c190 (diff)
Avoid re-drawing progress bar too frequently.
Change-Id: I01dcd6d421c1f648b4cd8413e3baf50fd26d4c8f
-rw-r--r--sc/source/filter/oox/worksheethelper.cxx14
1 files changed, 8 insertions, 6 deletions
diff --git a/sc/source/filter/oox/worksheethelper.cxx b/sc/source/filter/oox/worksheethelper.cxx
index 0ff929302cd6..6d0ea85cbc40 100644
--- a/sc/source/filter/oox/worksheethelper.cxx
+++ b/sc/source/filter/oox/worksheethelper.cxx
@@ -96,12 +96,14 @@ namespace {
void lclUpdateProgressBar( const ISegmentProgressBarRef& rxProgressBar, const CellRangeAddress& rUsedArea, sal_Int32 nRow )
{
- if( rxProgressBar.get() && (rUsedArea.StartRow <= nRow) && (nRow <= rUsedArea.EndRow) )
- {
- double fPosition = static_cast< double >( nRow - rUsedArea.StartRow + 1 ) / (rUsedArea.EndRow - rUsedArea.StartRow + 1);
- if( rxProgressBar->getPosition() < fPosition )
- rxProgressBar->setPosition( fPosition );
- }
+ if (!rxProgressBar || nRow < rUsedArea.StartRow || rUsedArea.EndRow < nRow)
+ return;
+
+ double fCurPos = rxProgressBar->getPosition();
+ double fNewPos = static_cast<double>(nRow - rUsedArea.StartRow + 1.0) / (rUsedArea.EndRow - rUsedArea.StartRow + 1.0);
+ if (fCurPos < fNewPos && (fNewPos - fCurPos) > 0.3)
+ // Try not to re-draw progress bar too frequently.
+ rxProgressBar->setPosition(fNewPos);
}
void lclUpdateProgressBar( const ISegmentProgressBarRef& rxProgressBar, double fPosition )