Получить текущий / заданный по умолчанию шрифт для виджетов в gtkada (GTK3) - PullRequest
0 голосов
/ 04 февраля 2019

Создана программа, которая отображает Text_View.Я настроил кнопки, чтобы позволить пользователю изменять цветовую схему и шрифты.Это прекрасно работает.

Но когда программа запускается в первый раз, она использует любой шрифт, установленный текущей темой GTK3.

Что я хотел бы сделать, это выяснить, что это за текущий шрифт (допользователь выбрал изменение в семействе, весе или размере), получил размер шрифта, применил к нему коэффициент масштабирования, применил к нескольким строкам вводного текста, который я выводил в Text_View.

У меня естьпопытался посмотреть старые ответы здесь, но они, кажется, используют устаревшие опции (GTK2), которые, кажется, не пригодны для использования.

Заранее спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Да, это помогло направить меня в правильном направлении.Я ходил кругами пару дней.Еще нужно немного поработать, чтобы привести в порядок код, но обнаружил, что это работает:

Объявления:

  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);

Покажите окно, и все готово.

0 голосов
/ 04 февраля 2019

Не эксперт в GtkAda, но чтобы дать вам несколько указателей (ссылки на источники GtkAda):

В GTK + 3 вы запрашиваете стиль виджета с помощью Get_Style_Context .Это возвращает Gtk_Style_Context, который, по сути, является контейнером для CSS-подобных свойств.

Вы ищете свойство шрифта font-size, которое вы можете запросить с помощью Get_Property .

После запроса этого вы создаете Gtk_Text_Tag .Наиболее удобный способ сделать это - запросить буфер представления через Get_Buffer и затем использовать Create_Tag .

. Вам нужно установить Size_Property или Size_Points_Property на основе запрошенного вами значения (добавьте желаемый дополнительный размер).Я не уверен, возвращен ли размер в единицах или точках Панго, вам нужно это выяснить.Независимо от этого, вы должны установить Size_Set_Property в True.

Наконец, вы вызываете Apply_Tag в буфере представления, чтобы применить тегдля текста внутри заданного диапазона.

...