Экспериментальный вебсайт. Ошибки гарантированы❗

Настроить графический интерфейс

Общие сведения о GTK

При создании графического интерфейса блокнота Zim применён инструментарий GTK.

GTK (аббревиатура от GIMP ToolKit) представляет собой кроссплатформенную библиотеку элементов интерфейса пользователя (виджетов). Элементы интерфейса организованы в иерархию классов. В каждый пользовательский интерфейс добавляют кнопки, текстовые метки, поля ввода, выпадающие меню и т.п. Кроме того, GTK управляет событиями: отслеживает нажатие кнопок мыши и клавиатуры или изменение размеров окна.

Библиотека GTK популярна в графических интерфейсах Wayland и X Window System.

В свою очередь инструментарий GTK зависит от следующих библиотек:

  • Cairo — отрисовка векторной графики;
  • GLib — графическое расширение библиотеки libc;
  • Pango — библиотека отображения текста на разных языках, содержащая различные способы отображения шрифтов;
  • ATK (GNOME ATK) — инструментарий для построения интерфейсов в среде рабочего стола GNOME.
Подробнее о библиотеке GTK можно прочитать на вебсайте проекта.

Описание интерфейса Zim

Язык программирования Python — на котором написан Zim, — позволяет строить интерфейс, используя библиотеку GTK. Для этого применяется GObject-интроспекция через PyGI.

Описание интерфейса Zim расположено в отдельном файле gtkrc, который обычно сохранён в домашнем каталоге пользователя в виде ~/.gtkrc-2.0 или ~/.gtkrc-3.0.

Блокнот Zim управляет следующими элементами интерфейса GTK:

  • zim-pageview — отображает страницу (textview);
  • zim-pageindex — отображает индекс страниц (treeview) в боковой панели блокнота.

Пример изменения шрифта, используемого в индексе страниц, следует указать параметры шрифта в файле gtkrc:

style "zim-pageindex-style"
{
	font_name = "Sans 8"
}
widget "*.zim-pageindex" style "zim-pageindex-style"

Пример компактного отображения дерева страниц:

style "gtkcompact" 
{
	GtkTreeView::vertical-separator=0
	GtkTreeView::horizontal-separator=0
	GtkTreeView::expander-size=6
	GtkTreeView::fixed-height-mode=TRUE
	GtkWidget::focus_padding=0
}
class "GtkWidget" style "gtkcompact"

Пример изменения цвета элементов страницы:

style "mycolors" 
{
	base[NORMAL]: "black"
	base[SELECTED]: "#6699cc"
	text[NORMAL]: "#c0c0c0"
}
widget "*.zim-pageview" style "mycolors"