mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
For icon rules and emblems, use the standard theme names for the icons. Generalize the naming so 1 or both of the icons can have themed names.
This commit is contained in:
parent
1f5e9d0ac5
commit
5941de87a5
@ -64,6 +64,7 @@ from calibre.gui2 import clip_border_radius, config, empty_index, gprefs, rating
|
||||
from calibre.gui2.dnd import path_from_qurl
|
||||
from calibre.gui2.gestures import GestureManager
|
||||
from calibre.gui2.library.caches import CoverCache, ThumbnailCache
|
||||
from calibre.gui2.library.models import themed_icon_name
|
||||
from calibre.gui2.pin_columns import PinContainer
|
||||
from calibre.utils import join_with_timeout
|
||||
from calibre.utils.config import prefs, tweaks
|
||||
@ -555,11 +556,9 @@ class CoverDelegate(QStyledItemDelegate):
|
||||
ans = QIcon.ic('ok.png').pixmap(sz, sz)
|
||||
elif name:
|
||||
pmap = None
|
||||
if is_dark_theme():
|
||||
n,ext = os.path.splitext(name)
|
||||
d = os.path.join(config_dir, 'cc_icons', n + '-dark' + ext)
|
||||
if os.path.exists(d):
|
||||
pmap = QIcon(d).pixmap(sz, sz)
|
||||
d = themed_icon_name(os.path.join(config_dir, 'cc_icons'), name)
|
||||
if d is not None:
|
||||
pmap = QIcon(d).pixmap(sz, sz)
|
||||
if pmap is None:
|
||||
pmap = QIcon(os.path.join(config_dir, 'cc_icons', name)).pixmap(sz, sz)
|
||||
if not pmap.isNull():
|
||||
|
@ -93,6 +93,20 @@ class ColumnColor: # {{{
|
||||
# }}}
|
||||
|
||||
|
||||
def themed_icon_name(icon_dir, icon_name):
|
||||
root,ext = os.path.splitext(icon_name)
|
||||
# Remove any theme from the icon name
|
||||
root = root.removesuffix('-for-dark-theme').removesuffix('-for-light-theme')
|
||||
# Check if the correct themed icon exists.
|
||||
theme_suffix = '-for-dark-theme' if is_dark_theme() else '-for-light-theme'
|
||||
d = os.path.join(icon_dir, root + theme_suffix + ext)
|
||||
if os.path.exists(d):
|
||||
return d
|
||||
# No themed icon exists. Try the original name
|
||||
d = os.path.join(icon_dir, icon_name)
|
||||
return d if os.path.exists(d) else None
|
||||
|
||||
|
||||
class ColumnIcon: # {{{
|
||||
|
||||
def __init__(self, formatter, model):
|
||||
@ -134,14 +148,8 @@ class ColumnIcon: # {{{
|
||||
dim = int(self.dpr * rh)
|
||||
icon_dir = os.path.join(config_dir, 'cc_icons')
|
||||
for icon in icons:
|
||||
d = None
|
||||
if is_dark_theme():
|
||||
root,ext = os.path.splitext(icon)
|
||||
d = os.path.join(icon_dir, root + '-dark' + ext)
|
||||
d = d if os.path.exists(d) else None
|
||||
if d is None:
|
||||
d = os.path.join(icon_dir, icon)
|
||||
if (os.path.exists(d)):
|
||||
d = themed_icon_name(icon_dir, icon)
|
||||
if d is not None:
|
||||
bm = QPixmap(d)
|
||||
scaled, nw, nh = fit_image(bm.width(), bm.height(), bm.width(), dim)
|
||||
bm = bm.scaled(int(nw), int(nh), aspectRatioMode=Qt.AspectRatioMode.IgnoreAspectRatio,
|
||||
|
@ -568,15 +568,22 @@ class RuleEditor(QDialog): # {{{
|
||||
def show_theme_help(self):
|
||||
msg = '<p>'+ _(
|
||||
'You can use different icons in light and dark themes. To do this, '
|
||||
'add two icons to the icon list. The light theme icon will have '
|
||||
'the "normal" name, for example "ok.png". The dark theme icon must '
|
||||
'have the same name with "-dark" appended. For example, if the light '
|
||||
'theme icon is named "ok.png" then the dark theme icon must be named '
|
||||
'"ok-dark.png".'
|
||||
'add two icons to the icon list. One of the icons must have either the '
|
||||
'"plain" name, for example "ok.png", or the themed name, for example '
|
||||
'"ok-for-light-theme.png". The other icon must have a themed name with '
|
||||
'the same prefix, for example "ok-for-dark-theme.png". '
|
||||
'</p><p>'
|
||||
'When defining a rule, always use the "normal" name. The -dark icon will be '
|
||||
'automatically substituted for the normal icon when a dark theme is '
|
||||
'being used.'
|
||||
'Example: if the light theme icon is named "ok.png" then the dark '
|
||||
'theme icon must be named "ok-for-dark-theme.png". If the light '
|
||||
'theme icon is named "ok-for-light-theme.png" then the dark theme '
|
||||
'icon must be named either ok.png or "ok-for-dark-theme.png".'
|
||||
'</p><p>'
|
||||
'When defining a rule, use either of the icon names. The correct '
|
||||
'icon for the theme will automatically be used, if it exists.'
|
||||
'</p><p>'
|
||||
'You are not required to change existing rules to use theming. Decide '
|
||||
'the theme where the existing icon should be used then add the '
|
||||
'other icon with the correct themed name. '
|
||||
'</p><p>'
|
||||
'Remember to add both the light and dark theme icons to the list of icons.'
|
||||
) + '</p>'
|
||||
|
Loading…
x
Reference in New Issue
Block a user