GTK2widgetstunning

Оптимизация размеров gtk2 виджетов

1. Отступы

Проблема из-за чего в gtk2 все виджеты выглядят слишком большими, это отступы от текста по горизонтали и вертикали на них. В gtkrc эти отступы задаются параметрами xpadding и ypadding.

Для начала глянем что за размер иконок у нас выставлен в теме:


gtk-icon-sizes = "panel-menu=24,24:panel=24,24:gtk-button=24,24:gtk-large-toolbar=24,24"

Это значит что на кнопках у нас будут рисоваться иконки 24x24 пиксела. Меня устраивает следующая установка

gtk-icon-sizes = "gtk-large-toolbar=16,16:gtk-small-toolbar=16,16:gtk-button=16,16"

Далее ищем дефолтовую секцию для настроек всех виджетов ибо в ней всегда есть много интересного:

class "GtkWidget"          style "default"

Окей, значит стиль называется default. Ищем его в теме:

style "default"
{
  xthickness            	= 2
  ythickness            	= 2
  fg[NORMAL]       	= "#353535"
}


Вот наши отступы. Во всех виджетах, отступы от текста будут 2 пикселя, если для конкретного виджета не задан свой [xy]thickness. Можно попробовать уменьшить отступ до 1 или до 0 пикселя, по вскусу. Но, в некоторых виджетах этот отступ очень даже полезен. Поэтому лучше редактировать отступы прямо в конкретном виджете.

Например, уменьшим размер виджета GtkButton (или просто "кнопка"). Ищем описание нашего GtkButton виджета:

class "GtkButton"                       style "button"


Стиль нашего виджета в теме завется button. Ищем его описание:

style "button"          = "default"
{
}

Если вы нашли там [xy]padding, то смело меняйте их размеры на 0 или 1 пиксел, по вкусу. если их там нет, то просто добавьте 2 новые строчки:

style "button"          = "default"
{
  xthickness            	= 0
  ythickness            	= 0
}

Сохраняем Ваши изменения и перезапускаем какую-нибудь gtk программу. Размер кнопок должен быть значительно меньше.

2. Лечим размер табов.

Таким же образом можно поправить размер у табов. Виджет "табы" называется GtkNotebook

Итак, рецепт. В default секцию добавляем:

style "default"
{
  GtkNotebook::tab-border = 0
  GtkNotebook::tab-hborder = 0
  GtkNotebook::tab-vborder = 0
  GtkNotebook::show-border = 0
  GtkNotebook::gtk-button-images = 0
  GtkNotebook::gtk-menu-images = 0
  GtkNotebook::arrow-spacing = 0
  GtkNotebook::tab-curvature = 0
  GtkNotebook::tab-overlap = 0
  GtkNotebook::focus-line-width = 0
}

Сохраняем, перезапускаем gnome-terminal и видим отличные красивые табы.

3. Полезные переменные

Для уменьшения размеров виджетов в секцию default можно добавить следующие переменные:

gtk-button-images = 0

переменная отключает отображение иконок на кнопках

gtk-menu-images = 0

переменная отключает отображение иконок в меню

4. Убираем стрелочки на скроллбарах

Никогда не понимал их пользы - прокрутка обычно ведётся либо колесом мыши, либо перетаскиванием ползунка, либо с клавиатуры.

style "default"
{
  GtkScrollbar::has-backward-stepper=0
  GtkScrollbar::has-forward-stepper=0
}

5. Уменьшаем ширину скроллбаров

Весьма полезно, если скроллбар служит только для индикации положения на странице.

style "default"
{
    GtkRange::trough_border = 0
    GtkRange::slider_width = 10
}

6. Убираем границы вокруг меню, панелей инструментов и строки состояния

Если хочется избавиться от границ вокруг данных элементов, то добавьте следующие настройки к стилю:

style "default"
{
    GtkStatusbar::shadow_type = GTK_SHADOW_NONE                     
    GtkToolbar::shadow-type = GTK_SHADOW_NONE
    GtkMenuBar::shadow-type = GTK_SHADOW_NONE
}

Возможные значения параметра shadow-type:

GTK_SHADOW_NONE
	No outline.

GTK_SHADOW_IN
	The outline is bevelled inwards.

GTK_SHADOW_OUT
	The outline is bevelled outwards like a button.

GTK_SHADOW_ETCHED_IN
	The outline has a sunken 3d appearance.

GTK_SHADOW_ETCHED_OUT
	The outline has a raised 3d appearance.

Описание синтаксиса gtkrc смотрите на [1]. Небольшой урок по созданию тем можно посмотреть на [2]. Информация по движкам GTK-тем представлена на [3].

Предлагаю развивать дальше эту статью.


---- --Alexander Butenko 09-Sep-2008 08:50 MSD