Cover browser: Debounce re-renders

Only re-render cover browser 100msec after resize/slide
change/reset/etc. Avoids unnecessary work, if a
dataChanged/setSlideIndex/resize occur in quick succession,
such as during program startup
This commit is contained in:
Kovid Goyal 2015-04-30 13:28:56 +05:30
parent ba1d07f73d
commit 9b131a5247

View File

@ -411,7 +411,7 @@ private:
QRect renderSlide(const SlideInfo &slide, int alpha=256, int col1=-1, int col=-1); QRect renderSlide(const SlideInfo &slide, int alpha=256, int col1=-1, int col=-1);
QRect renderCenterSlide(const SlideInfo &slide); QRect renderCenterSlide(const SlideInfo &slide);
QImage* surface(int slideIndex); QImage* surface(int slideIndex);
void triggerRender(); void triggerRender(int after_msecs);
void resetSlides(); void resetSlides();
void render_text(QPainter*, int); void render_text(QPainter*, int);
}; };
@ -447,7 +447,7 @@ PictureFlowPrivate::PictureFlowPrivate(PictureFlow* w, int queueLength_)
void PictureFlowPrivate::dataChanged() { void PictureFlowPrivate::dataChanged() {
surfaceCache.clear(); surfaceCache.clear();
resetSlides(); resetSlides();
triggerRender(); triggerRender(100);
} }
void PictureFlowPrivate::setImages(FlowImages *images) void PictureFlowPrivate::setImages(FlowImages *images)
@ -474,7 +474,7 @@ void PictureFlowPrivate::setSlideSize(QSize size)
slideWidth = size.width(); slideWidth = size.width();
slideHeight = size.height(); slideHeight = size.height();
recalc(buffer.width(), buffer.height()); recalc(buffer.width(), buffer.height());
triggerRender(); triggerRender(100);
} }
QImage PictureFlowPrivate::slide(int index) const QImage PictureFlowPrivate::slide(int index) const
@ -500,7 +500,7 @@ void PictureFlowPrivate::setCurrentSlide(int index)
target = centerIndex; target = centerIndex;
slideFrame = ((long long)centerIndex) << 16; slideFrame = ((long long)centerIndex) << 16;
resetSlides(); resetSlides();
triggerRender(); triggerRender(100);
widget->emitcurrentChanged(centerIndex); widget->emitcurrentChanged(centerIndex);
} }
@ -510,7 +510,7 @@ bool PictureFlowPrivate::showReflections() const {
void PictureFlowPrivate::setShowReflections(bool show) { void PictureFlowPrivate::setShowReflections(bool show) {
doReflections = show; doReflections = show;
triggerRender(); triggerRender(100);
} }
void PictureFlowPrivate::showPrevious() void PictureFlowPrivate::showPrevious()
@ -566,7 +566,7 @@ void PictureFlowPrivate::resize(int w, int h)
fontSize = MAX(int(h/15.), 12); fontSize = MAX(int(h/15.), 12);
recalc(w, h); recalc(w, h);
resetSlides(); resetSlides();
triggerRender(); triggerRender(100);
} }
@ -702,9 +702,9 @@ QImage* PictureFlowPrivate::surface(int slideIndex)
// Schedules rendering the slides. Call this function to avoid immediate // Schedules rendering the slides. Call this function to avoid immediate
// render and thus cause less flicker. // render and thus cause less flicker.
void PictureFlowPrivate::triggerRender() void PictureFlowPrivate::triggerRender(int after_msecs)
{ {
triggerTimer.start(); triggerTimer.start(after_msecs);
} }
void PictureFlowPrivate::render_text(QPainter *painter, int index) { void PictureFlowPrivate::render_text(QPainter *painter, int index) {
@ -1150,7 +1150,7 @@ void PictureFlowPrivate::updateAnimation()
{ {
resetSlides(); resetSlides();
animateTimer.stop(); animateTimer.stop();
triggerRender(); triggerRender(0);
step = 0; step = 0;
fade = 256; fade = 256;
return; return;
@ -1193,7 +1193,7 @@ void PictureFlowPrivate::updateAnimation()
if(target > index) if(step < 0) if(target > index) if(step < 0)
step = 1; step = 1;
triggerRender(); triggerRender(0);
} }