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_height'] = 0
|
||||||
defs['cover_grid_spacing'] = 0
|
defs['cover_grid_spacing'] = 0
|
||||||
defs['cover_grid_color'] = (80, 80, 80)
|
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_disk_cache_size'] = 2500
|
||||||
defs['cover_grid_show_title'] = False
|
defs['cover_grid_show_title'] = False
|
||||||
defs['cover_grid_texture'] = None
|
defs['cover_grid_texture'] = None
|
||||||
|
@ -635,6 +635,9 @@ class GridView(QListView):
|
|||||||
self.update_timer.setInterval(200)
|
self.update_timer.setInterval(200)
|
||||||
self.update_timer.timeout.connect(self.update_viewport)
|
self.update_timer.timeout.connect(self.update_viewport)
|
||||||
self.update_timer.setSingleShot(True)
|
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
|
@property
|
||||||
def first_visible_row(self):
|
def first_visible_row(self):
|
||||||
@ -719,14 +722,30 @@ class GridView(QListView):
|
|||||||
self.delegate.calculate_spacing()
|
self.delegate.calculate_spacing()
|
||||||
self.setSpacing(self.delegate.spacing)
|
self.setSpacing(self.delegate.spacing)
|
||||||
self.set_color()
|
self.set_color()
|
||||||
self.delegate.cover_cache.set_limit(gprefs['cover_grid_cache_size'])
|
|
||||||
if size_changed:
|
if size_changed:
|
||||||
self.thumbnail_cache.set_thumbnail_size(self.delegate.cover_size.width(), self.delegate.cover_size.height())
|
self.thumbnail_cache.set_thumbnail_size(self.delegate.cover_size.width(), self.delegate.cover_size.height())
|
||||||
cs = gprefs['cover_grid_disk_cache_size']
|
cs = gprefs['cover_grid_disk_cache_size']
|
||||||
if (cs*(1024**2)) != self.thumbnail_cache.max_size:
|
if (cs*(1024**2)) != self.thumbnail_cache.max_size:
|
||||||
self.thumbnail_cache.set_size(cs)
|
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):
|
def shown(self):
|
||||||
|
self.update_memory_cover_cache_size()
|
||||||
if self.render_thread is None:
|
if self.render_thread is None:
|
||||||
self.thumbnail_cache.set_database(self.gui.current_db)
|
self.thumbnail_cache.set_database(self.gui.current_db)
|
||||||
self.render_thread = Thread(target=self.render_covers)
|
self.render_thread = Thread(target=self.render_covers)
|
||||||
|
@ -146,7 +146,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
r('bd_overlay_cover_size', gprefs)
|
r('bd_overlay_cover_size', gprefs)
|
||||||
r('cover_grid_width', gprefs)
|
r('cover_grid_width', gprefs)
|
||||||
r('cover_grid_height', 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_disk_cache_size', gprefs)
|
||||||
r('cover_grid_spacing', gprefs)
|
r('cover_grid_spacing', gprefs)
|
||||||
r('cover_grid_show_title', 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">
|
<item row="1" column="0" colspan="2">
|
||||||
<widget class="QLabel" name="label_15">
|
<widget class="QLabel" name="label_15">
|
||||||
<property name="text">
|
<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>
|
||||||
<property name="buddy">
|
<property name="buddy">
|
||||||
<cstring>opt_cover_grid_cache_size</cstring>
|
<cstring>opt_cover_grid_cache_size_multiple</cstring>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@ -604,12 +604,15 @@ A value of zero means calculate automatically.</string>
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="2">
|
<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">
|
<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>
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>50000</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user