mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 10:44:09 -04:00
Fix drag and drop of semi-transparent images onto the book details panel giving them a black background instead of a white background
This commit is contained in:
parent
5088a023c7
commit
a8f7c27e40
@ -23,6 +23,7 @@ from calibre.ebooks.metadata.book.base import (field_metadata, Metadata)
|
|||||||
from calibre.ebooks.metadata.book.render import mi_to_html
|
from calibre.ebooks.metadata.book.render import mi_to_html
|
||||||
from calibre.gui2 import (config, open_url, pixmap_to_data, gprefs, rating_font, NO_URL_FORMATTING)
|
from calibre.gui2 import (config, open_url, pixmap_to_data, gprefs, rating_font, NO_URL_FORMATTING)
|
||||||
from calibre.utils.config import tweaks
|
from calibre.utils.config import tweaks
|
||||||
|
from calibre.utils.img import image_from_x, blend_image
|
||||||
from calibre.utils.localization import is_rtl
|
from calibre.utils.localization import is_rtl
|
||||||
|
|
||||||
_css = None
|
_css = None
|
||||||
@ -368,6 +369,8 @@ class CoverView(QWidget): # {{{
|
|||||||
pmap.loadFromData(cdata)
|
pmap.loadFromData(cdata)
|
||||||
if pmap.isNull():
|
if pmap.isNull():
|
||||||
return
|
return
|
||||||
|
if pmap.hasAlphaChannel():
|
||||||
|
pmap = QPixmap.fromImage(blend_image(image_from_x(pmap)))
|
||||||
self.pixmap = pmap
|
self.pixmap = pmap
|
||||||
self.do_layout()
|
self.do_layout()
|
||||||
self.update()
|
self.update()
|
||||||
@ -665,7 +668,7 @@ class BookDetails(QWidget): # {{{
|
|||||||
return
|
return
|
||||||
|
|
||||||
# Now look for ebook files
|
# Now look for ebook files
|
||||||
urls, filenames = dnd_get_files(md, BOOK_EXTENSIONS, allow_all_extensions=True)
|
urls, filenames = dnd_get_files(md, BOOK_EXTENSIONS, allow_all_extensions=True, filter_exts=image_extensions())
|
||||||
if not urls:
|
if not urls:
|
||||||
# Nothing found
|
# Nothing found
|
||||||
return
|
return
|
||||||
|
@ -246,7 +246,7 @@ def dnd_get_image(md, image_exts=None):
|
|||||||
|
|
||||||
return None, None
|
return None, None
|
||||||
|
|
||||||
def dnd_get_files(md, exts, allow_all_extensions=False):
|
def dnd_get_files(md, exts, allow_all_extensions=False, filter_exts=()):
|
||||||
'''
|
'''
|
||||||
Get the file in the QMimeData object md with an extension that is one of
|
Get the file in the QMimeData object md with an extension that is one of
|
||||||
the extensions in exts.
|
the extensions in exts.
|
||||||
@ -261,9 +261,9 @@ def dnd_get_files(md, exts, allow_all_extensions=False):
|
|||||||
local_files = [path_from_qurl(x) for x in urls]
|
local_files = [path_from_qurl(x) for x in urls]
|
||||||
def is_ok(path):
|
def is_ok(path):
|
||||||
ext = posixpath.splitext(path)[1][1:].lower()
|
ext = posixpath.splitext(path)[1][1:].lower()
|
||||||
if allow_all_extensions and ext:
|
if allow_all_extensions and ext and ext not in filter_exts:
|
||||||
return True
|
return True
|
||||||
return ext in exts
|
return ext in exts and ext not in filter_exts
|
||||||
local_files = [p for p in local_files if is_ok(urllib.unquote(p))]
|
local_files = [p for p in local_files if is_ok(urllib.unquote(p))]
|
||||||
local_files = [x for x in local_files if os.path.exists(x)]
|
local_files = [x for x in local_files if os.path.exists(x)]
|
||||||
if local_files:
|
if local_files:
|
||||||
|
@ -8,7 +8,7 @@ import os, subprocess, errno, shutil, tempfile, sys
|
|||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
|
||||||
from PyQt5.Qt import QImage, QByteArray, QBuffer, Qt, QImageReader, QColor, QImageWriter, QTransform
|
from PyQt5.Qt import QImage, QByteArray, QBuffer, Qt, QImageReader, QColor, QImageWriter, QTransform, QPixmap
|
||||||
from calibre import fit_image, force_unicode
|
from calibre import fit_image, force_unicode
|
||||||
from calibre.constants import iswindows, plugins, get_version
|
from calibre.constants import iswindows, plugins, get_version
|
||||||
from calibre.utils.config_base import tweaks
|
from calibre.utils.config_base import tweaks
|
||||||
@ -71,6 +71,8 @@ def image_from_x(x):
|
|||||||
return image_from_data(x)
|
return image_from_data(x)
|
||||||
if isinstance(x, bytearray):
|
if isinstance(x, bytearray):
|
||||||
return image_from_data(bytes(x))
|
return image_from_data(bytes(x))
|
||||||
|
if isinstance(x, QPixmap):
|
||||||
|
return x.toImage()
|
||||||
raise TypeError('Unknown image src type: %s' % type(x))
|
raise TypeError('Unknown image src type: %s' % type(x))
|
||||||
|
|
||||||
def image_and_format_from_data(data):
|
def image_and_format_from_data(data):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user