From 6ce79b2d96eb58690e68266499f34b48ba1d489c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 7 Aug 2013 09:44:17 +0530 Subject: [PATCH] Grid View: Do not render covers while user is using slider on scrollbar --- src/calibre/gui2/library/alternate_views.py | 33 +++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/calibre/gui2/library/alternate_views.py b/src/calibre/gui2/library/alternate_views.py index d5c7472d84..193afb5c95 100644 --- a/src/calibre/gui2/library/alternate_views.py +++ b/src/calibre/gui2/library/alternate_views.py @@ -468,6 +468,39 @@ class GridView(QListView): self.setCursor(Qt.PointingHandCursor) self.gui = parent self.context_menu = None + self.verticalScrollBar().sliderPressed.connect(self.slider_pressed) + self.verticalScrollBar().sliderReleased.connect(self.slider_released) + + @property + def first_visible_row(self): + geom = self.viewport().geometry() + for y in xrange(geom.top(), (self.spacing()*2) + geom.top(), 5): + for x in xrange(geom.left(), (self.spacing()*2) + geom.left(), 5): + ans = self.indexAt(QPoint(x, y)).row() + if ans > -1: + return ans + + @property + def last_visible_row(self): + geom = self.viewport().geometry() + for y in xrange(geom.bottom(), geom.bottom() - 2 * self.spacing(), -5): + for x in xrange(geom.left(), (self.spacing()*2) + geom.left(), 5): + ans = self.indexAt(QPoint(x, y)).row() + if ans > -1: + item_width = self.delegate.item_size.width() + 2*self.spacing() + return ans + (geom.width() // item_width) + + def update_viewport(self): + m = self.model() + for r in xrange(self.first_visible_row or 0, self.last_visible_row or (m.count() - 1)): + self.update(m.index(r, 0)) + + def slider_pressed(self): + self.ignore_render_requests.set() + + def slider_released(self): + self.ignore_render_requests.clear() + self.update_viewport() def double_clicked(self, index): d = self.delegate