gpt4 book ai didi

c - 如何使用两种不同的字体在 GTK 标签上显示文本?

转载 作者:太空宇宙 更新时间:2023-11-04 00:59:55 25 4
gpt4 key购买 nike

我有一个 GTK 标签,我使用以下代码在 Arial Rounded Mt Bold 中显示文本:

PangoFontDescription *df;
df = pango_font_description_new ();
pango_font_description_set_family(df,"Arial Rounded Mt Bold");
pango_font_description_set_size(df,fontsize*PANGO_SCALE);
gtk_widget_modify_font(Message_Label, df);
gtk_label_set_text(GTK_LABEL(Label), "Hello World");
pango_font_description_free (df);

现在 Hello World 显示为 Arial Rounded Mt Bold。但是,如果我想在 Arial Rounded Mt Bold 中显示 Hello 并在其他字体(例如 Arial)中显示 World,该怎么办?这在 GTK 标签中可能吗?我在 C 中做这件事。任何建议或任何有用的链接。谢谢。

最佳答案

gtk_widget_modify_font() 已弃用,不会让您为所欲为。

您可以使用 PangoAttrList , 它结合了文本范围内的属性(包括 PangoFontDescriptor 的各个组件)。例如:

PangoAttrList *attrlist;
PangoAttribute *attr;
PangoFontDescription *df;

attrlist = pango_attr_list_new();

// First, let's set up the base attributes.
// This part is copied from your code (and slightly bugfixed and reformatted):
df = pango_font_description_new();
pango_font_description_set_family(df, "Arial Rounded MT");
pango_font_description_set_size(df, fontsize * PANGO_SCALE);
pango_font_description_set_weight(df, PANGO_WEIGHT_BOLD);
// You can also use pango_font_description_new_from_string() and pass in a string like "Arial Rounded MT Bold (whatever fontsize is)".
// But here's where things change:
attr = pango_attr_font_desc_new(df);
// This is not documented, but pango_attr_font_desc_new() makes a copy of df, so let's release ours:
pango_font_description_free(df);
// Pango and GTK+ use UTF-8, so our string is indexed between 0 and 11.
// Note that the end_index is exclusive!
attr->start_index = 0;
attr->end_index = 11;
pango_attr_list_insert(attrlist, attr);
// And pango_attr_list_insert() takes ownership of attr, so we don't free it ourselves.
// As an alternative to all that, you can have each component of the PangoFontDescriptor be its own attribute; see the PangoAttribute documentation page.

// And now the attribute for the word "World".
attr = pango_attr_family_new("Arial");
// "World" starts at 6 and ends at 11.
attr->start_index = 6;
attr->end_index = 11;
pango_attr_list_insert(attrlist, attr);

// And finally, give the GtkLabel our attribute list.
gtk_label_set_attributes(GTK_LABEL(Label), attrlist);
// And (IIRC this is not documented either) gtk_label_set_attributes() takes a reference on the attribute list, so we can remove ours.
pango_attr_list_unref(attrlist);

您还可以使用gtk_label_set_markup()use an HTML-like markup language一次性设置文本和样式:

gtk_label_set_markup(GTK_LABEL(Label),
"<span face=\"Arial Rounded MT\" size=\"(whatever fontsize * PANGO_SCALE is)\" weight=\"bold\">Hello <span face=\"Arial\">World</span></span>");
// Or even...
gtk_label_set_markup(GTK_LABEL(Label),
"<span font=\"Arial Rounded MT Bold (whatever fontsize is)\">Hello <span face=\"Arial\">World</span></span>");

关于c - 如何使用两种不同的字体在 GTK 标签上显示文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44381132/

25 4 0