mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 10:14:46 -04:00
Cover Grid: Dynamically adjust the size of the in memory cover thumbnail cache based on the window size to ensure flicker free rendering even on very large screens. Fixes #1367211 [cover grid continuously redraws covers](https://bugs.launchpad.net/calibre/+bug/1367211)
This commit is contained in:
parent
1c65579a5d
commit
c274d3928e
@ -117,7 +117,7 @@ defs['cover_grid_width'] = 0
|
||||
defs['cover_grid_height'] = 0
|
||||
defs['cover_grid_spacing'] = 0
|
||||
defs['cover_grid_color'] = (80, 80, 80)
|
||||
defs['cover_grid_cache_size'] = 100
|
||||
defs['cover_grid_cache_size_multiple'] = 5
|
||||
defs['cover_grid_disk_cache_size'] = 2500
|
||||
defs['cover_grid_show_title'] = False
|
||||
defs['cover_grid_texture'] = None
|
||||
|
@ -635,6 +635,9 @@ class GridView(QListView):
|
||||
self.update_timer.setInterval(200)
|
||||
self.update_timer.timeout.connect(self.update_viewport)
|
||||
self.update_timer.setSingleShot(True)
|
||||
self.resize_timer = t = QTimer(self)
|
||||
t.setInterval(200), t.setSingleShot(True)
|
||||
t.timeout.connect(self.update_memory_cover_cache_size)
|
||||
|
||||
@property
|
||||
def first_visible_row(self):
|
||||
@ -719,14 +722,30 @@ class GridView(QListView):
|
||||
self.delegate.calculate_spacing()
|
||||
self.setSpacing(self.delegate.spacing)
|
||||
self.set_color()
|
||||
self.delegate.cover_cache.set_limit(gprefs['cover_grid_cache_size'])
|
||||
if size_changed:
|
||||
self.thumbnail_cache.set_thumbnail_size(self.delegate.cover_size.width(), self.delegate.cover_size.height())
|
||||
cs = gprefs['cover_grid_disk_cache_size']
|
||||
if (cs*(1024**2)) != self.thumbnail_cache.max_size:
|
||||
self.thumbnail_cache.set_size(cs)
|
||||
self.update_memory_cover_cache_size()
|
||||
|
||||
def resizeEvent(self, ev):
|
||||
self.resize_timer.start()
|
||||
return QListView.resizeEvent(self, ev)
|
||||
|
||||
def update_memory_cover_cache_size(self):
|
||||
try:
|
||||
sz = self.delegate.item_size
|
||||
except AttributeError:
|
||||
return
|
||||
rows, cols = self.width() // sz.width(), self.height() // sz.height()
|
||||
num = (rows + 1) * (cols + 1)
|
||||
limit = max(100, num * max(2, gprefs['cover_grid_cache_size_multiple']))
|
||||
if limit != self.delegate.cover_cache.limit:
|
||||
self.delegate.cover_cache.set_limit(limit)
|
||||
|
||||
def shown(self):
|
||||
self.update_memory_cover_cache_size()
|
||||
if self.render_thread is None:
|
||||
self.thumbnail_cache.set_database(self.gui.current_db)
|
||||
self.render_thread = Thread(target=self.render_covers)
|
||||
|
@ -146,7 +146,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
||||
r('bd_overlay_cover_size', gprefs)
|
||||
r('cover_grid_width', gprefs)
|
||||
r('cover_grid_height', gprefs)
|
||||
r('cover_grid_cache_size', gprefs)
|
||||
r('cover_grid_cache_size_multiple', gprefs)
|
||||
r('cover_grid_disk_cache_size', gprefs)
|
||||
r('cover_grid_spacing', gprefs)
|
||||
r('cover_grid_show_title', gprefs)
|
||||
|
@ -582,10 +582,10 @@ A value of zero means calculate automatically.</string>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_15">
|
||||
<property name="text">
|
||||
<string>Number of covers to cache in &memory (keep this small):</string>
|
||||
<string>Number of screenfulls of covers to cache in &memory (keep this small):</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>opt_cover_grid_cache_size</cstring>
|
||||
<cstring>opt_cover_grid_cache_size_multiple</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -604,12 +604,15 @@ A value of zero means calculate automatically.</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QSpinBox" name="opt_cover_grid_cache_size">
|
||||
<widget class="QSpinBox" name="opt_cover_grid_cache_size_multiple">
|
||||
<property name="toolTip">
|
||||
<string>The maximum number of covers to keep in memory. Increasing this will make rendering faster, at the cost of more memory usage.</string>
|
||||
<string>The maximum number of screenfulls of thumbnails to keep in memory. Increasing this will make rendering faster, at the cost of more memory usage. Note that regardless of this setting, a minimum of one hudred thumbnails are always kept in memory, to ensure flicker free rendering.</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50000</number>
|
||||
<number>100</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
Loading…
x
Reference in New Issue
Block a user