Практические советы по GTK+ (Форматированный текст. часть 1)
Форматированный текст. часть
1
GTK содержит
неплохую поддержку работы с форматированным текстом, можно даже с минимальными
усилиями написать небольшой визуальный редактор rtf или html файлов. Разберёмся
как всё работает с самого начала.
Создаём
виджет для вывода форматированного текста:
GtkWidget
*text_view = gtk_text_view_new();
Для
понимания работы с текстовым виджетом введём несколько понятий:
1)Все
операции с текстом выполняются через текстовый буфер, который можно получить из
виджета следующим образом:
Каждый тег
определяет одно или несколько свойст форматирования (жирность, наклон, шрифт,
цвет и т.д.), можно применять сразу несколько тегов, но после последнего должен
стоять 0.
tag_name -
это имя тега, может быть любым, но только имена не должны повторяться, если имя
не нужно, можно поставить NULL.
Полное
описание всех возможных свойств тегов находится в официальной документации к GTK
(в файле GtkTextTag.html), дабы не переписывать документацию, пропускаем эту
часть.
Можно
поменять
форматирование у уже существующего текста:
Внимание! Только
может получиться небольшая проблемка, когда на одном и том же месте текста
применены взаимоисключающие теги, например шрифт "Sans Normal" и жирность текста
weight=PANGO_WEIGHT_BOLD, при этом конфликтуют нормальная и повышенная жирность.
Для решения таких проблем есть понятие приоритета тега, у кого он выше, то
начертание и используется в спорном случае.
Функции для
работы с приоритетами:
int prioritet =
gtk_text_tag_set_priority(tag);// узнать
приоритет тега (число от нуля и выше)
gtk_text_tag_set_priority(tag,prioritet);//
установить новый приоритет тега
Для смены
приоритета нужен указатель на GtkTextTag*, и если теги применяются по именам и
GtkTextTag *tag не храниться, то тег из имени можно узнать следующим
образом:
GtkTextTagTable
*tag_table = gtk_text_buffer_get_tag_table(buffer);// получить
таблицу тегов
GtkTextTag
*tag = gtk_text_tag_table_lookup(tag_table,tag_name);// ищем тег
с именем tag_name
В текстовый
виджет кроме текста можно вставлять
картинки: