GtkContainer
GtkContainer — Базовый класс для виджетов, содержащих другие виджеты
Функции
| GParamSpec ** | gtk_container_class_list_child_properties () |
| void | gtk_container_class_handle_border_width () |
Свойства
| guint | border-width | Чтение / Запись |
| GtkWidget * | child | Запись |
| GtkResizeMode | resize-mode | Чтение / Запись |
Сигналы
| void | add | Выполняется первым |
| void | check-resize | Выполняется последним |
| void | remove | Выполняется первым |
| void | set-focus-child | Выполняется первым |
Типы и значения
| 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() вызовами.
Разрешается удалить дочерний элемент из обработчика callback.
Большинство приложений должны использовать 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 | объект GtkContainer |
Возвращаемое значение
новый список дочерних элементов контейнера, не являющихся внутренними.
[element-type GtkWidget][transfer container]
gtk_container_get_path_for_child ()
GtkWidgetPath * gtk_container_get_path_for_child (GtkContainer *container,GtkWidget *child);
Возвращает новый путь виджета, представляющий иерархию виджетов от верхнего уровня до и включая child .
Параметры
container | объект GtkContainer | |
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 | объект GtkContainer | |
needs_redraws | новое значение флага |
gtk_container_get_focus_child ()
GtkWidget *
gtk_container_get_focus_child (GtkContainer *container); Возвращает текущий виджет, получивший фокус внутри container . Это не текущий виджет с фокусом. Его можно получить, вызвав gtk_window_get_focus().
Параметры
container | объект GtkContainer |
Возвращаемое значение
дочерний виджет, получивший фокус внутри container при фокусе container , или NULL если таковой не установлен.
[nullable][transfer none]
С: 2.14
gtk_container_set_focus_child ()
void gtk_container_set_focus_child (GtkContainer *container,GtkWidget *child);
Устанавливает или отменяет фокусировку дочернего элемента container, если child равно NULL.
Данная функция излучает сигнал GtkContainer::set_focus_child объекта container. Реализации GtkContainer могут переопределить стандартное поведение, переопределив обработку этого сигнала.
Эта функция в основном предназначена для использования виджетами. Приложения могут использовать gtk_widget_grab_focus() для ручного установки фокуса на определенный виджет.
Параметры
container | объект GtkContainer | |
child | объект GtkWidget или | [allow-none] |
gtk_container_get_focus_vadjustment ()
GtkAdjustment *
gtk_container_get_focus_vadjustment (GtkContainer *container); Получает вертикальную настройку фокуса для контейнера. Смотрите gtk_container_set_focus_vadjustment().
Параметры
container | объект GtkContainer |
Возвращаемое значение
вертикальная настройка фокуса, или 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 | объект GtkContainer | |
adjustment | настройка, которая должна быть скорректирована при перемещении фокуса среди потомков |
gtk_container_get_focus_hadjustment ()
GtkAdjustment *
gtk_container_get_focus_hadjustment (GtkContainer *container); Получает горизонтальную настройку фокуса для контейнера. Смотрите gtk_container_set_focus_hadjustment().
Параметры
container | объект GtkContainer |
Возвращаемое значение
горизонтальная настройка фокуса, или 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]
Параметры
контейнер | ||
обработчик | обработчик. | [scope call][closure callback_data] |
данные_обработчика | пользовательские данные обработчика |
gtk_container_get_border_width ()
guint
gtk_container_get_border_width (GtkContainer *container); Возвращает ширину границы контейнера. См. gtk_container_set_border_width().
Параметры
контейнер |
Возвращает
текущую ширину границы
gtk_container_set_border_width ()
void gtk_container_set_border_width (GtkContainer *container,guint border_width);
Устанавливает ширину границы контейнера.
Ширина границы контейнера — это количество места, которое следует оставить снаружи контейнера. Единственное исключение — GtkWindow; так как верхние окна не могут оставлять пространство снаружи, они оставляют пространство внутри. Граница добавляется по всем сторонам контейнера. Чтобы добавить пространство только с одной стороны, используйте конкретное свойство “margin” дочернего виджета, например, “margin-top”.
Параметры
контейнер | ||
ширина_границы | количество пустого пространства, которое следует оставить снаружи контейнера. Допустимые значения находятся в диапазоне от 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 и решении вопроса о необходимости отправки рисования дочернему элементу. Это удобный и оптимизированный способ получить тот же эффект, что и вызов gtk_widget_draw() непосредственно на дочернем элементе.
В большинстве случаев контейнер может просто унаследовать реализацию “draw” от GtkContainer или выполнить некоторое рисование, а затем перейти к реализации ::draw от GtkContainer.
Параметры
контейнер | ||
дочерний элемент | дочерний элемент | |
cr | контекст Cairo, переданный контейнеру. Если вы хотите использовать |
gtk_container_get_focus_chain ()
gboolean gtk_container_get_focus_chain (GtkContainer *container,GList **focusable_widgets);
gtk_container_get_focus_chain устарело начиная с версии 3.24 и не должно использоваться в новых кодах.
Для переопределения поведения фокуса используйте сигнал GtkWidgetClass::focus.
Возвращает цепочку фокуса контейнера, если она была явно задана. Если цепочка фокуса не была явно задана, GTK+ вычисляет цепочку фокуса на основе расположения дочерних элементов. В этом случае GTK+ сохраняет NULL в focusable_widgets и возвращает FALSE.
Параметры
container | ||
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_set_focus_chain устарело начиная с версии 3.24 и не должно использоваться в новых кодах.
Для переопределения поведения фокуса используйте сигнал GtkWidgetClass::focus.
Устанавливает цепочку фокуса, переопределяя автоматически вычисляемую GTK+.
В принципе, каждый виджет в цепочке должен быть потомком контейнера, но это не проверяется этим методом, так как разрешается установить цепочку фокуса до добавления виджетов или иметь виджет в цепочке, который не всегда отображается. Необходимые проверки выполняются при фактическом прохождении по цепочке фокуса.
Параметры
container | ||
focusable_widgets | новая цепочка фокуса. | [transfer none][element-type GtkWidget] |
gtk_container_unset_focus_chain ()
void
gtk_container_unset_focus_chain (GtkContainer *container); gtk_container_unset_focus_chain устарело начиная с версии 3.24 и не должно использоваться в новых кодах.
Для переопределения поведения фокуса используйте сигнал GtkWidgetClass::focus.
Удаляет цепочку фокуса, явно заданную с помощью gtk_container_set_focus_chain().
Параметры
container |
gtk_container_class_find_child_property ()
GParamSpec *
gtk_container_class_find_child_property
(GObjectClass *cclass,
const gchar *property_name); Находит свойство дочернего элемента класса контейнера по имени.
Параметры
cclass | [type GtkContainerClass] | |
property_name | имя дочернего свойства для поиска |
Возвращаемое значение
the 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 | ||
property_id | идентификатор свойства | |
pspec | the GParamSpec для свойства |
gtk_container_class_install_child_properties ()
void gtk_container_class_install_child_properties (GtkContainerClass *cclass,guint n_pspecs,GParamSpec **pspecs);
Устанавливает свойства дочерних элементов в классе контейнера.
Параметры
cclass | ||
n_pspecs | длина массива GParamSpec | |
pspecs | массив GParamSpec, определяющий новые свойства дочерних элементов. | [array length=n_pspecs] |
Since: 3.18
gtk_container_class_list_child_properties ()
GParamSpec **
gtk_container_class_list_child_properties
(GObjectClass *cclass,
guint *n_properties); Возвращает все свойства дочерних элементов класса контейнера.
Параметры
cclass | [type GtkContainerClass] | |
n_properties | место для возврата количества найденных свойств дочерних элементов |
Возвращаемое значение
новый выделенный массив 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
Ширина пустой границы вне дочерних элементов контейнера.
Владелец: GtkContainer
Флаги: Чтение / Запись
Допустимые значения: <= 65535
Значение по умолчанию: 0
Свойство “child”
“child” GtkWidget *
Может быть использован для добавления нового дочернего элемента в контейнер.
Владелец: GtkContainer
Флаги: Запись
Свойство “resize-mode”
“resize-mode” GtkResizeMode
Указывает, как обрабатываются события изменения размера.
Владелец: GtkContainer
Флаги: Чтение / Запись
Значение по умолчанию: 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.24/GtkContainer.html