获取gtkada(GTK3)中的小部件的当前/默认字体

时间:2019-02-03 23:25:11

标签: gtk ada

已创建一个显示Text_View的程序。我设置了按钮,以允许用户更改配色方案和字体。很好。

但是当程序第一次启动时,它使用的是当前GTK3主题设置的字体。

我想做的是找出当前字体是什么(在用户选择家族,粗细或大小变化之前),获取字体大小,对其应用缩放因子,以应用于我将几行介绍性文本输出到Text_View。

我尝试在此处查看较早的答案,但它们似乎正在使用不建议使用的选项(GTK2),该选项似乎不可用。

在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

不是GtkAda的专家,但是给您一些指示(链接是GtkAda的来源):

在GTK + 3中,您使用Get_Style_Context查询窗口小部件的样式。这将返回一个Gtk_Style_Context,基本上是一个类似CSS的属性的容器。

您正在寻找font property font-size,可以用Get_Property进行查询。

查询后,创建一个Gtk_Text_Tag。最方便的方法是通过Get_Buffer查询视图的缓冲区,然后使用Create_Tag

您需要根据查询的值设置Size_PropertySize_Points_Property(添加所需的其他大小)。我不确定尺寸是按Pango单位还是点数返回,您需要弄清楚这一点。无论如何,您都必须将Size_Set_Property设置为True

最后,您调用视图缓冲区上的Apply_Tag,将标签应用于给定范围内的文本。

答案 1 :(得分:2)

是的,这帮助我指出了正确的方向。我已经转了一圈了几天。仍然需要做一些工作,以整理代码,但发现此方法有效:

声明:

  The_Style_Context : Gtk_Style_Context;
  The_Font_Size     : Gint;
  The_Font_Desc     : Pango_Font_Description;
  The_State         : Gtk.Enums.Gtk_State_Flags := 1;
  The_Tag           : Gtk_Text_Tag;
  Tags              : Gtk_Text_Tag_Table;
  Iter, Start_Iter  : Gtk_Text_Iter;
  Title_Scale       : Constant := 2;
  TextBuffer        : Gtk_Text_Buffer;
  TextView          : Gtk_Text_View;

假设我们已经创建了一个新窗口(Win),任何必要的框等,以及“文本视图”。现在我们要做:

The_Style_Context := Get_Style_Context (Win);
The_Font_Desc := Get_Font (The_Style_Context, The_State);
The_Font_Name := To_Unbounded_String (Get_Family (The_Font_Desc));
The_Font_Size := Get_Size (The_Font_Desc);
Gtk_New (Tags);
Gtk_New (The_Tag, "title_tag");
Add (Tags, The_Tag);

下一行采用当前字体的大小,然后乘以我在声明部分中选择的比例。

Set_Property (The_Tag, Size_Property, The_Font_Size * Title_Scale);

创建文本缓冲区和文本视图。

Gtk_New (TextBuffer, Tags);
Gtk_New (TextView, TextBuffer);

假设我们为Text_View和其他一些初始格式设置选项设置边距。设置一些文本,然后应用标签的格式:

TextBuffer.Set_Text ("Hello, world.");

Get_End_Iter (TextBuffer, Iter);
Get_Start_Iter (TextBuffer, Start_Iter);
Apply_Tag (TextBuffer, The_Tag, Start_Iter, Iter);

显示窗口,我们完成了。