mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix a regression in 6.0 that caused the default cover to be rendered small in some contexts
This commit is contained in:
parent
ef6c2b439f
commit
4f68d2e7c5
@ -13,10 +13,10 @@ from functools import lru_cache
|
|||||||
from qt.core import (
|
from qt.core import (
|
||||||
QApplication, QBuffer, QByteArray, QColor, QDateTime, QDesktopServices, QDialog,
|
QApplication, QBuffer, QByteArray, QColor, QDateTime, QDesktopServices, QDialog,
|
||||||
QDialogButtonBox, QEvent, QFile, QFileDialog, QFileIconProvider, QFileInfo,
|
QDialogButtonBox, QEvent, QFile, QFileDialog, QFileIconProvider, QFileInfo,
|
||||||
QFont, QFontDatabase, QFontInfo, QFontMetrics, QGuiApplication, QIcon, QIODevice,
|
QFont, QFontDatabase, QFontInfo, QFontMetrics, QGuiApplication, QIcon,
|
||||||
QLocale, QNetworkProxyFactory, QObject, QPalette, QResource, QSettings,
|
QImageReader, QImageWriter, QIODevice, QLocale, QNetworkProxyFactory, QObject,
|
||||||
QSocketNotifier, QStringListModel, Qt, QThread, QTimer, QTranslator,
|
QPalette, QResource, QSettings, QSocketNotifier, QStringListModel, Qt, QThread,
|
||||||
QUrl, pyqtSignal, pyqtSlot
|
QTimer, QTranslator, QUrl, pyqtSignal, pyqtSlot
|
||||||
)
|
)
|
||||||
from threading import Lock, RLock
|
from threading import Lock, RLock
|
||||||
|
|
||||||
@ -201,7 +201,6 @@ class IconResourceManager:
|
|||||||
ans = self(name)
|
ans = self(name)
|
||||||
ba = QByteArray()
|
ba = QByteArray()
|
||||||
if ans.availableSizes():
|
if ans.availableSizes():
|
||||||
from qt.core import QImageWriter
|
|
||||||
pmap = ans.pixmap(ans.availableSizes()[0])
|
pmap = ans.pixmap(ans.availableSizes()[0])
|
||||||
buf = QBuffer(ba)
|
buf = QBuffer(ba)
|
||||||
buf.open(QIODevice.OpenModeFlag.WriteOnly)
|
buf.open(QIODevice.OpenModeFlag.WriteOnly)
|
||||||
@ -1247,13 +1246,19 @@ class Application(QApplication):
|
|||||||
load_builtin_fonts()
|
load_builtin_fonts()
|
||||||
|
|
||||||
@lru_cache(maxsize=256)
|
@lru_cache(maxsize=256)
|
||||||
def cached_qimage(self, name):
|
def cached_qimage(self, name, device_pixel_ratio=0):
|
||||||
return self.cached_qpixmap(name).toImage()
|
return self.cached_qpixmap(name, device_pixel_ratio).toImage()
|
||||||
|
|
||||||
@lru_cache(maxsize=256)
|
@lru_cache(maxsize=256)
|
||||||
def cached_qpixmap(self, name):
|
def cached_qpixmap(self, name, device_pixel_ratio=0):
|
||||||
|
# get the actual size of the image since QIcon does not tell us this for
|
||||||
|
# icons loaded from a theme
|
||||||
|
path = I(name, allow_user_override=False)
|
||||||
|
r = QImageReader(path)
|
||||||
ic = QIcon.ic(name)
|
ic = QIcon.ic(name)
|
||||||
return ic.pixmap((ic.availableSizes() or (256,))[0])
|
if not device_pixel_ratio:
|
||||||
|
device_pixel_ratio = self.devicePixelRatio()
|
||||||
|
return ic.pixmap(r.size(), device_pixel_ratio)
|
||||||
|
|
||||||
def stylesheet_for_line_edit(self, is_error=False):
|
def stylesheet_for_line_edit(self, is_error=False):
|
||||||
return 'QLineEdit { border: 2px solid %s; border-radius: 3px }' % (
|
return 'QLineEdit { border: 2px solid %s; border-radius: 3px }' % (
|
||||||
|
@ -530,7 +530,7 @@ class CoverView(QWidget): # {{{
|
|||||||
QSizePolicy.Policy.Expanding if vertical else QSizePolicy.Policy.Minimum,
|
QSizePolicy.Policy.Expanding if vertical else QSizePolicy.Policy.Minimum,
|
||||||
QSizePolicy.Policy.Expanding)
|
QSizePolicy.Policy.Expanding)
|
||||||
|
|
||||||
self.default_pixmap = QApplication.instance().cached_qpixmap('default_cover.png')
|
self.default_pixmap = QApplication.instance().cached_qpixmap('default_cover.png', device_pixel_ratio=self.devicePixelRatio())
|
||||||
self.pixmap = self.default_pixmap
|
self.pixmap = self.default_pixmap
|
||||||
self.pwidth = self.pheight = None
|
self.pwidth = self.pheight = None
|
||||||
self.data = {}
|
self.data = {}
|
||||||
|
@ -106,12 +106,12 @@ class MetadataWidget(Widget, Ui_Form):
|
|||||||
pm = QPixmap()
|
pm = QPixmap()
|
||||||
pm.loadFromData(cover)
|
pm.loadFromData(cover)
|
||||||
if not pm.isNull():
|
if not pm.isNull():
|
||||||
pm.setDevicePixelRatio(getattr(self, 'devicePixelRatioF', self.devicePixelRatio)())
|
pm.setDevicePixelRatio(self.devicePixelRatio())
|
||||||
self.cover.setPixmap(pm)
|
self.cover.setPixmap(pm)
|
||||||
self.cover_data = cover
|
self.cover_data = cover
|
||||||
self.set_cover_tooltip(pm)
|
self.set_cover_tooltip(pm)
|
||||||
else:
|
else:
|
||||||
pm = QApplication.instance().cached_qpixmap('default_cover.png')
|
pm = QApplication.instance().cached_qpixmap('default_cover.png', device_pixel_ratio=self.devicePixelRatio())
|
||||||
self.cover.setPixmap(pm)
|
self.cover.setPixmap(pm)
|
||||||
self.cover.setToolTip(_('This book has no cover'))
|
self.cover.setToolTip(_('This book has no cover'))
|
||||||
for x in ('author', 'series', 'publisher'):
|
for x in ('author', 'series', 'publisher'):
|
||||||
|
@ -268,7 +268,10 @@ class BooksModel(QAbstractTableModel): # {{{
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def default_image(self):
|
def default_image(self):
|
||||||
return QApplication.instance().cached_qimage('default_cover.png')
|
from calibre.gui2.ui import get_gui
|
||||||
|
gui = get_gui()
|
||||||
|
dpr = gui.devicePixelRatio() if gui else 0
|
||||||
|
return QApplication.instance().cached_qimage('default_cover.png', device_pixel_ratio=dpr)
|
||||||
|
|
||||||
def _clear_caches(self):
|
def _clear_caches(self):
|
||||||
self.color_cache = defaultdict(dict)
|
self.color_cache = defaultdict(dict)
|
||||||
|
@ -1285,7 +1285,7 @@ class Cover(ImageView): # {{{
|
|||||||
if cdata:
|
if cdata:
|
||||||
pm.loadFromData(cdata)
|
pm.loadFromData(cdata)
|
||||||
if pm.isNull():
|
if pm.isNull():
|
||||||
pm = QApplication.instance().cached_qpixmap('default_cover.png')
|
pm = QApplication.instance().cached_qpixmap('default_cover.png', device_pixel_ratio=self.devicePixelRatio())
|
||||||
else:
|
else:
|
||||||
self._cdata = cdata
|
self._cdata = cdata
|
||||||
pm.setDevicePixelRatio(getattr(self, 'devicePixelRatioF', self.devicePixelRatio)())
|
pm.setDevicePixelRatio(getattr(self, 'devicePixelRatioF', self.devicePixelRatio)())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user