GtkStyleContext
GtkStyleContext — Рендеринг UI-элементов
Функции
Свойства
| GdkDisplay * | display | Чтение / Запись |
Типы и значения
| перечисление | GtkBorderStyle |
| GtkStyleContext | |
| перечисление | GtkStyleContextPrintFlags |
| структура | GtkBorder |
Иерархия объектов
GObject
╰── GtkStyleContext
Файлы заголовков
#include <gtk/gtk.h>
Описание
GtkStyleContext — это объект, хранящий информацию о стилях, влияющих на виджет.
Для построения окончательной информации о стиле GtkStyleContext запрашивает данные у всех подключенных GtkStyleProviders. Поставщики стилей могут быть подключены к контексту явно с помощью gtk_style_context_add_provider() или к дисплею с помощью gtk_style_context_add_provider_for_display(). Результирующий стиль представляет собой комбинацию данных всех поставщиков в порядке приоритета.
Для виджетов GTK любой GtkStyleContext, возвращённый функцией gtk_widget_get_style_context(), уже будет содержать установленные данные о GdkDisplay и информацию о направлении текста (RTL/LTR). Контекст стиля также будет автоматически обновляться, если какие-либо из этих настроек изменятся в виджете.
Классы стиля
Виджеты могут добавлять классы стиля в свой контекст, что позволяет связывать разные стили по классам. Документация по отдельным виджетам указывает, какие классы стиля они используют сами и какие классы стиля могут быть добавлены приложениями для изменения их внешнего вида.
GTK определяет макросы для ряда классов стиля.
Настройка стилей в UI-библиотеках и приложениях
Если вы разрабатываете библиотеку с пользовательскими GtkWidgets, которые отображаются по-другому, чем стандартные компоненты, вам может потребоваться добавить собственный GtkStyleProvider с приоритетом GTK_STYLE_PROVIDER_PRIORITY_FALLBACK, либо это будет GtkCssProvider, либо пользовательский объект, реализующий интерфейс GtkStyleProvider. Таким образом, темы по-прежнему могут попытаться стилизовать ваши UI-элементы по-разному, если это необходимо.
Если вы используете пользовательскую настройку стиля в приложении, вам, вероятно, нужно, чтобы ваша информация о стиле преобладала над стилем темы, поэтому вы должны использовать GtkStyleProvider с приоритетом GTK_STYLE_PROVIDER_PRIORITY_APPLICATION. Имейте в виду, что настройки пользователя в XDG_CONFIG_HOME/gtk-4.0/gtk.css всё ещё будут иметь приоритет над вашими изменениями, так как они используют приоритет GTK_STYLE_PROVIDER_PRIORITY_USER.
Функции
gtk_style_context_add_provider ()
void gtk_style_context_add_provider (GtkStyleContext *context,GtkStyleProvider *provider,guint priority);
Добавляет поставщик стилей к context для использования в построении стиля. Обратите внимание, что поставщик стилей, добавленный этой функцией, влияет только на стиль виджета, к которому принадлежит context. Если вы хотите повлиять на стиль всех виджетов, используйте gtk_style_context_add_provider_for_display().
Примечание: если приоритеты совпадают, GtkStyleProvider, добавленный этой функцией, имеет приоритет над другим, добавленным через gtk_style_context_add_provider_for_display().
Параметры
context | объект GtkStyleContext | |
provider | объект GtkStyleProvider | |
priority | приоритет поставщика стилей. Чем он ниже, тем раньше он будет использован при построении стиля. Обычно он находится в диапазоне между |
gtk_style_context_add_provider_for_display ()
void gtk_style_context_add_provider_for_display (GdkDisplay *display,GtkStyleProvider *provider,guint priority);
Добавляет глобальный поставщик стилей к display, который будет использоваться в построении стиля для всех GtkStyleContext под display.
GTK использует это для предоставления информации о стиле из GtkSettings.
Примечание: если приоритеты совпадают, GtkStyleProvider, добавленный через gtk_style_context_add_provider(), имеет приоритет над другим, добавленным этой функцией.
Параметры
display | объект GdkDisplay | |
provider | объект GtkStyleProvider | |
priority | приоритет поставщика стилей. Чем он ниже, тем раньше он будет использован при построении стиля. Обычно он находится в диапазоне между |
gtk_style_context_get_display ()
GdkDisplay *
gtk_style_context_get_display (GtkStyleContext *context); Возвращает GdkDisplay, к которому прикреплен context.
Параметры
context | объект GtkStyleContext |
gtk_style_context_get_state ()
GtkStateFlags
gtk_style_context_get_state (GtkStyleContext *context); Возвращает состояние, используемое для сопоставления стилей.
Этот метод следует использовать только для получения GtkStateFlags для передачи методам GtkStyleContext, таким как gtk_style_context_get_padding(). Если вам нужно получить текущее состояние GtkWidget, используйте gtk_widget_get_state_flags().
Параметры
context | объект GtkStyleContext |
Возвращает
флаги состояния
gtk_style_context_get_color ()
void gtk_style_context_get_color (GtkStyleContext *context,GdkRGBA *color);
Получает цвет переднего плана для заданного состояния.
Параметры
context | объект GtkStyleContext | |
color | переменная для возвращаемого цвета переднего плана. | [out] |
gtk_style_context_get_border ()
void gtk_style_context_get_border (GtkStyleContext *context,GtkBorder *border);
Получает границу для заданного состояния как GtkBorder.
Параметры
context | объект GtkStyleContext | |
border | переменная для возвращаемых настроек границы. | [out] |
gtk_style_context_get_padding ()
void gtk_style_context_get_padding (GtkStyleContext *context,GtkBorder *padding);
Получает отступ для заданного состояния как GtkBorder.
Параметры
context | объект GtkStyleContext | |
padding | переменная для возвращаемых настроек отступа. | [out] |
gtk_style_context_get_margin ()
void gtk_style_context_get_margin (GtkStyleContext *context,GtkBorder *margin);
Получает отступ для заданного состояния как GtkBorder.
Параметры
context | объект GtkStyleContext | |
margin | переменная для возвращаемых настроек отступа. | [out] |
gtk_style_context_lookup_color ()
gboolean gtk_style_context_lookup_color (GtkStyleContext *context,const char *color_name,GdkRGBA *color);
Ищет и разрешает имя цвета в карте цветов context.
Параметры
context | объект GtkStyleContext | |
color_name | имя цвета для поиска | |
color | Место для возвращаемого цвета. | [out] |
Возвращает
TRUE если color_name был найден и разрешён, FALSE в противном случае
gtk_style_context_remove_provider ()
void gtk_style_context_remove_provider (GtkStyleContext *context,GtkStyleProvider *provider);
Удаляет provider из списка поставщиков стилей в context.
Параметры
context | объект GtkStyleContext | |
provider | объект GtkStyleProvider |
gtk_style_context_remove_provider_for_display ()
void gtk_style_context_remove_provider_for_display (GdkDisplay *display,GtkStyleProvider *provider);
Удаляет provider из глобального списка поставщиков стилей в display.
Параметры
display | объект GdkDisplay | |
provider | объект GtkStyleProvider |
gtk_style_context_restore ()
void
gtk_style_context_restore (GtkStyleContext *context); Восстанавливает состояние context до предыдущей стадии. См. gtk_style_context_save().
Параметры
context | объект GtkStyleContext |
gtk_style_context_save ()
void
gtk_style_context_save (GtkStyleContext *context); Сохраняет состояние context, чтобы временные изменения, внесённые через gtk_style_context_add_class(), gtk_style_context_remove_class(), gtk_style_context_set_state() и т.п., можно было быстро откатить в один приём через gtk_style_context_restore().
Соответствующий вызов gtk_style_context_restore() должен быть выполнен до возвращения GTK в основной цикл.
Параметры
context | объект GtkStyleContext |
gtk_style_context_add_class ()
void gtk_style_context_add_class (GtkStyleContext *context,const char *class_name);
Добавляет класс стиля к context, чтобы последующее использование контекста стиля использовало этот новый класс для форматирования.
В формате файлов CSS, GtkEntry с определением класса “search”, соотносился бы с:
В то время как любой виджет, определяющий класс “search”, соотносился бы с:
entry.search { ... }Параметры
context | объект GtkStyleContext | |
class_name | имя класса для использования в форматировании |
gtk_style_context_remove_class ()
void gtk_style_context_remove_class (GtkStyleContext *context,const char *class_name);
Удаляет class_name из context.
Параметры
context | объект GtkStyleContext | |
class_name | имя класса для удаления |
gtk_style_context_has_class ()
gboolean gtk_style_context_has_class (GtkStyleContext *context,const char *class_name);
Возвращает TRUE, если context в данный момент определил заданное имя класса.
Параметры
context | объект GtkStyleContext | |
class_name | имя класса |
Возвращает
TRUE, если context имеет class_name определённым
gtk_style_context_set_display ()
void gtk_style_context_set_display (GtkStyleContext *context,GdkDisplay *display);
Присоединяет context к указанному дисплею.
Дисплей используется для добавления информации о стиле из «глобальных» поставщиков стилей, таких как экземпляр GtkSettings дисплея.
Если вы используете GtkStyleContext, возвращённый gtk_widget_get_style_context(), вам не нужно вызывать это самим.
Параметры
context | объект GtkStyleContext | |
display | объект GdkDisplay |
gtk_style_context_set_state ()
void gtk_style_context_set_state (GtkStyleContext *context,GtkStateFlags flags);
Устанавливает состояние для использования при сопоставлении стилей.
Параметры
context | объект GtkStyleContext | |
flags | состояние для представления |
gtk_style_context_set_scale ()
void gtk_style_context_set_scale (GtkStyleContext *context,int scale);
Устанавливает масштаб для использования при получении ресурсов изображений для стиля.
Параметры
context | объект GtkStyleContext | |
scale | масштаб |
gtk_style_context_get_scale ()
int
gtk_style_context_get_scale (GtkStyleContext *context); Возвращает используемый масштаб для ресурсов.
Параметры
context | объект GtkStyleContext |
Возвращает
масштаб
gtk_style_context_to_string ()
char * gtk_style_context_to_string (GtkStyleContext *context,GtkStyleContextPrintFlags flags);
Преобразует контекст стиля в строковое представление.
Строковое представление всегда включает информацию об имени, состоянии, идентификаторе, видимости и классах стиля узла CSS, который поддерживает context. В зависимости от флагов, может быть включена дополнительная информация.
Эта функция предназначена для тестирования и отладки реализации CSS в GTK. Нет гарантий относительно формата возвращаемой строки, она может изменяться.
Параметры
context | объект GtkStyleContext | |
flags | Флаги, определяющие что выводить |
Возвращает
новую строку, представляющую context
gtk_border_new ()
GtkBorder *
gtk_border_new (void); Выделяет новую GtkBorder и инициализирует её элементы нулём.
Возвращаемое значение
нововыделенная GtkBorder. Освободить с помощью gtk_border_free().
[transfer full]
gtk_border_copy ()
GtkBorder *
gtk_border_copy (const GtkBorder *border_); Копирует GtkBorder.
Параметры
border_ | a GtkBorder |
Возвращаемое значение
копию border_ .
[transfer full]
gtk_border_free ()
void
gtk_border_free (GtkBorder *border_); Освобождает GtkBorder.
Параметры
border_ | a GtkBorder |
gtk_render_arrow ()
void gtk_render_arrow (GtkStyleContext *context,cairo_t *cr,double angle,double x,double y,double size);
Отрисовывает стрелку, указывающую на angle .
Типичная отрисовка стрелки в 0, 1⁄2 π;, π; и 3⁄2 π:
Параметры
context | ||
cr | a cairo_t | |
angle | угол стрелки от 0 до 2 * | |
x | координата X начала области отрисовки | |
y | координата Y начала области отрисовки | |
size | сторона квадрата области отрисовки |
gtk_render_background ()
void gtk_render_background (GtkStyleContext *context,cairo_t *cr,double x,double y,double width,double height);
Отрисовывает фон элемента.
Типичная отрисовка фона, демонстрирующая эффект background-image, border-width и border-radius.
Параметры
context | ||
cr | a cairo_t | |
x | координата X начала прямоугольника | |
y | координата Y начала прямоугольника | |
width | ширина прямоугольника | |
height | высота прямоугольника |
gtk_render_check ()
void gtk_render_check (GtkStyleContext *context,cairo_t *cr,double x,double y,double width,double height);
Отрисовывает галочку (как в GtkCheckButton).
Состояние GTK_STATE_FLAG_CHECKED определяет, установлена ли галочка, а GTK_STATE_FLAG_INCONSISTENT — является ли она неопределённой.
Типичная отрисовка галочки:
Параметры
context | ||
cr | a cairo_t | |
x | координата X начала прямоугольника | |
y | координата Y начала прямоугольника | |
width | ширина прямоугольника | |
height | высота прямоугольника |
gtk_render_expander ()
void gtk_render_expander (GtkStyleContext *context,cairo_t *cr,double x,double y,double width,double height);
Отрисовывает раскрывающийся элемент (как в GtkTreeView и GtkExpander) в области, заданной x , y , width , height . Состояние GTK_STATE_FLAG_CHECKED определяет, свернут или развернут элемент.
Типичная отрисовка раскрывающегося элемента:
Параметры
context | ||
cr | a cairo_t | |
x | координата X начала прямоугольника | |
y | координата Y начала прямоугольника | |
width | ширина прямоугольника | |
height | высота прямоугольника |
gtk_render_focus ()
void gtk_render_focus (GtkStyleContext *context,cairo_t *cr,double x,double y,double width,double height);
Отрисовывает индикатор фокуса на прямоугольнике, заданном x , y , width , height .
Типичная отрисовка фокуса:
Параметры
context | ||
cr | a cairo_t | |
x | координата X начала прямоугольника | |
y | координата Y начала прямоугольника | |
width | ширина прямоугольника | |
height | высота прямоугольника |
gtk_render_frame ()
void gtk_render_frame (GtkStyleContext *context,cairo_t *cr,double x,double y,double width,double height);
Отображает рамку вокруг прямоугольника, определяемого x, y, width, height.
Примеры рендеринга рамки, демонстрирующие влияние border-image, border-color, border-width, border-radius и соединений:
Параметры
context | ||
cr | a cairo_t | |
x | Координата X начала прямоугольника | |
y | Координата Y начала прямоугольника | |
width | Ширина прямоугольника | |
height | Высота прямоугольника |
gtk_render_handle ()
void gtk_render_handle (GtkStyleContext *context,cairo_t *cr,double x,double y,double width,double height);
Отображает маркер (как в GtkPaned и в маркерах изменения размера GtkWindow), в прямоугольнике, определяемом x, y, width, height.
Маркеры, отображаемые для панелей и маркеров изменения размера:
Параметры
context | ||
cr | a cairo_t | |
x | Координата X начала прямоугольника | |
y | Координата Y начала прямоугольника | |
width | Ширина прямоугольника | |
height | Высота прямоугольника |
gtk_render_layout ()
void gtk_render_layout (GtkStyleContext *context,cairo_t *cr,double x,double y,PangoLayout *layout);
Отображает layout по координатам x, y
Параметры
context | ||
cr | a cairo_t | |
x | Координата X | |
y | Координата Y | |
layout | the PangoLayout для отображения |
gtk_render_line ()
void gtk_render_line (GtkStyleContext *context,cairo_t *cr,double x0,double y0,double x1,double y1);
Отображает линию от (x0, y0) до (x1, y1).
Параметры
context | ||
cr | a cairo_t | |
x0 | Координата X начала линии | |
y0 | Координата Y начала линии | |
x1 | Координата X конца линии | |
y1 | Координата Y конца линии |
gtk_render_option ()
void gtk_render_option (GtkStyleContext *context,cairo_t *cr,double x,double y,double width,double height);
Отображает отметку опции (как в радиокнопке), состояние GTK_STATE_FLAG_CHECKED определяет, включена ли опция, а GTK_STATE_FLAG_INCONSISTENT указывает, следует ли обозначить её как неопределённую.
Типичный рендеринг отметки опции:
Параметры
context | ||
cr | a cairo_t | |
x | Координата X начала прямоугольника | |
y | Координата Y начала прямоугольника | |
width | Ширина прямоугольника | |
height | Высота прямоугольника |
gtk_render_activity ()
void gtk_render_activity (GtkStyleContext *context,cairo_t *cr,double x,double y,double width,double height);
Отображает индикатор активности (например, в GtkSpinner). Состояние GTK_STATE_FLAG_CHECKED определяет, происходит ли активность.
Параметры
context | ||
cr | a cairo_t | |
x | Координата X начала прямоугольника | |
y | Координата Y начала прямоугольника | |
width | Ширина прямоугольника | |
height | Высота прямоугольника |
gtk_render_icon ()
void gtk_render_icon (GtkStyleContext *context,cairo_t *cr,GdkTexture *texture,double x,double y);
Отображает значок в texture в указанных координатах x и y.
Эта функция отобразит значок в texture в точном соответствии с его размером, независимо от масштабирования, что может быть неподходящим при отрисовке на дисплеях с высокой плотностью пикселей.
Параметры
context | объект GtkStyleContext | |
cr | объект cairo_t | |
texture | объект GdkTexture, содержащий значок для отрисовки | |
x | координата X для | |
y | координата Y для |
Типы и значения
перечисление GtkBorderStyle
Описывает, как должна отрисовываться граница элемента пользовательского интерфейса.
Члены
GTK_BORDER_STYLE_NONE | Граница не отображается | |
GTK_BORDER_STYLE_HIDDEN | То же, что и | |
GTK_BORDER_STYLE_SOLID | Одно непрерывное сегментное отображение | |
GTK_BORDER_STYLE_INSET | Граница выглядит так, как будто содержимое утоплено внутрь | |
GTK_BORDER_STYLE_OUTSET | Граница выглядит так, как будто содержимое выпирает наружу | |
GTK_BORDER_STYLE_DOTTED | Последовательность точек | |
GTK_BORDER_STYLE_DASHED | Последовательность штрихов с квадратными концами | |
GTK_BORDER_STYLE_DOUBLE | Две параллельные линии с промежутком между ними | |
GTK_BORDER_STYLE_GROOVE | Граница выглядит так, как будто выгравирована | |
GTK_BORDER_STYLE_RIDGE | Граница выглядит так, как будто выпирает наружу |
GtkStyleContext
typedef struct _GtkStyleContext GtkStyleContext;
перечисление GtkStyleContextPrintFlags
Флаги, которые изменяют поведение gtk_style_context_to_string(). Новые значения могут быть добавлены в это перечисление.
Члены
GTK_STYLE_CONTEXT_PRINT_NONE | Значение по умолчанию. | |
GTK_STYLE_CONTEXT_PRINT_RECURSE | Печать всего дерева узлов CSS, начиная с узла контекста стиля | |
GTK_STYLE_CONTEXT_PRINT_SHOW_STYLE | Отображение значений свойств CSS для каждого узла | |
GTK_STYLE_CONTEXT_PRINT_SHOW_CHANGE | Отображение информации о внесённых изменениях, влияющих на стили |
структура GtkBorder
struct GtkBorder {
gint16 left;
gint16 right;
gint16 top;
gint16 bottom;
};
Структура, определяющая границу прямоугольной области с различной шириной на каждой стороне.
Члены
gint16 | Ширина левой границы | |
gint16 | Ширина правой границы | |
gint16 | Ширина верхней границы | |
gint16 | Ширина нижней границы |
Подробное описание свойств
Свойство “display”
“display” GdkDisplay *
Связанный GdkDisplay.
Владелец: GtkStyleContext
Флаги: Чтение / Запись
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer-old.gnome.org/gtk4/4.0/GtkStyleContext.html