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:
Kovid Goyal 2016-09-04 09:19:18 +05:30
parent 5088a023c7
commit a8f7c27e40
3 changed files with 10 additions and 5 deletions

View File

@ -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

View File

@ -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:

View File

@ -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):