2016-12-21 7 views
5

У меня есть 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!

Действительно ли это правильный путь?

ответ

0

Использование PangoContext.

#include <gtkmm.h> 

int main(int argc, char* argv[]) 
{ 
    auto GtkApp = Gtk::Application::create(); 

    Gtk::Window window; 

    Gtk::Label label; 
    label.set_label("asdasdfdfg dfgsdfg "); 
    auto context = label.get_pango_context(); 
    auto fontDescription = context->get_font_description(); 
    fontDescription.set_family("Monospace"); 
    fontDescription.set_absolute_size(10*Pango::SCALE); 
    context->set_font_description(fontDescription); 

    Gtk::Label label2; 
    label2.set_label("xcv"); 

    Gtk::VBox box; 
    box.pack_start(label); 
    box.pack_start(label2); 
    window.add(box); 
    window.show_all(); 
    GtkApp->run(window); 
    return 0; 
} 

Результат:

Resulting window

 Смежные вопросы

  • Нет связанных вопросов^_^