GtkConstraintLayout
GtkConstraintLayout — Управляющий макетом с ограничениями
Функции
| GtkLayoutManager * | gtk_constraint_layout_new () |
| void | gtk_constraint_layout_add_constraint () |
| void | gtk_constraint_layout_remove_constraint () |
| void | gtk_constraint_layout_remove_all_constraints () |
| void | gtk_constraint_layout_add_guide () |
| void | gtk_constraint_layout_remove_guide () |
| GList * | gtk_constraint_layout_add_constraints_from_description () |
| GList * | gtk_constraint_layout_add_constraints_from-descriptionv () |
| GListModel * | gtk_constraint_layout_observe_constraints () |
| GListModel * | gtk_constraint_layout_observe-guides () |
Типы и значения
Иерархия объектов
GObject
├── GtkLayoutChild
│ ╰── GtkConstraintLayoutChild
╰── GtkLayoutManager
╰── GtkConstraintLayout
Реализованные интерфейсы
GtkConstraintLayout реализует GtkBuildable.
Включенные файлы
#include <gtk/gtk.h>
Описание
GtkConstraintLayout — управляющий макетом, который использует связи между атрибутами виджетов, выраженные через экземпляры GtkConstraint, для измерения и размещения виджетов.
Как работают ограничения
Ограничения — это объекты, определяющие взаимосвязь между атрибутами виджета; вы можете прочитать описание класса GtkConstraint для более подробного определения.
Используя множество ограничений и применяя их к дочерним виджетам с помощью GtkConstraintLayout, можно описать сложные правила макета; каждое ограничение, применённое к дочерним или родительским виджетам, вносит вклад в полное описание макета в терминах параметров для разрешения значения каждого атрибута.
Важно отметить, что макет определяется совокупностью ограничений; удаление дочернего элемента или ограничения из существующего макета без изменения оставшихся ограничений может привести к нестабильному или неразрешимому макету.
Ограничения имеют неявный «порядок чтения»; вы должны начать описание каждой грани каждого дочернего элемента, а также их взаимосвязи с родительским контейнером, слева направо (или справа налево, в языках с правонаправленной письменностью), сначала по горизонтали, а затем по вертикали.
Макет на основе ограничений с недостаточным количеством ограничений может стать «нестабильным», то есть иметь более одного решения. Поведение нестабильного макета не определено.
Макет на основе ограничений с конфликтующими ограничениями может быть неразрешимым и привести к нестабильному макету. Вы можете использовать свойство “strength” класса GtkConstraint для «наведения» макета на решение.
GtkConstraintLayout как GtkBuildable
GtkConstraintLayout реализует интерфейс GtkBuildable и имеет пользовательский элемент «constraints», который позволяет описывать ограничения в файле пользовательского интерфейса GtkBuilder.
Пример фрагмента определения пользовательского интерфейса, определяющего ограничение:
Это определение добавит два ограничения в GtkConstraintLayout:
требуемое ограничение между ведущим краем «кнопки» и ведущим краем виджета, использующего макет с ограничениями, плюс 12 пикселей
сильное, постоянное ограничение, делающее ширину «кнопки» больше или равной 250 пикселям
Атрибуты «target» и «target-attribute» обязательны.
Атрибуты «source» и «source-attribute» элемента «constraint» необязательны; если они не указаны, ограничение предполагается постоянным.
Атрибут «relation» необязателен; если он не указан, ограничение предполагается равным.
Атрибут «strength» необязателен; если он не указан, ограничение предполагается обязательным.
Атрибуты «source» и «target» можно установить в «super», чтобы указать, что целевой виджет — это виджет, использующий GtkConstraintLayout.
Можно указать атрибуты «constant» и «multiplier».
Кроме того, элемент «constraints» может также содержать описание GtkConstraintGuides, используемых макетом:
Элемент «guide» имеет следующие необязательные атрибуты:
«min-width», «nat-width» и «max-width» описывают минимальную, естественную и максимальную ширину направляющей соответственно
«min-height», «nat-height» и «max-height» описывают минимальную, естественную и максимальную высоту направляющей соответственно
«strength» описывает силу ограничения на естественный размер направляющей; если не указано, ограничение предполагается со средней силой
«name» описывает имя направляющей, полезное при отладке
Использование языка Visual Format Language
Сложные ограничения можно описать с помощью компактной синтаксической конструкции под названием VFL или *Visual Format Language*.
Язык VFL описывает все ограничения в строке или столбце, обычно начиная с ведущего края до хвостового. Каждый элемент макета состоит из «представлений», которые идентифицируют GtkConstraintTarget.
Например:
Описывает ограничение, которое связывает хвостовой край «кнопки» с ведущим краем «textField», оставляя стандартное пространство между ними.
Использование VFL также позволяет указать предикаты, которые описывают ограничения на атрибуты, такие как ширина и высота:
По умолчанию ориентация описания VFL — горизонтальная, если не указано иное:
Также можно указать несколько предикатов, а также их силу:
Наконец, также можно использовать простые арифметические операторы:
Функции
gtk_constraint_layout_new ()
GtkLayoutManager *
gtk_constraint_layout_new (void); Создаёт новый менеджер компоновки GtkConstraintLayout.
Возвращает
вновь созданный GtkConstraintLayout
gtk_constraint_layout_add_constraint ()
void gtk_constraint_layout_add_constraint (GtkConstraintLayout *layout,GtkConstraint *constraint);
Добавляет GtkConstraint к менеджеру компоновки.
Свойства «source» и «target» constraint могут быть:
layout получает владение constraint после вызова этой функции.
Параметры
layout | ||
constraint | [transfer full] |
gtk_constraint_layout_remove_constraint ()
void gtk_constraint_layout_remove_constraint (GtkConstraintLayout *layout,GtkConstraint *constraint);
Удаляет constraint из менеджера компоновки, чтобы он больше не влиял на компоновку.
Параметры
layout | ||
constraint |
gtk_constraint_layout_remove_all_constraints ()
void
gtk_constraint_layout_remove_all_constraints
(GtkConstraintLayout *layout); Удаляет все ограничения из менеджера компоновки.
Параметры
layout |
gtk_constraint_layout_add_guide ()
void gtk_constraint_layout_add_guide (GtkConstraintLayout *layout,GtkConstraintGuide *guide);
Добавляет ориентир к layout. Ориентир может использоваться в качестве источника или цели ограничений, как и виджет, но он не отображается.
layout получает владение guide после вызова этой функции.
Параметры
layout | ||
guide | a GtkConstraintGuide object. | [transfer full] |
gtk_constraint_layout_remove_guide ()
void gtk_constraint_layout_remove_guide (GtkConstraintLayout *layout,GtkConstraintGuide *guide);
Удаляет guide из менеджера компоновки, чтобы он больше не влиял на компоновку.
Параметры
layout | ||
guide | a GtkConstraintGuide object |
gtk_constraint_layout_add_constraints_from_description ()
GList * gtk_constraint_layout_add_constraints_from_description (GtkConstraintLayout *layout,const char * const lines[],gsize n_lines,int hspacing,int vspacing,GError **error,const char *first_view,...);
Создаёт список ограничений по формальному описанию, используя компактный синтаксис описания, называемый VFL или «Visual Format Language».
Эта функция является удобной оболочкой вокруг gtk_constraint_layout_add_constraints_from_descriptionv(), используя аргументы с переменным числом параметров для заполнения карты виджет/цели.
Параметры
layout | ||
lines | массив строк Visual Format Language, определяющих набор ограничений. | [array length=n_lines] |
n_lines | количество строк | |
hspacing | значение горизонтального интервала по умолчанию или -1 для значения по умолчанию | |
vspacing | значение вертикального интервала по умолчанию или -1 для значения по умолчанию | |
error | место для возврата GError | |
first_view | имя виджета в описании VFL, за которым следует GtkConstraintTarget, которому он соответствует | |
... | список имен виджетов и GtkConstraintTargets, завершаемый символом |
Возвращает
список GtkConstraints, которые были добавлены в компоновку.
[transfer container][element-type GtkConstraint]
gtk_constraint_layout_add_constraints_from_descriptionv ()
GList * gtk_constraint_layout_add_constraints_from_descriptionv (GtkConstraintLayout *layout,const char * const lines[],gsize n_lines,int hspacing,int vspacing,GHashTable *views,GError **error);
Создаёт список ограничений из формального описания, используя компактный синтаксис описания, называемый VFL, или «Язык визуального форматирования».
Язык визуального форматирования основан на AutoLayout от Apple VFL.
Словарь views используется для сопоставления GtkConstraintTargets со символическим именем представления внутри VFL.
Грамматика VFL:
**Примечание**: Грамматика VFL, используемая GTK, немного отличается от определённой Apple, так как она может использовать символические значения для силы ограничения вместо числовых значений; кроме того, GTK позволяет добавлять простые арифметические операции внутри предикатов.
Примеры описаний VFL:
<object class="GtkConstraintLayout">
<constraints>
<constraint target="button" target-attribute="start"
relation="eq"
source="super" source-attribute="start"
constant="12"
strength="required" />
<constraint target="button" target-attribute="width"
relation="ge"
constant="250"
strength="strong" />
</constraints>
</object>[rename-to gtk_constraint_layout_add_constraints_from_description]
Параметры
layout | объект GtkConstraintLayout | |
lines | массив строк языка визуального форматирования, определяющих набор ограничений. | [array length=n_lines] |
n_lines | количество строк | |
hspacing | значение горизонтального отступа по умолчанию, или -1 для значения по умолчанию | |
vspacing | значение вертикального отступа по умолчанию, или -1 для значения по умолчанию | |
views | словарь пар [имя, цель]; ключи | [element-type utf8 Gtk.ConstraintTarget] |
error | место для возврата GError |
Возвращаемое значение
список GtkConstraints, которые были добавлены в макет.
[transfer container][element-type GtkConstraint]
gtk_constraint_layout_observe_constraints ()
GListModel *
gtk_constraint_layout_observe_constraints
(GtkConstraintLayout *layout); Возвращает GListModel для отслеживания ограничений, которые являются частью layout.
Вызов этой функции включит дополнительную внутреннюю учётную запись для отслеживания ограничений и отправки сигналов в возвращаемом listmodel. Это может значительно замедлить операции.
Приложения должны изо всех сил стараться избегать вызова этой функции из-за замедления.
Параметры
layout | объект GtkConstraintLayout |
Возвращаемое значение
объект GListModel, отслеживающий ограничения layout.
[transfer full][attributes element-type=GtkConstraint]
gtk_constraint_layout_observe_guides ()
GListModel *
gtk_constraint_layout_observe_guides (GtkConstraintLayout *layout); Возвращает GListModel для отслеживания направляющих, которые являются частью layout.
Вызов этой функции включит дополнительную внутреннюю учётную запись для отслеживания направляющих и отправки сигналов в возвращаемом listmodel. Это может значительно замедлить операции.
Приложения должны изо всех сил стараться избегать вызова этой функции из-за замедления.
Параметры
layout | объект GtkConstraintLayout |
Возвращаемое значение
объект GListModel, отслеживающий направляющие layout.
[transfer full][attributes element-type=GtkConstraintGuide]
Типы и значения
GtkConstraintLayout
typedef struct _GtkConstraintLayout GtkConstraintLayout;
Менеджер макета, использующий GtkConstraint для описания отношений между виджетами.
GtkConstraintLayoutChild
typedef struct _GtkConstraintLayoutChild GtkConstraintLayoutChild;
Объект GtkLayoutChild в GtkConstraintLayout.
перечисление GtkConstraintVflParserError
Область для ошибок парсинга VFL.
Элементы
GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_SYMBOL | Неверный или неизвестный символ | |
GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_ATTRIBUTE | Неверный или неизвестный атрибут | |
GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_VIEW | Неверный или неизвестный вид | |
GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_METRIC | Неверный или неизвестный параметр | |
GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_PRIORITY | Неверный или неизвестный приоритет | |
GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_RELATION | Неверное или неизвестное отношение |
© 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/GtkConstraintLayout.html