mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Cover grid: Check for cover size change due to screen scale change on every paint event and invalidate cache if there is a change. Fixes #1723972 [Small covers in Calibre](https://bugs.launchpad.net/calibre/+bug/1723972)
This commit is contained in:
parent
9ae7a26cb0
commit
8b75374b4b
@ -256,9 +256,13 @@ class ThumbnailCache(object):
|
|||||||
self.group_id = group_id
|
self.group_id = group_id
|
||||||
|
|
||||||
def set_thumbnail_size(self, width, height):
|
def set_thumbnail_size(self, width, height):
|
||||||
|
new_size = (width, height)
|
||||||
with self.lock:
|
with self.lock:
|
||||||
self.thumbnail_size = (width, height)
|
if new_size != self.thumbnail_size:
|
||||||
self.size_changed = True
|
self.thumbnail_size = new_size
|
||||||
|
self.size_changed = True
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def insert(self, book_id, timestamp, data):
|
def insert(self, book_id, timestamp, data):
|
||||||
if self.max_size < len(data):
|
if self.max_size < len(data):
|
||||||
|
@ -826,14 +826,17 @@ 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()
|
||||||
if size_changed:
|
self.set_thumbnail_cache_image_size()
|
||||||
dpr = self.device_pixel_ratio
|
|
||||||
self.thumbnail_cache.set_thumbnail_size(int(dpr * self.delegate.cover_size.width()), int(dpr*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()
|
self.update_memory_cover_cache_size()
|
||||||
|
|
||||||
|
def set_thumbnail_cache_image_size(self):
|
||||||
|
dpr = self.device_pixel_ratio
|
||||||
|
self.thumbnail_cache.set_thumbnail_size(
|
||||||
|
int(dpr * self.delegate.cover_size.width()), int(dpr*self.delegate.cover_size.height()))
|
||||||
|
|
||||||
def resizeEvent(self, ev):
|
def resizeEvent(self, ev):
|
||||||
self._ncols = None
|
self._ncols = None
|
||||||
self.resize_timer.start()
|
self.resize_timer.start()
|
||||||
@ -878,6 +881,9 @@ class GridView(QListView):
|
|||||||
def render_cover(self, book_id):
|
def render_cover(self, book_id):
|
||||||
if self.ignore_render_requests.is_set():
|
if self.ignore_render_requests.is_set():
|
||||||
return
|
return
|
||||||
|
dpr = self.device_pixel_ratio
|
||||||
|
page_width = int(dpr * self.delegate.cover_size.width())
|
||||||
|
page_height = int(dpr * self.delegate.cover_size.height())
|
||||||
tcdata, timestamp = self.thumbnail_cache[book_id]
|
tcdata, timestamp = self.thumbnail_cache[book_id]
|
||||||
use_cache = False
|
use_cache = False
|
||||||
if timestamp is None:
|
if timestamp is None:
|
||||||
@ -893,7 +899,6 @@ class GridView(QListView):
|
|||||||
if has_cover:
|
if has_cover:
|
||||||
p = QImage()
|
p = QImage()
|
||||||
p.loadFromData(cdata, CACHE_FORMAT if cdata is tcdata else 'JPEG')
|
p.loadFromData(cdata, CACHE_FORMAT if cdata is tcdata else 'JPEG')
|
||||||
dpr = self.device_pixel_ratio
|
|
||||||
p.setDevicePixelRatio(dpr)
|
p.setDevicePixelRatio(dpr)
|
||||||
if p.isNull() and cdata is tcdata:
|
if p.isNull() and cdata is tcdata:
|
||||||
# Invalid image in cache
|
# Invalid image in cache
|
||||||
@ -905,7 +910,7 @@ class GridView(QListView):
|
|||||||
if cdata is not None:
|
if cdata is not None:
|
||||||
width, height = p.width(), p.height()
|
width, height = p.width(), p.height()
|
||||||
scaled, nwidth, nheight = fit_image(
|
scaled, nwidth, nheight = fit_image(
|
||||||
width, height, int(dpr * self.delegate.cover_size.width()), int(dpr * self.delegate.cover_size.height()))
|
width, height, page_width, page_height)
|
||||||
if scaled:
|
if scaled:
|
||||||
if self.ignore_render_requests.is_set():
|
if self.ignore_render_requests.is_set():
|
||||||
return
|
return
|
||||||
@ -1147,4 +1152,14 @@ class GridView(QListView):
|
|||||||
if abs(dy) > 0:
|
if abs(dy) > 0:
|
||||||
b.setValue(b.value() - dy)
|
b.setValue(b.value() - dy)
|
||||||
|
|
||||||
|
def paintEvent(self, ev):
|
||||||
|
dpr = self.device_pixel_ratio
|
||||||
|
page_width = int(dpr * self.delegate.cover_size.width())
|
||||||
|
page_height = int(dpr * self.delegate.cover_size.height())
|
||||||
|
size_changed = self.thumbnail_cache.set_thumbnail_size(page_width, page_height)
|
||||||
|
if size_changed:
|
||||||
|
self.delegate.cover_cache.clear()
|
||||||
|
|
||||||
|
return super(GridView, self).paintEvent(ev)
|
||||||
|
|
||||||
# }}}
|
# }}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user