diff --git a/src/calibre/gui2/library/alternate_views.py b/src/calibre/gui2/library/alternate_views.py index 9b16c65f93..216a298424 100644 --- a/src/calibre/gui2/library/alternate_views.py +++ b/src/calibre/gui2/library/alternate_views.py @@ -546,6 +546,10 @@ class CoverDelegate(QStyledItemDelegate): if self.emblem_size > 0: self.paint_emblems(painter, rect, emblems) orect = QRect(rect) + trect = QRect(rect) + if self.title_height != 0: + rect.setBottom(rect.bottom() - self.title_height) + trect.setTop(trect.bottom() - self.title_height + 5) if cdata is None or cdata is False: title = db.field_for('title', book_id, default_value='') authors = ' & '.join(db.field_for('authors', book_id, default_value=())) @@ -553,10 +557,9 @@ class CoverDelegate(QStyledItemDelegate): painter.drawText(rect, Qt.AlignCenter|Qt.TextWordWrap, '%s\n\n%s' % (title, authors)) if cdata is False: self.render_queue.put(book_id) - else: if self.title_height != 0: - trect = QRect(rect) - rect.setBottom(rect.bottom() - self.title_height) + self.paint_title(painter, trect, db, book_id) + else: if self.animating is not None and self.animating.row() == index.row(): cdata = cdata.scaled(cdata.size() * self._animated_size) dpr = cdata.devicePixelRatio() @@ -567,16 +570,7 @@ class CoverDelegate(QStyledItemDelegate): rect.adjust(dx, dy, -dx, 0) painter.drawPixmap(rect, cdata) if self.title_height != 0: - rect = trect - rect.setTop(rect.bottom() - self.title_height + 5) - painter.setRenderHint(QPainter.TextAntialiasing, True) - title, is_stars = self.render_field(db, book_id) - if is_stars: - painter.setFont(self.rating_font) - metrics = painter.fontMetrics() - painter.setPen(self.highlight_color) - painter.drawText(rect, Qt.AlignCenter|Qt.TextSingleLine, - metrics.elidedText(title, Qt.ElideRight, rect.width())) + self.paint_title(painter, trect, db, book_id) if self.emblem_size > 0: return # We dont draw embossed emblems as the ondevice/marked emblems are drawn in the gutter if marked: @@ -595,6 +589,16 @@ class CoverDelegate(QStyledItemDelegate): finally: painter.restore() + def paint_title(self, painter, rect, db, book_id): + painter.setRenderHint(QPainter.TextAntialiasing, True) + title, is_stars = self.render_field(db, book_id) + if is_stars: + painter.setFont(self.rating_font) + metrics = painter.fontMetrics() + painter.setPen(self.highlight_color) + painter.drawText(rect, Qt.AlignCenter|Qt.TextSingleLine, + metrics.elidedText(title, Qt.ElideRight, rect.width())) + def paint_emblems(self, painter, rect, emblems): gutter = self.emblem_size + self.MARGIN grect = QRect(rect)