From 7152a09ee2cb16aaae7652ca849753c12630dbfd Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 25 Aug 2016 13:00:30 +0530 Subject: [PATCH] Fix high DPI rendering of cover grid covers --- src/calibre/gui2/library/alternate_views.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/calibre/gui2/library/alternate_views.py b/src/calibre/gui2/library/alternate_views.py index 3b71a0f4e5..b435a546e8 100644 --- a/src/calibre/gui2/library/alternate_views.py +++ b/src/calibre/gui2/library/alternate_views.py @@ -486,8 +486,10 @@ class CoverDelegate(QStyledItemDelegate): rect.setBottom(rect.bottom() - self.title_height) if self.animating is not None and self.animating.row() == index.row(): cdata = cdata.scaled(cdata.size() * self._animated_size) - dx = max(0, int((rect.width() - cdata.width())/2.0)) - dy = max(0, rect.height() - cdata.height()) + dpr = cdata.devicePixelRatio() + cw, ch = int(cdata.width() / dpr), int(cdata.height() / dpr) + dx = max(0, int((rect.width() - cw)/2.0)) + dy = max(0, rect.height() - ch) right_adjust = dx rect.adjust(dx, dy, -dx, 0) painter.drawPixmap(rect, cdata) @@ -625,8 +627,9 @@ class GridView(QListView): self.padding_left = 0 self.set_color() self.ignore_render_requests = Event() + dpr = self.devicePixelRatio() self.thumbnail_cache = ThumbnailCache(max_size=gprefs['cover_grid_disk_cache_size'], - thumbnail_size=(self.delegate.cover_size.width(), self.delegate.cover_size.height())) + thumbnail_size=(int(dpr * self.delegate.cover_size.width()), int(dpr * self.delegate.cover_size.height()))) self.render_thread = None self.update_item.connect(self.re_render, type=Qt.QueuedConnection) self.doubleClicked.connect(self.double_clicked) @@ -725,7 +728,8 @@ class GridView(QListView): self.setSpacing(self.delegate.spacing) self.set_color() if size_changed: - self.thumbnail_cache.set_thumbnail_size(self.delegate.cover_size.width(), self.delegate.cover_size.height()) + dpr = self.devicePixelRatio() + 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'] if (cs*(1024**2)) != self.thumbnail_cache.max_size: self.thumbnail_cache.set_size(cs) @@ -789,6 +793,8 @@ class GridView(QListView): if has_cover: p = QImage() p.loadFromData(cdata, CACHE_FORMAT if cdata is tcdata else 'JPEG') + dpr = self.devicePixelRatio() + p.setDevicePixelRatio(dpr) if p.isNull() and cdata is tcdata: # Invalid image in cache self.thumbnail_cache.invalidate((book_id,)) @@ -798,11 +804,13 @@ class GridView(QListView): if not use_cache: # cache is stale if cdata is not None: width, height = p.width(), p.height() - scaled, nwidth, nheight = fit_image(width, height, self.delegate.cover_size.width(), self.delegate.cover_size.height()) + scaled, nwidth, nheight = fit_image( + width, height, int(dpr * self.delegate.cover_size.width()), int(dpr * self.delegate.cover_size.height())) if scaled: if self.ignore_render_requests.is_set(): return p = p.scaled(nwidth, nheight, Qt.IgnoreAspectRatio, Qt.SmoothTransformation) + p.setDevicePixelRatio(dpr) cdata = p # update cache if cdata is None: