如何找到GtkLabel的当前字体

时间:2017-04-15 10:42:01

标签: c fonts gtk3 cairo gdk

我知道这里已经提到了类似的问题:How to get a current font for GtkTextView?

但是

  

gtk_style_context_get_font自版本3.8以来已被弃用,不应在新编写的代码中使用。将gtk_style_context_get()用于" font"或者是子属性。

在这里,我被困住了。如何使用新推荐的技术找出小部件的当前字体?

@Edit 一些代码:

PangoFontDescription *font_desc;
GtkStyleContext *style;
GdkRGBA fore_color;

font_desc = pango_font_description_new ();
style = gtk_widget_get_style_context (base);
gtk_style_context_get_color (style, GTK_STATE_FLAG_NORMAL, &fore_color);

gtk_style_context_save (style);
gtk_style_context_set_state (style, 0);
gtk_style_context_get (style, GTK_STATE_FLAG_NORMAL, "font", font_desc, NULL);
gtk_style_context_restore (style);

if (G_TYPE_CHECK_INSTANCE_TYPE ((font_desc), PANGO_TYPE_FONT_DESCRIPTION)) {
  printf("%s\n", "Is a font");
} else {
  printf("%s\n", "Not a font");
}

printf("%s\n", pango_font_description_get_family (font_desc));

打印'随机'字符,因为pango_font_description_get_family返回NULL指针。

同时打印'不是字体'

1 个答案:

答案 0 :(得分:0)

这只是对Github的快速搜索。

PangoFontDescription *font_desc;
GtkStyleContext *style_context;
style_context = gtk_widget_get_style_context (widget);
gtk_style_context_save (style_context);
gtk_style_context_set_state (style_context, 0);
gtk_style_context_get (style_context, 
     gtk_style_context_get_state(style_context), "font", &font_desc, NULL);
gtk_style_context_restore (style_context);

见近线号码:96和384

https://github.com/jessevdk/libgd/blob/master/libgd/gd-two-lines-renderer.c