У меня есть GtkEntry, что я хотел бы разрешить пользователям стиль с их выбором шрифта (или по умолчанию для системы). В конце я описываю строку описания Pango, например «Monospace 10», чтобы описать шрифт.Настройка шрифта GtkEntry из Pango.FontDescription
В настоящее время я использую override_font
, который устарел в пользу стилизации CSS.
Я хотел бы хотя бы попытаться сделать это «правильно», но теперь, похоже, довольно запутанный и хрупкий рабочий процесс, чтобы получить CSS из строки Pango. Вот example from Github:
def _get_editor_font_css():
"""Return CSS for custom editor font."""
font_desc = Pango.FontDescription("monospace")
if (gaupol.conf.editor.custom_font and
gaupol.conf.editor.use_custom_font):
font_desc = Pango.FontDescription(gaupol.conf.editor.custom_font)
# They fucking broke theming again with GTK+ 3.22.
unit = "pt" if Gtk.check_version(3, 22, 0) is None else "px"
css = """
.gaupol-custom-font {{
font-family: {family},monospace;
font-size: {size}{unit};
font-weight: {weight};
}}""".format(
family=font_desc.get_family().split(",")[0],
size=int(round(font_desc.get_size()/Pango.SCALE)),
unit=unit,
weight=int(font_desc.get_weight()))
css = css.replace("font-size: 0{unit};".format(unit=unit), "")
css = css.replace("font-weight: 0;", "")
css = "\n".join(filter(lambda x: x.strip(), css.splitlines()))
return css
После того, как CSS в строку, то я могу создать CSSProvider
и передать в add_provider()
контексте стиля (в ли это в конечном итоге, аккумулирующих провайдеров CSS, кстати?).
Все это похоже на большую работу, чтобы вернуть шрифт в систему, где он, по-видимому, возвращается прямо в Pango!
Действительно ли это правильный путь?