mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 18:24:30 -04:00
Function to compile icon dir into themes resource
This commit is contained in:
parent
32d4243e1d
commit
62c8a0dcfb
@ -69,6 +69,7 @@ builtin_decorations = {
|
|||||||
'wavy': {'text-decoration-style': 'wavy', 'text-decoration-color': 'red', 'text-decoration-line': 'underline'},
|
'wavy': {'text-decoration-style': 'wavy', 'text-decoration-color': 'red', 'text-decoration-line': 'underline'},
|
||||||
'strikeout': {'text-decoration-line': 'line-through', 'text-decoration-color': 'red'},
|
'strikeout': {'text-decoration-line': 'line-through', 'text-decoration-color': 'red'},
|
||||||
}
|
}
|
||||||
|
icons_subdirs = ('devices', 'plugins', 'mimetypes')
|
||||||
|
|
||||||
|
|
||||||
_osx_ver = None
|
_osx_ver = None
|
||||||
|
@ -23,8 +23,9 @@ from threading import Lock, RLock
|
|||||||
import calibre.gui2.pyqt6_compat as pqc
|
import calibre.gui2.pyqt6_compat as pqc
|
||||||
from calibre import as_unicode, prints
|
from calibre import as_unicode, prints
|
||||||
from calibre.constants import (
|
from calibre.constants import (
|
||||||
DEBUG, __appname__ as APP_UID, __version__, config_dir, is_running_from_develop,
|
DEBUG, __appname__ as APP_UID, __version__, config_dir, icons_subdirs,
|
||||||
isbsd, isfrozen, islinux, ismacos, iswindows, isxp, plugins_loc
|
is_running_from_develop, isbsd, isfrozen, islinux, ismacos, iswindows, isxp,
|
||||||
|
plugins_loc
|
||||||
)
|
)
|
||||||
from calibre.ebooks.metadata import MetaInformation
|
from calibre.ebooks.metadata import MetaInformation
|
||||||
from calibre.gui2.linux_file_dialogs import (
|
from calibre.gui2.linux_file_dialogs import (
|
||||||
@ -47,9 +48,6 @@ except AttributeError:
|
|||||||
NO_URL_FORMATTING = getattr(QUrl, 'None')
|
NO_URL_FORMATTING = getattr(QUrl, 'None')
|
||||||
|
|
||||||
|
|
||||||
icons_subdirs = ('devices', 'plugins', 'mimetypes')
|
|
||||||
|
|
||||||
|
|
||||||
def set_icon_paths():
|
def set_icon_paths():
|
||||||
paths = []
|
paths = []
|
||||||
for main_dir in (os.path.join(config_dir, 'resources', 'images'), os.path.dirname(I(icons_subdirs[0], allow_user_override=False))):
|
for main_dir in (os.path.join(config_dir, 'resources', 'images'), os.path.dirname(I(icons_subdirs[0], allow_user_override=False))):
|
||||||
|
@ -4,8 +4,11 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import tempfile
|
||||||
|
from posixpath import normpath
|
||||||
from qt.core import QFile, QIODevice
|
from qt.core import QFile, QIODevice
|
||||||
|
|
||||||
|
from calibre.constants import icons_subdirs
|
||||||
from calibre_extensions import rcc_backend
|
from calibre_extensions import rcc_backend
|
||||||
|
|
||||||
|
|
||||||
@ -13,7 +16,7 @@ def compile_qrc(output_path, *qrc_file_paths):
|
|||||||
rcc = rcc_backend.RCCResourceLibrary()
|
rcc = rcc_backend.RCCResourceLibrary()
|
||||||
err_device = QFile()
|
err_device = QFile()
|
||||||
if not err_device.open(sys.stderr.fileno(), QIODevice.OpenModeFlag.WriteOnly | QIODevice.OpenModeFlag.Text):
|
if not err_device.open(sys.stderr.fileno(), QIODevice.OpenModeFlag.WriteOnly | QIODevice.OpenModeFlag.Text):
|
||||||
raise ValueError('Failed to open stderr for writing')
|
raise ValueError('Failed to open STDERR for writing')
|
||||||
if not qrc_file_paths:
|
if not qrc_file_paths:
|
||||||
raise TypeError('Must specify at least one .qrc file')
|
raise TypeError('Must specify at least one .qrc file')
|
||||||
rcc.setInputFiles(list(qrc_file_paths))
|
rcc.setInputFiles(list(qrc_file_paths))
|
||||||
@ -27,3 +30,59 @@ def compile_qrc(output_path, *qrc_file_paths):
|
|||||||
if not ok:
|
if not ok:
|
||||||
os.remove(output_path)
|
os.remove(output_path)
|
||||||
raise ValueError('Failed to write output')
|
raise ValueError('Failed to write output')
|
||||||
|
|
||||||
|
|
||||||
|
def index_theme(name, inherits=''):
|
||||||
|
min_sz, sz, max_sz = 16, 128, 512
|
||||||
|
lines = ['[Icon Theme]', f'Name={name}', 'Comment=Icons for calibre']
|
||||||
|
if inherits:
|
||||||
|
lines.append(f'Inherits={inherits}')
|
||||||
|
lines.append('')
|
||||||
|
subdirs = ['images'] + [f'images/{x}' for x in icons_subdirs]
|
||||||
|
for sb in subdirs:
|
||||||
|
lines += [f'[{sb}]', f'Size={sz}', f'MinSize={min_sz}', f'MaxSize={max_sz}', '']
|
||||||
|
return '\n'.join(lines)
|
||||||
|
|
||||||
|
|
||||||
|
def compile_icon_dir_as_themes(path_to_dir, output_path, theme_name='calibre-default', inherits='', prefix='/icons'):
|
||||||
|
with tempfile.TemporaryDirectory(dir=path_to_dir) as tdir, open(os.path.join(tdir, 'icons.qrc'), 'w') as qrc:
|
||||||
|
print('<RCC>', file=qrc)
|
||||||
|
print(f' <qresource prefix="{prefix}">', file=qrc)
|
||||||
|
|
||||||
|
def file(name):
|
||||||
|
print(f' <file>{normpath(name)}</file>', file=qrc)
|
||||||
|
|
||||||
|
for q in (theme_name, theme_name + '-dark', theme_name + '-light'):
|
||||||
|
os.mkdir(os.path.join(tdir, q))
|
||||||
|
for sd in ['images'] + [f'images/{x}' for x in icons_subdirs]:
|
||||||
|
os.makedirs(os.path.join(tdir, q, sd))
|
||||||
|
with open(os.path.join(tdir, theme_name, 'index.theme'), 'w') as f:
|
||||||
|
f.write(index_theme(theme_name, inherits))
|
||||||
|
file(f'{theme_name}/index.theme')
|
||||||
|
for q in (theme_name + '-dark', theme_name + '-light'):
|
||||||
|
with open(os.path.join(tdir, q, 'index.theme'), 'w') as f:
|
||||||
|
f.write(index_theme(q, inherits=theme_name))
|
||||||
|
file(f'{q}/index.theme')
|
||||||
|
|
||||||
|
for sdir in ('.',) + icons_subdirs:
|
||||||
|
s = os.path.join(path_to_dir, sdir)
|
||||||
|
for x in os.listdir(s):
|
||||||
|
base, ext = os.path.splitext(x)
|
||||||
|
if ext.lower() not in ('.png',):
|
||||||
|
continue
|
||||||
|
theme_dir = theme_name
|
||||||
|
dest_name = x
|
||||||
|
if base.endswith('-for-dark-theme'):
|
||||||
|
theme_dir += '-dark'
|
||||||
|
dest_name = x.replace('-for-dark-theme', '')
|
||||||
|
elif base.endswith('-for-light-theme'):
|
||||||
|
theme_dir += '-light'
|
||||||
|
dest_name = x.replace('-for-light-theme', '')
|
||||||
|
dest = theme_dir, 'images', sdir, dest_name
|
||||||
|
os.link(os.path.join(s, x), os.path.join(tdir, *dest))
|
||||||
|
file('/'.join(dest))
|
||||||
|
print(' </qresource>', file=qrc)
|
||||||
|
print('</RCC>', file=qrc)
|
||||||
|
qrc.close()
|
||||||
|
# input(tdir)
|
||||||
|
compile_qrc(output_path, qrc.name)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user