GtkContainer
GtkContainer — Базовый класс для виджетов, содержащих другие виджеты
Функции
Свойства
| guint | border-width | Чтение / Запись |
| GtkWidget * | child | Запись |
| GtkResizeMode | resize-mode | Чтение / Запись |
Сигналы
| void | add | Run First |
| void | check-resize | Run Last |
| void | remove | Run First |
| void | set-focus-child | Run First |
Типы и значения
| struct | GtkContainer |
| struct | GtkContainerClass |
| enum | GtkResizeMode |
Иерархия объектов
GObject ╰── GInitiallyUnowned ╰── GtkWidget ╰── GtkContainer ├── GtkBin ├── GtkBox ├── GtkFixed ├── GtkFlowBox ├── GtkGrid ├── GtkHeaderBar ├── GtkPaned ├── GtkIconView ├── GtkLayout ├── GtkListBox ├── GtkMenuShell ├── GtkNotebook ├── GtkSocket ├── GtkStack ├── GtkTable ├── GtkTextView ├── GtkToolbar ├── GtkToolItemGroup ├── GtkToolPalette ╰── GtkTreeView
Реализованные интерфейсы
GtkContainer реализует AtkImplementorIface и GtkBuildable.
Включаемые файлы
#include <gtk/gtk.h>
Описание
Интерфейс пользователя GTK+ создается путем вложенности виджетов друг в друга. Виджеты-контейнеры являются внутренними узлами в результирующем дереве виджетов: они содержат другие виджеты. Например, вы можете иметь GtkWindow, содержащий GtkFrame, который, в свою очередь, содержит GtkLabel. Если вам нужна картинка вместо текстовой метки внутри рамки, можно заменить GtkLabel виджетом GtkImage.
В GTK+ существуют два основных типа виджетов-контейнеров. Оба являются подклассами абстрактного базового класса GtkContainer.
Первый тип виджетов-контейнеров имеет один дочерний виджет и наследуется от GtkBin. Эти контейнеры являются декораторами, которые добавляют определенный функционал к дочернему элементу. Например, GtkButton превращает свой дочерний элемент в нажимаемую кнопку; GtkFrame рисует рамку вокруг своего дочернего элемента, а GtkWindow помещает свой дочерний виджет в окно верхнего уровня.
Второй тип контейнера может иметь более одного дочернего элемента; его цель — управление макетом. Это означает, что эти контейнеры назначают размеры и позиции своим дочерним элементам. Например, GtkHBox выстраивает свои дочерние элементы в горизонтальный ряд, а GtkGrid выстраивает содержащиеся в нем виджеты в двумерной сетке.
Для реализаций GtkContainer виртуальный метод GtkContainerClass.forall() всегда требуется, так как он используется для рисования и других внутренних операций с дочерними элементами. Если реализация GtkContainer ожидает наличие дочерних элементов, не являющихся внутренними, необходимо реализовать как GtkContainerClass.add(), так и GtkContainerClass.remove(). Если реализация GtkContainer имеет внутренние дочерние элементы, они должны быть добавлены с помощью gtk_widget_set_parent() в init() и удалены с помощью gtk_widget_unparent() в реализации GtkWidgetClass.destroy(). Дополнительную информацию о реализации пользовательских виджетов можно найти на https://wiki.gnome.org/HowDoI/CustomWidgets
Высота для управления геометрией по ширине
GTK+ использует систему управления геометрией «высота для ширины» (и «ширина для высоты»). «Высота для ширины» означает, что виджет может изменять необходимое вертикальное пространство в зависимости от предоставленного горизонтального пространства (и аналогично для «ширина для высоты»).
Следует учитывать некоторые моменты при реализации виджетов-контейнеров, использующих систему управления геометрией GTK+ «высота для ширины». Во-первых, важно отметить, что контейнер должен отдавать приоритет одному из измерений, то есть виджет или контейнер может иметь только GtkSizeRequestMode, который является GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH или GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT. Однако каждый виджет и контейнер должен уметь реагировать на API для обоих измерений, то есть даже если виджет имеет режим запроса «высота для ширины», его родитель может запросить его размеры с помощью API «ширина для высоты».
Чтобы обеспечить правильную работу, при реализации контейнеров «высота для ширины» (или «ширина для высоты») необходимо соблюдать следующие рекомендации.
Каждый режим запроса включает 2 виртуальных метода. API «высота для ширины» проходят через gtk_widget_get_preferred_width(), а затем через gtk_widget_get_preferred_height_for_width(). При обработке запросов в обратном GtkSizeRequestMode важно, чтобы каждый виджет запрашивал по крайней мере достаточно места для отображения всего своего содержимого в любое время.
Когда вызывается gtk_widget_get_preferred_height() для контейнера, который имеет режим «высота для ширины», контейнер должен вернуть высоту для его минимальной ширины. Это легко достигается путем простого вызова обратных API, реализованных для него следующим образом:
Аналогично, когда вызывается gtk_widget_get_preferred_width_for_height() для контейнера или виджета, который имеет режим «высота для ширины», ему нужно только вернуть базовую минимальную ширину, как показано ниже:
Запросы «высота для ширины» обычно реализуются в терминах виртуального распределения виджетов в входном направлении. Предположим, что режим запроса «высота для ширины»; контейнер реализует виртуальную функцию get_preferred_height_for_width() путем сначала вызова gtk_widget_get_preferred_width() для каждого из своих дочерних элементов.
Для каждой потенциальной группы дочерних элементов, расположенных в ряд, значения, возвращаемые функцией gtk_widget_get_preferred_width(), должны быть собраны в массив структур GtkRequestedSize. Любое расстояние между дочерними элементами должно быть удалено из входного параметра for_width, а затем общий размер должен быть распределен с помощью функции-помощника gtk_distribute_natural_allocation().
Затем контейнер переходит к запросу предпочтительной высоты для каждого дочернего элемента, используя gtk_widget_get_preferred_height_for_width() и используя размеры, сохраненные в массиве GtkRequestedSize.
Для распределения контейнера «высота для ширины» важно учитывать, что контейнер должен отдавать приоритет одному измерению. Итак, если контейнер — это контейнер «высота для ширины», он должен сначала распределить все виджеты по горизонтали, используя массив GtkRequestedSize и gtk_distribute_natural_allocation(), а затем добавить любое дополнительное пространство (если и где это необходимо) для расширения виджета.
После добавления всего пространства для расширения контейнер предполагает, что ему была предоставлена достаточная высота для размещения всего его содержимого. В этот момент контейнер должен использовать общие горизонтальные размеры каждого виджета для запроса высоты «высота для ширины» каждого из его дочерних элементов и сохранять запросы в массиве GtkRequestedSize для любых виджетов, которые выстраиваются вертикально (для табличных контейнеров это можно обобщить на высоты и ширины строк и столбцов). Затем вертикальное пространство должно быть снова распределено с помощью gtk_distribute_natural_allocation(), учитывая при этом выделенную высоту виджета за вычетом любого вертикального отступа, добавляемого контейнером. Затем следует добавить вертикальное пространство для расширения, где это уместно и доступно, и контейнер должен приступить к фактическому размещению дочерних виджетов.
См. раздел управления геометрией GtkWidget, чтобы узнать больше о реализации управления геометрией «высота для ширины» для виджетов.
Свойства дочерних элементов
GtkContainer вводит свойства дочерних элементов. Это свойства объектов, которые не относятся ни к контейнеру, ни к содержащему виджету, а скорее к их взаимосвязи. Типичные примеры свойств дочерних элементов — это позиция или тип размещения виджета, который содержится в GtkBox.
Используйте gtk_container_class_install_child_property() для установки свойств дочерних элементов для класса контейнера и gtk_container_class_find_child_property() или gtk_container_class_list_child_properties() для получения информации о существующих свойствах дочерних элементов.
Для установки значения свойства дочернего элемента используйте gtk_container_child_set_property(), gtk_container_child_set() или gtk_container_child_set_valist(). Для получения значения свойства дочернего элемента используйте gtk_container_child_get_property(), gtk_container_child_get() или gtk_container_child_get_valist(). Для отправки уведомлений об изменениях свойств дочерних элементов используйте gtk_widget_child_notify().
GtkContainer как GtkBuildable
Реализация GtkContainer интерфейса GtkBuildable поддерживает элемент <packing> для дочерних элементов, который может содержать несколько элементов <property>, задающих свойства дочерних элементов.
Начиная с версии 2.16, свойства дочерних элементов также могут быть помечены как переводимые с помощью тех же атрибутов «translatable», «comments» и «context», что используются для обычных свойств.
Начиная с версии 3.16, контейнеры могут иметь элемент <focus-chain>, содержащий несколько элементов <widget>, по одному для каждого дочернего элемента, который должен быть добавлен в цепочку фокуса. Атрибут «name» задаёт идентификатор виджета.
Пример этих свойств в определениях пользовательского интерфейса:
static void
foo_container_get_preferred_height (GtkWidget *widget,
gint *min_height,
gint *nat_height)
{
if (i_am_in_height_for_width_mode)
{
gint min_width;
GTK_WIDGET_GET_CLASS (widget)->get_preferred_width (widget,
&min_width,
NULL);
GTK_WIDGET_GET_CLASS (widget)->get_preferred_height_for_width
(widget,
min_width,
min_height,
nat_height);
}
else
{
... many containers support both request modes, execute the
real width-for-height request here by returning the
collective heights of all widgets that are stacked
vertically (or whatever is appropriate for this container)
...
}
}Функции
GTK_IS_RESIZE_CONTAINER()
#define GTK_IS_RESIZE_CONTAINER(widget)
GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID()
#define GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID(object, property_id, pspec)
Эта макрокоманда должна использоваться для выдачи стандартного предупреждения о неожиданных свойствах в реализациях set_child_property() и get_child_property().
Параметры
object | объект GObject, для которого был вызван | |
property_id | числовой идентификатор свойства | |
pspec | объект GParamSpec свойства |
gtk_container_add ()
void gtk_container_add (GtkContainer *container,GtkWidget *widget);
Добавляет widget в container. Обычно используется для простых контейнеров, таких как GtkWindow, GtkFrame или GtkButton; для более сложных контейнеров макета, таких как GtkBox или GtkGrid, эта функция выберет параметры компоновки по умолчанию, которые могут быть неверными. Поэтому рассмотрите функции, такие как gtk_box_pack_start() и gtk_grid_attach() в качестве альтернативы gtk_container_add() в этих случаях. Виджет может быть добавлен только в один контейнер за раз; вы не можете поместить один и тот же виджет в два разных контейнера.
Обратите внимание, что некоторые контейнеры, такие как GtkScrolledWindow или GtkListBox, могут добавлять промежуточные дочерние элементы между добавленным виджетом и контейнером.
Параметры
container | объект GtkContainer | |
widget | виджет, который нужно поместить внутрь |
gtk_container_remove ()
void gtk_container_remove (GtkContainer *container,GtkWidget *widget);
Удаляет widget из container. widget должен находиться внутри container. Обратите внимание, что container будет владеть ссылкой на widget, и это может быть последняя удерживаемая ссылка; поэтому удаление виджета из его контейнера может уничтожить этот виджет. Если вы хотите снова использовать widget, вам нужно добавить ссылку на него перед удалением из контейнера, используя g_object_ref(). Если вы не хотите снова использовать widget, обычно эффективнее просто уничтожить его напрямую, используя gtk_widget_destroy(), так как это удалит его из контейнера и поможет разорвать любые циклические ссылки.
Параметры
container | объект GtkContainer | |
widget | текущий дочерний элемент |
gtk_container_add_with_properties ()
void gtk_container_add_with_properties (GtkContainer *container,GtkWidget *widget,const gchar *first_prop_name,...);
Добавляет widget в container, одновременно устанавливая свойства дочерних элементов. См. gtk_container_add() и gtk_container_child_set() для получения дополнительной информации.
Параметры
container | объект GtkContainer | |
widget | виджет, который нужно поместить внутрь | |
first_prop_name | имя первого дочернего свойства для установки | |
... |
|
gtk_container_get_resize_mode ()
GtkResizeMode
gtk_container_get_resize_mode (GtkContainer *container); gtk_container_get_resize_mode устарел с версии 3.12 и не должен использоваться в новом коде.
Режимы изменения размера устарели. Они больше не нужны с часами кадров и могут ввести неясные ошибки, если используются.
Возвращает режим изменения размера для контейнера. См. gtk_container_set_resize_mode().
Параметры
container | объект GtkContainer |
Возвращает
текущий режим изменения размера
gtk_container_set_resize_mode ()
void gtk_container_set_resize_mode (GtkContainer *container,GtkResizeMode resize_mode);
gtk_container_set_resize_mode устарел с версии 3.12 и не должен использоваться в новом коде.
Режимы изменения размера устарели. Они больше не нужны с часами кадров и могут ввести неясные ошибки, если используются.
Устанавливает режим изменения размера для контейнера.
Режим изменения размера контейнера определяет, будет ли запрос изменения размера передан родителю контейнера, помещён в очередь для последующего выполнения или выполнен немедленно.
Параметры
container | объект GtkContainer | |
resize_mode | новый режим изменения размера |
gtk_container_check_resize ()
void
gtk_container_check_resize (GtkContainer *container); gtk_container_foreach ()
void gtk_container_foreach (GtkContainer *container,GtkCallback callback,gpointer callback_data);
Вызывает callback для каждого дочернего элемента, не являющегося внутренним элементом container. См. gtk_container_forall() для получения подробностей о том, что считается «внутренним» дочерним элементом. Для всех практических целей эта функция должна перебирать именно те дочерние виджеты, которые были добавлены в контейнер приложением с явными add() вызовами.
Большинству приложений следует использовать gtk_container_foreach(), а не gtk_container_forall().
Параметры
container | объект GtkContainer | |
callback | обратный вызов. | [scope call] |
callback_data | данные пользователя обратного вызова |
gtk_container_get_children ()
GList *
gtk_container_get_children (GtkContainer *container); Возвращает дочерние элементы контейнера, не являющиеся внутренними. Подробнее о том, что считается «внутренним» дочерним элементом, см. gtk_container_forall().
Параметры
container |
Возвращаемое значение
новый список дочерних элементов контейнера, не являющихся внутренними.
[element-type GtkWidget][transfer container]
gtk_container_get_path_for_child ()
GtkWidgetPath * gtk_container_get_path_for_child (GtkContainer *container,GtkWidget *child);
Возвращает новый путь виджета, представляющий всю иерархию виджетов от верхнего уровня до и включая child .
Параметры
container | ||
child | дочерний элемент |
Возвращаемое значение
Новый созданный GtkWidgetPath
gtk_container_set_reallocate_redraws ()
void gtk_container_set_reallocate_redraws (GtkContainer *container,gboolean needs_redraws);
gtk_container_set_reallocate_redraws устарел начиная с версии 3.14 и не должен использоваться в новом коде.
Вызовите gtk_widget_queue_draw() в обработчике size_allocate.
Устанавливает флаг reallocate_redraws контейнера заданному значению.
Контейнеры, запрашивающие перерисовки при перераспределении, автоматически перерисовываются, если происходит изменение размеров любого из их дочерних элементов.
Параметры
container | ||
needs_redraws | новое значение флага |
gtk_container_get_focus_child ()
GtkWidget *
gtk_container_get_focus_child (GtkContainer *container); Возвращает текущий виджет-потомка, который получит фокус внутри container. Это не текущий виджет с фокусом. Его можно получить, вызвав gtk_window_get_focus().
Параметры
container |
Возвращаемое значение
дочерний виджет, который получит фокус внутри container, когда container получит фокус, или NULL, если он не задан.
[nullable][transfer none]
С: 2.14
gtk_container_set_focus_child ()
void gtk_container_set_focus_child (GtkContainer *container,GtkWidget *child);
Устанавливает (или сбрасывает, если child равен NULL) виджет-потомка с фокусом для container .
Эта функция генерирует сигнал GtkContainer::set_focus_child для container. Реализации GtkContainer могут переопределить стандартное поведение, переопределяя обработчик этого сигнала.
Эта функция предназначена в основном для использования виджетами. Приложения могут использовать gtk_widget_grab_focus() для ручного установки фокуса на определённый виджет.
Параметры
container | ||
child | [allow-none] |
gtk_container_get_focus_vadjustment ()
GtkAdjustment *
gtk_container_get_focus_vadjustment (GtkContainer *container); Возвращает вертикальную настройку фокуса для контейнера. См. gtk_container_set_focus_vadjustment().
Параметры
container |
Возвращаемое значение
вертикальную настройку фокуса или NULL, если она не задана.
[nullable][transfer none]
gtk_container_set_focus_vadjustment ()
void gtk_container_set_focus_vadjustment (GtkContainer *container,GtkAdjustment *adjustment);
Подключает настройку к обработке фокуса в контейнере, так что при получении фокуса дочерним элементом контейнера, настройка прокручивается, чтобы показать этот элемент. Эта функция устанавливает вертикальное выравнивание. См. gtk_scrolled_window_get_vadjustment() для типичного способа получения настройки и gtk_container_set_focus_hadjustment() для настройки горизонтальной настройки.
Настройки должны быть в пикселях и в той же системе координат, что и выделение для непосредственных дочерних элементов контейнера.
Параметры
container | ||
adjustment | настройка, которая должна быть скорректирована при перемещении фокуса среди потомков |
gtk_container_get_focus_hadjustment ()
GtkAdjustment *
gtk_container_get_focus_hadjustment (GtkContainer *container); Возвращает горизонтальную настройку фокуса для контейнера. См. gtk_container_set_focus_hadjustment().
Параметры
container |
Возвращаемое значение
горизонтальную настройку фокуса или NULL, если она не задана.
[nullable][transfer none]
gtk_container_set_focus_hadjustment ()
void gtk_container_set_focus_hadjustment (GtkContainer *container,GtkAdjustment *adjustment);
Подключает корректировку для обработки фокуса в контейнере, поэтому при фокусировке дочернего элемента контейнера корректировка прокручивается, чтобы показать этот виджет. Эта функция устанавливает горизонтальное выравнивание. См. gtk_scrolled_window_get_hadjustment() для типичного способа получения корректировки и gtk_container_set_focus_vadjustment() для установки вертикальной корректировки.
Корректировки должны быть в пиксельных единицах и в той же системе координат, что и выделение для непосредственных дочерних элементов контейнера.
Параметры
container | ||
adjustment | корректировка, которая должна быть скорректирована при перемещении фокуса среди потомков |
gtk_container_resize_children ()
void
gtk_container_resize_children (GtkContainer *container); gtk_container_resize_children устарело с версии 3.10 и не должно использоваться в новом коде.
Параметры
container |
gtk_container_child_type ()
GType
gtk_container_child_type (GtkContainer *container); Возвращает тип дочерних элементов, поддерживаемых контейнером.
Обратите внимание, что это может вернуть G_TYPE_NONE для указания того, что больше дочерних элементов добавить нельзя, например, для GtkPaned, у которого уже есть два дочерних элемента.
Параметры
container |
Возвращаемое значение
a GType.
gtk_container_child_get ()
void gtk_container_child_get (GtkContainer *container,GtkWidget *child,const gchar *first_prop_name,...);
Получает значения одного или нескольких свойств дочерних элементов для child и container .
Параметры
container | ||
child | виджет, являющийся дочерним элементом | |
first_prop_name | имя первого свойства для получения | |
... | место для возврата первого свойства, за которым необязательно следуют пары имя/место возврата, завершаемые |
gtk_container_child_set ()
void gtk_container_child_set (GtkContainer *container,GtkWidget *child,const gchar *first_prop_name,...);
Устанавливает одно или несколько свойств дочерних элементов для child и container .
Параметры
container | ||
child | виджет, являющийся дочерним элементом | |
first_prop_name | имя первого свойства для установки | |
... | список свойств и значений, завершаемый |
gtk_container_child_get_property ()
void gtk_container_child_get_property (GtkContainer *container,GtkWidget *child,const gchar *property_name,GValue *value);
Получает значение свойства дочернего элемента для child и container .
Параметры
container | ||
child | виджет, являющийся дочерним элементом | |
property_name | имя свойства для получения | |
value | место для возврата значения |
gtk_container_child_set_property ()
void gtk_container_child_set_property (GtkContainer *container,GtkWidget *child,const gchar *property_name,const GValue *value);
Устанавливает свойство дочернего элемента для child и container .
Параметры
container | ||
child | виджет, являющийся дочерним элементом | |
property_name | имя свойства для установки | |
value | значение для установки свойства |
gtk_container_child_get_valist ()
void gtk_container_child_get_valist (GtkContainer *container,GtkWidget *child,const gchar *first_property_name,va_list var_args);
Получает значения одного или нескольких свойств дочерних элементов для child и container .
Параметры
container | ||
child | виджет, являющийся дочерним элементом | |
first_property_name | имя первого свойства для получения | |
var_args | место для возврата первого свойства, за которым необязательно следуют пары имя/место возврата, завершаемые |
gtk_container_child_set_valist ()
void gtk_container_child_set_valist (GtkContainer *container,GtkWidget *child,const gchar *first_property_name,va_list var_args);
Устанавливает одно или несколько свойств дочерних элементов для child и container .
Параметры
container | ||
child | виджет, являющийся дочерним элементом | |
first_property_name | имя первого свойства для установки | |
var_args | список свойств и значений, завершаемый |
gtk_container_child_notify ()
void gtk_container_child_notify (GtkContainer *container,GtkWidget *child,const gchar *child_property);
Вызывает сигнал “child-notify” для свойства ребёнка child_property у ребёнка.
Это аналог g_object_notify() для свойств ребёнка.
Также см. gtk_widget_child_notify().
Параметры
контейнер | контейнер GtkContainer | |
ребёнок | виджет-ребёнок | |
свойство_ребёнка | имя свойства ребёнка, установленного для класса |
С: 3.2
gtk_container_child_notify_by_pspec ()
void gtk_container_child_notify_by_pspec (GtkContainer *container,GtkWidget *child,GParamSpec *pspec);
Вызывает сигнал “child-notify” для свойства ребёнка, указанного в pspec, у ребёнка.
Это аналог g_object_notify_by_pspec() для свойств ребёнка.
Параметры
контейнер | контейнер GtkContainer | |
ребёнок | виджет-ребёнок | |
pspec | GParamSpec свойства ребёнка, установленного для класса |
С: 3.18
gtk_container_forall ()
void gtk_container_forall (GtkContainer *container,GtkCallback callback,gpointer callback_data);
Вызывает callback для каждого непосредственного ребёнка container, включая детей, которые считаются «внутренними» (детали реализации контейнера). «Внутренние» дети, как правило, не добавлялись пользователем контейнера, а добавлялись самой реализацией контейнера.
Большинство приложений должны использовать gtk_container_foreach() вместо gtk_container_forall().
[virtual forall]
Параметры
контейнер | контейнер GtkContainer | |
обработчик | обработчик. | [scope call][closure callback_data] |
callback_data | пользовательские данные обратного вызова |
gtk_container_get_border_width ()
guint
gtk_container_get_border_width (GtkContainer *container); Возвращает ширину границы контейнера. См. gtk_container_set_border_width().
Параметры
контейнер | контейнер GtkContainer |
Возвращает
текущая ширина границы
gtk_container_set_border_width ()
void gtk_container_set_border_width (GtkContainer *container,guint border_width);
Устанавливает ширину границы контейнера.
Ширина границы контейнера — это пространство, оставляемое вокруг внешней стороны контейнера. Исключением является GtkWindow; так как верхние окна не могут оставлять пространство снаружи, они оставляют его внутри. Граница добавляется ко всем сторонам контейнера. Чтобы добавить пространство только к одной стороне, используйте соответствующее свойство “margin” виджета-ребёнка, например, “margin-top”.
Параметры
контейнер | контейнер GtkContainer | |
border_width | количество пустого пространства, оставляемого за пределами контейнера. Допустимые значения находятся в диапазоне от 0 до 65535 пикселей. |
gtk_container_propagate_draw ()
void gtk_container_propagate_draw (GtkContainer *container,GtkWidget *child,cairo_t *cr);
Когда контейнер получает вызов функции рисования, он должен отправлять синтетические вызовы “draw” всем детям, у которых нет собственных GdkWindows. Эта функция предоставляет удобный способ сделать это. Контейнер, когда он получает вызов своей функции “draw”, вызывает gtk_container_propagate_draw() один раз для каждого ребёнка, передавая cr, полученное контейнером.
gtk_container_propagate_draw() позаботится о переводе начала координат cr и о принятии решения о необходимости отправки вызова draw ребёнку. Это удобный и оптимизированный способ получить тот же эффект, что и при вызове gtk_widget_draw() для ребёнка напрямую.
В большинстве случаев контейнер может просто унаследовать реализацию “draw” от GtkContainer или выполнить некоторое рисование, а затем перейти к реализации ::draw из GtkContainer.
Параметры
контейнер | контейнер GtkContainer | |
ребёнок | ребёнок | |
cr | контекст Cairo, переданный контейнеру. Если вы хотите использовать |
gtk_container_get_focus_chain ()
gboolean gtk_container_get_focus_chain (GtkContainer *container,GList **focusable_widgets);
Получает цепочку фокуса контейнера, если она была явно задана. Если цепочка фокуса не была явно задана, GTK+ вычисляет её на основе позиций дочерних элементов. В этом случае GTK+ сохраняет NULL в focusable_widgets и возвращает FALSE.
Параметры
container | объект GtkContainer | |
focusable_widgets | место для хранения цепочки фокуса контейнера или | [element-type GtkWidget][out][transfer container] |
Возвращаемое значение
TRUE, если цепочка фокуса контейнера была явно задана.
gtk_container_set_focus_chain ()
void gtk_container_set_focus_chain (GtkContainer *container,GList *focusable_widgets);
Устанавливает цепочку фокуса, переопределяя автоматически вычисленную GTK+.
В теории каждый элемент в цепочке должен быть потомком контейнера, но это ограничение не проверяется в данном методе, так как разрешено устанавливать цепочку фокуса до добавления элементов или иметь элемент в цепочке, который не всегда отображается. Необходимые проверки выполняются при фактическом прохождении по цепочке фокуса.
Параметры
container | объект GtkContainer | |
focusable_widgets | новая цепочка фокуса. | [transfer none][element-type GtkWidget] |
gtk_container_unset_focus_chain ()
void
gtk_container_unset_focus_chain (GtkContainer *container); Удаляет цепочку фокуса, установленную явно с помощью gtk_container_set_focus_chain().
Параметры
container | объект GtkContainer |
gtk_container_class_find_child_property ()
GParamSpec * gtk_container_class_find_child_property (GObjectClass *cclass,const gchar *property_name);
Находит свойство дочернего элемента класса контейнера по имени.
Параметры
cclass | объект GtkContainerClass. | [type GtkContainerClass] |
property_name | имя свойства дочернего элемента для поиска |
Возвращаемое значение
GParamSpec свойства дочернего элемента или NULL, если у class нет свойства дочернего элемента с этим именем.
[nullable][transfer none]
gtk_container_class_install_child_property ()
void gtk_container_class_install_child_property (GtkContainerClass *cclass,guint property_id,GParamSpec *pspec);
Устанавливает свойство дочернего элемента для класса контейнера.
Параметры
cclass | объект GtkContainerClass | |
property_id | идентификатор свойства | |
pspec | GParamSpec для свойства |
gtk_container_class_install_child_properties ()
void gtk_container_class_install_child_properties (GtkContainerClass *cclass,guint n_pspecs,GParamSpec **pspecs);
Устанавливает свойства дочерних элементов для класса контейнера.
Параметры
cclass | объект GtkContainerClass | |
n_pspecs | длина массива GParamSpec | |
pspecs | массив GParamSpec, определяющий новые свойства дочерних элементов. | [array length=n_pspecs] |
С: 3.18
gtk_container_class_list_child_properties ()
GParamSpec ** gtk_container_class_list_child_properties (GObjectClass *cclass,guint *n_properties);
Возвращает все свойства дочерних элементов класса контейнера.
Параметры
cclass | объект GtkContainerClass. | [type GtkContainerClass] |
n_properties | место для возврата количества найденных свойств дочерних элементов |
Возвращаемое значение
новый динамически выделенный массив NULL-завершаемых указателей на GParamSpec*. Массив должен быть освобождён с помощью g_free().
[array length=n_properties][transfer container]
gtk_container_class_handle_border_width ()
void
gtk_container_class_handle_border_width
(GtkContainerClass *klass); Изменяет подкласс GtkContainerClass, чтобы автоматически добавлять и удалять настройку border-width для GtkContainer. Это позволяет подклассу игнорировать ширину границы в методах запроса размера и выделения. Цель заключается в том, чтобы подкласс вызывал это в функции class_init.
gtk_container_class_handle_border_width() необходим, потому что слишком сильно нарушит API, если сделать это поведение по умолчанию. Поэтому подклассы должны «выбрать» обработку border_width родительским классом.
Параметры
klass | структура класса подкласса GtkContainer |
Типы и значения
struct GtkContainer
struct GtkContainer;
struct GtkContainerClass
struct GtkContainerClass {
GtkWidgetClass parent_class;
void (*add) (GtkContainer *container,
GtkWidget *widget);
void (*remove) (GtkContainer *container,
GtkWidget *widget);
void (*check_resize) (GtkContainer *container);
void (*forall) (GtkContainer *container,
gboolean include_internals,
GtkCallback callback,
gpointer callback_data);
void (*set_focus_child) (GtkContainer *container,
GtkWidget *child);
GType (*child_type) (GtkContainer *container);
gchar* (*composite_name) (GtkContainer *container,
GtkWidget *child);
void (*set_child_property) (GtkContainer *container,
GtkWidget *child,
guint property_id,
const GValue *value,
GParamSpec *pspec);
void (*get_child_property) (GtkContainer *container,
GtkWidget *child,
guint property_id,
GValue *value,
GParamSpec *pspec);
GtkWidgetPath * (*get_path_for_child) (GtkContainer *container,
GtkWidget *child);
};
Базовый класс для контейнеров.
Члены
| Сигнал, генерируемый при добавлении виджета в контейнер. | |
| Сигнал, генерируемый при удалении виджета из контейнера. | |
| Сигнал, генерируемый при необходимости перерасчёта размеров. | |
| Вызывает обратный вызов для каждого дочернего элемента контейнера. | |
| Устанавливает фокусированный дочерний элемент контейнера. | |
| Возвращает тип поддерживаемых дочерних элементов контейнера. | |
| Получает составное имя виджета. Устаревшее: 3.10. | |
| Устанавливает свойство дочернего элемента контейнера. | |
| Получает свойство дочернего элемента контейнера. | |
| Получает путь, представляющий всю иерархию виджетов сверху вниз, включая |
перечисление GtkResizeMode
Члены
GTK_RESIZE_PARENT | Передаёт запрос на изменение размера родительскому элементу | |
GTK_RESIZE_QUEUE | Очередь изменений размера для этого виджета | |
GTK_RESIZE_IMMEDIATE | Изменение размера немедленно. Устаревшее. |
Подробности свойств
Свойство “border-width”
“border-width” guint
Ширина пустого поля снаружи дочерних элементов контейнера.
Флаги: Чтение / Запись
Допустимые значения: <= 65535
Значение по умолчанию: 0
Свойство “child”
“child” GtkWidget *
Может быть использовано для добавления нового дочернего элемента в контейнер.
Флаги: Запись
Свойство “resize-mode”
“resize-mode” GtkResizeMode
Указывает, как обрабатываются события изменения размера.
Флаги: Чтение / Запись
Значение по умолчанию: GTK_RESIZE_PARENT
Подробности сигналов
Сигнал “add”
void user_function (GtkContainer *container, GtkWidget *widget, gpointer user_data)
Флаги: Первым выполняется
Сигнал “check-resize”
void user_function (GtkContainer *container, gpointer user_data)
Флаги: Последним выполняется
Сигнал “remove”
void user_function (GtkContainer *container, GtkWidget *widget, gpointer user_data)
Флаги: Первым выполняется
Сигнал “set-focus-child”
void user_function (GtkContainer *container, GtkWidget *widget, gpointer user_data)
Флаги: Первым выполняется
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.22/GtkContainer.html