From 545443190e4f67be1e1fd3780e8ca5397ccc208d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 18 Sep 2017 11:35:29 +0530 Subject: [PATCH] Book details popup window: Show the cover size in the bottom right corner if the option to show cover size in the Book details panel is set. Fixes #1716520 [Would like to see the same cover info that is shown on the details panel to also show in the details list when using the menu to look.](https://bugs.launchpad.net/calibre/+bug/1716520) --- src/calibre/gui2/dialogs/book_info.py | 3 ++- src/calibre/gui2/widgets.py | 39 +++++++++++++++++++-------- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/calibre/gui2/dialogs/book_info.py b/src/calibre/gui2/dialogs/book_info.py index be597741e8..324f75bfe7 100644 --- a/src/calibre/gui2/dialogs/book_info.py +++ b/src/calibre/gui2/dialogs/book_info.py @@ -46,7 +46,7 @@ class BookInfo(QDialog): self.setLayout(l) l.addWidget(self.splitter) - self.cover = CoverView(self) + self.cover = CoverView(self, show_size=gprefs['bd_overlay_cover_size']) self.cover.resizeEvent = self.cover_view_resized self.cover.cover_changed.connect(self.cover_changed) self.cover_pixmap = None @@ -188,6 +188,7 @@ class BookInfo(QDialog): sz = self.cover_pixmap.size() tt += _('Cover size: %(width)d x %(height)d pixels')%dict(width=sz.width(), height=sz.height()) self.cover.setToolTip(tt) + self.cover.pixmap_size = sz.width(), sz.height() def refresh(self, row, mi=None): if isinstance(row, QModelIndex): diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index 9892157672..8824c46b24 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -295,7 +295,22 @@ class ImageDropMixin(object): # {{{ # }}} -class ImageView(QWidget, ImageDropMixin): # {{{ +# ImageView {{{ + +def draw_size(p, rect, w, h): + rect = rect.adjusted(0, 0, 0, -4) + f = p.font() + f.setBold(True) + p.setFont(f) + sz = u'\u00a0%d x %d\u00a0'%(w, h) + flags = Qt.AlignBottom|Qt.AlignRight|Qt.TextSingleLine + szrect = p.boundingRect(rect, flags, sz) + p.fillRect(szrect.adjusted(0, 0, 0, 4), QColor(0, 0, 0, 200)) + p.setPen(QPen(QColor(255,255,255))) + p.drawText(rect, flags, sz) + + +class ImageView(QWidget, ImageDropMixin): BORDER_WIDTH = 1 cover_changed = pyqtSignal(object) @@ -364,16 +379,7 @@ class ImageView(QWidget, ImageDropMixin): # {{{ p.setPen(pen) p.drawRect(target) if self.show_size: - sztgt = target.adjusted(0, 0, 0, -4) - f = p.font() - f.setBold(True) - p.setFont(f) - sz = u'\u00a0%d x %d\u00a0'%(ow, oh) - flags = Qt.AlignBottom|Qt.AlignRight|Qt.TextSingleLine - szrect = p.boundingRect(sztgt, flags, sz) - p.fillRect(szrect.adjusted(0, 0, 0, 4), QColor(0, 0, 0, 200)) - p.setPen(QPen(QColor(255,255,255))) - p.drawText(sztgt, flags, sz) + draw_size(p, target, ow, oh) p.end() # }}} @@ -383,8 +389,12 @@ class CoverView(QGraphicsView, ImageDropMixin): # {{{ cover_changed = pyqtSignal(object) def __init__(self, *args, **kwargs): + self.show_size = kwargs.pop('show_size', False) QGraphicsView.__init__(self, *args, **kwargs) ImageDropMixin.__init__(self) + self.pixmap_size = 0, 0 + if self.show_size: + self.setViewportUpdateMode(self.FullViewportUpdate) def get_pixmap(self): for item in self.scene.items(): @@ -396,6 +406,13 @@ class CoverView(QGraphicsView, ImageDropMixin): # {{{ self.scene.addPixmap(pmap) self.setScene(self.scene) + def paintEvent(self, ev): + QGraphicsView.paintEvent(self, ev) + if self.show_size: + v = self.viewport() + p = QPainter(v) + draw_size(p, v.rect(), *self.pixmap_size) + # }}} # BasicList {{{