mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Use a dark background for dark palette icon theme demo covers
This commit is contained in:
parent
bddb6fb5ed
commit
c049126bcb
@ -170,10 +170,10 @@ def default_cover_icons(cols=5):
|
|||||||
count += 1
|
count += 1
|
||||||
|
|
||||||
|
|
||||||
def create_cover(report=None, icons=(), cols=5, size=120, padding=16):
|
def create_cover(report=None, icons=(), cols=5, size=120, padding=16, darkbg=False):
|
||||||
icons = icons or tuple(default_cover_icons(cols))
|
icons = icons or tuple(default_cover_icons(cols))
|
||||||
rows = int(math.ceil(len(icons) / cols))
|
rows = int(math.ceil(len(icons) / cols))
|
||||||
with Canvas(cols * (size + padding), rows * (size + padding), bgcolor='#eee') as canvas:
|
with Canvas(cols * (size + padding), rows * (size + padding), bgcolor='#444' if darkbg else '#eee') as canvas:
|
||||||
y = -size - padding // 2
|
y = -size - padding // 2
|
||||||
x = 0
|
x = 0
|
||||||
for i, icon in enumerate(icons):
|
for i, icon in enumerate(icons):
|
||||||
@ -270,7 +270,7 @@ class ThemeCreateDialog(Dialog):
|
|||||||
return {
|
return {
|
||||||
'title': self.title.text().strip(),
|
'title': self.title.text().strip(),
|
||||||
'author': self.author.text().strip(),
|
'author': self.author.text().strip(),
|
||||||
'color_palette': self.color_palette.data(),
|
'color_palette': self.color_palette.currentData(),
|
||||||
'version': self.version.value(),
|
'version': self.version.value(),
|
||||||
'description': self.description.toPlainText().strip(),
|
'description': self.description.toPlainText().strip(),
|
||||||
'number': len(self.report.name_map) - len(self.report.extra),
|
'number': len(self.report.name_map) - len(self.report.extra),
|
||||||
@ -325,8 +325,9 @@ class Compress(QProgressDialog):
|
|||||||
|
|
||||||
update_signal = pyqtSignal(object, object)
|
update_signal = pyqtSignal(object, object)
|
||||||
|
|
||||||
def __init__(self, report, parent=None):
|
def __init__(self, report, theme_metadata, parent=None):
|
||||||
total = 2 + len(report.name_map)
|
total = 2 + len(report.name_map)
|
||||||
|
self.theme_metadata = theme_metadata
|
||||||
QProgressDialog.__init__(self, _('Losslessly optimizing images, please wait...'), _('&Abort'), 0, total, parent)
|
QProgressDialog.__init__(self, _('Losslessly optimizing images, please wait...'), _('&Abort'), 0, total, parent)
|
||||||
self.setWindowTitle(self.labelText())
|
self.setWindowTitle(self.labelText())
|
||||||
self.setWindowIcon(QIcon.ic('lt.png'))
|
self.setWindowIcon(QIcon.ic('lt.png'))
|
||||||
@ -355,15 +356,16 @@ class Compress(QProgressDialog):
|
|||||||
|
|
||||||
def run_compress(self, report):
|
def run_compress(self, report):
|
||||||
try:
|
try:
|
||||||
self.raw, self.prefix, self.icon_zip_data = create_themeball(report, self.onprogress, self.abort)
|
self.raw, self.prefix, self.icon_zip_data = create_themeball(report, self.theme_metadata, self.onprogress, self.abort)
|
||||||
except Exception:
|
except Exception:
|
||||||
import traceback
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
self.update_signal.emit(-1, traceback.format_exc())
|
self.update_signal.emit(-1, traceback.format_exc())
|
||||||
else:
|
else:
|
||||||
self.update_signal.emit(self.maximum(), '')
|
self.update_signal.emit(self.maximum(), '')
|
||||||
|
|
||||||
|
|
||||||
def create_themeball(report, progress=None, abort=None):
|
def create_themeball(report, theme_metadata, progress=None, abort=None):
|
||||||
pool = ThreadPool(processes=cpu_count())
|
pool = ThreadPool(processes=cpu_count())
|
||||||
buf = BytesIO()
|
buf = BytesIO()
|
||||||
num = count()
|
num = count()
|
||||||
@ -390,7 +392,7 @@ def create_themeball(report, progress=None, abort=None):
|
|||||||
errors = tuple(filter(None, pool.map(optimize, tuple(report.name_map))))
|
errors = tuple(filter(None, pool.map(optimize, tuple(report.name_map))))
|
||||||
pool.close(), pool.join()
|
pool.close(), pool.join()
|
||||||
if abort is not None and abort.is_set():
|
if abort is not None and abort.is_set():
|
||||||
return
|
return None, None, None
|
||||||
if errors:
|
if errors:
|
||||||
e = errors[0]
|
e = errors[0]
|
||||||
reraise(*e)
|
reraise(*e)
|
||||||
@ -405,7 +407,7 @@ def create_themeball(report, progress=None, abort=None):
|
|||||||
buf.seek(0)
|
buf.seek(0)
|
||||||
icon_zip_data = buf
|
icon_zip_data = buf
|
||||||
if abort is not None and abort.is_set():
|
if abort is not None and abort.is_set():
|
||||||
return None, None
|
return None, None, None
|
||||||
if progress is not None:
|
if progress is not None:
|
||||||
progress(next(num), _('Compressing theme file'))
|
progress(next(num), _('Compressing theme file'))
|
||||||
import lzma
|
import lzma
|
||||||
@ -413,11 +415,11 @@ def create_themeball(report, progress=None, abort=None):
|
|||||||
buf = BytesIO()
|
buf = BytesIO()
|
||||||
prefix = report.name
|
prefix = report.name
|
||||||
if abort is not None and abort.is_set():
|
if abort is not None and abort.is_set():
|
||||||
return None, None
|
return None, None, None
|
||||||
with ZipFile(buf, 'w') as zf:
|
with ZipFile(buf, 'w') as zf:
|
||||||
with lopen(os.path.join(report.path, THEME_METADATA), 'rb') as f:
|
with lopen(os.path.join(report.path, THEME_METADATA), 'rb') as f:
|
||||||
zf.writestr(prefix + '/' + THEME_METADATA, f.read())
|
zf.writestr(prefix + '/' + THEME_METADATA, f.read())
|
||||||
zf.writestr(prefix + '/' + THEME_COVER, create_cover(report))
|
zf.writestr(prefix + '/' + THEME_COVER, create_cover(report, darkbg=theme_metadata.get('color_palette') == 'dark'))
|
||||||
zf.writestr(prefix + '/' + 'icons.zip.xz', compressed, compression=ZIP_STORED)
|
zf.writestr(prefix + '/' + 'icons.zip.xz', compressed, compression=ZIP_STORED)
|
||||||
if progress is not None:
|
if progress is not None:
|
||||||
progress(next(num), _('Finished'))
|
progress(next(num), _('Finished'))
|
||||||
@ -437,7 +439,7 @@ def create_theme(folder=None, parent=None):
|
|||||||
use_in_calibre = d.use_in_calibre.isChecked()
|
use_in_calibre = d.use_in_calibre.isChecked()
|
||||||
theme = d.metadata
|
theme = d.metadata
|
||||||
d.save_metadata()
|
d.save_metadata()
|
||||||
d = Compress(d.report, parent=parent)
|
d = Compress(d.report, theme, parent=parent)
|
||||||
d.exec()
|
d.exec()
|
||||||
if d.wasCanceled() or d.raw is None:
|
if d.wasCanceled() or d.raw is None:
|
||||||
return
|
return
|
||||||
|
Loading…
x
Reference in New Issue
Block a user