Spec-Zone.ru › GTK 4.0

Доступность

Доступность GTK
Стандартный интерфейс доступности
Доступные роли и атрибуты
Правила разработки приложений
Реализации
Практики разработки
Скрытие элементов пользовательского интерфейса из доступного дерева
Паттерны проектирования и пользовательские виджеты
GtkAccessible — Интерфейс доступности
GtkATContext — Объект, взаимодействующий с технологиями вспомогательных средств

Стандартный интерфейс доступности

Интерфейс GtkAccessible предоставляет информацию о доступности элементов пользовательского интерфейса приложения. Приложения вспомогательных технологий (AT), такие как Orca, передают эту информацию пользователям с ограниченными возможностями, чтобы помочь им использовать приложение.

Стандартные элементы управления GTK реализуют интерфейс GtkAccessible и поэтому по умолчанию доступны для AT. Это означает, что если вы используете элементы управления GTK, такие как GtkButton, GtkEntry или GtkListView, вам нужно предоставить только специфичные для приложения детали, когда значения по умолчанию неполны. Вы можете сделать это, установив соответствующие свойства в ваших шаблонах GtkBuilder и файлах определений пользовательского интерфейса или установив свойства, определенные интерфейсом GtkAccessible.

Если вы реализуете свой собственный тип, производный от GtkWidget, вам необходимо установить свойства GtkAccessible самостоятельно и предоставить реализацию виртуальных функций GtkAccessible.

Доступные роли и атрибуты

Основные понятия доступного виджета — роли и атрибуты; каждый элемент управления GTK имеет роль, а его функциональность описывается набором атрибутов.

Роли

Роли определяют таксономию и семантику элемента управления пользовательского интерфейса для любых приложений вспомогательной технологии; например, кнопка будет иметь роль GTK_ACCESSIBLE_ROLE_BUTTON; поле ввода — роль GTK_ACCESSIBLE_ROLE_TEXTBOX; переключатель — роль GTK_ACCESSIBLE_ROLE_CHECKBOX; и т. д.

Каждая роль является частью экземпляра виджета и не может быть изменена со временем или в результате действия пользователя. Роли позволяют приложениям вспомогательной технологии идентифицировать элемент управления пользовательского интерфейса и решить, как его представить пользователю; если роль какой-либо части пользовательского интерфейса приложения меняется, элемент управления необходимо удалить и заменить другим с соответствующей ролью.

Список доступных ролей

Каждое имя роли является частью перечисления GtkAccessibleRole.

Название роли Описание Соответствующий виджет GTK
BUTTON Элемент управления, выполняющий действие при нажатии GtkButton, GtkLinkButton, GtkExpander
CHECKBOX Элемент управления с тремя возможными значениями: true, false, или undefined GtkCheckButton
COMBOBOX Элемент управления, который можно развернуть для отображения списка возможных значений для выбора GtkComboBox
COLUMN_HEADER Заголовок в списке с колонками GtkColumnView
DIALOG Диалоговое окно, которое запрашивает у пользователя ввод информации или требует ответа GtkDialog и подклассы
GRID Сетка элементов GtkFlowBox, GtkGridView
GRID_CELL Элемент в сетке GtkFlowBoxChild, GtkGridView, GtkColumnView
IMG Изображение GtkImage, GtkPicture
LABEL Видимое имя или заголовок для компонента пользовательского интерфейса GtkLabel
LINK Кликкаемая гиперссылка GtkLinkButton
LIST Список элементов GtkListBox
LIST_ITEM Элемент в списке GtkListBoxRow
MENU Меню GtkPopoverMenu
MENU_BAR Панель меню GtkPopoverMenuBar
MENU_ITEM Элемент меню Элементы в GtkPopoverMenu
MENU_ITEM_CHECKBOX Элемент меню с опцией выбора Элементы в GtkPopoverMenu
MENU_ITEM_RADIO Элемент радиоменю Элементы в GtkPopoverMenu
METER Представляет значение в известном диапазоне GtkLevelBar
NONE Не представлено в дереве доступности ползунок GtkScale
PROGRESS_BAR Элемент, отображающий прогресс GtkProgressBar
RADIO Элемент выбора с опцией выбора в группе радиоэлементов GtkCheckButton
ROW Строка в списке с колонками GtkColumnView
SCROLLBAR Графический объект, управляющий прокруткой содержимого GtkScrollbar
SEARCH_BOX Поле ввода для ввода поисковых критериев GtkSearchEntry
SEPARATOR Разделитель, разделяющий разделы содержимого или группы элементов GtkSeparator
SPIN_BUTTON Элемент управления диапазоном, позволяющий выбрать среди отдельных вариантов GtkSpinButton
SWITCH Элемент управления, представляющий значения включено/выключено GtkSwitch
TAB Вкладка в списке вкладок для переключения страниц GtkStackSwitcher, GtkNotebook
TAB_LIST Список вкладок для переключения страниц GtkStackSwitcher, GtkNotebook
TAB_PANEL Страница в блокноте или стеке GtkStack
TEXT_BOX Тип ввода, который позволяет использовать свободный текст в качестве значения. GtkEntry, GtkPasswordEntry, GtkTextView
TREE_GRID Список с колонками, подобный treeview GtkColumnView
WINDOW Окно приложения GtkWindow
... …

Дополнительную информацию см. в списке ролей WAI-ARIA.

Атрибуты

Атрибуты предоставляют специфическую информацию об элементе пользовательского интерфейса с поддержкой доступности и описывают его для приложений с функциями поддержки. GTK разделяет атрибуты доступности на три категории:

  • свойства, описываемые значениями перечисления GtkAccessibleProperty

  • отношения, описываемые значениями перечисления GtkAccessibleRelation

  • состояния, описываемые значениями перечисления GtkAccessibleState

Каждый атрибут принимает значение определенного типа.

В отличие от ролей, атрибуты могут изменяться со временем или в ответ на действия пользователя; например:

  • переключатель изменит свое состояние GTK_ACCESSIBLE_STATE_CHECKED каждый раз при переключении, будь то пользователем или программно

  • установка mnemonics на GtkLabel обновит отношение GTK_ACCESSIBLE_RELATION_LABELLED_BY элемента с ссылкой на метку

  • изменение экземпляра GtkAdjustment в GtkScrollbar изменит свойства GTK_ACCESSIBLE_PROPERTY_VALUE_MAX, GTK_ACCESSIBLE_PROPERTY_VALUE_MIN и GTK_ACCESSIBLE_PROPERTY_VALUE_NOW максимальным, минимальным и текущим значениями свойства GtkAdjustment

Дополнительную информацию см. в списке атрибутов WAI-ARIA.

Список доступных состояний

Каждое имя состояния является частью перечисления GtkAccessibleState.

Имя состояния Атрибут ARIA Тип значения Примечания
GTK_ACCESSIBLE_STATE_BUSY “aria-busy” boolean
GTK_ACCESSIBLE_STATE_CHECKED “aria-checked” GtkAccessibleTristate Указывает текущее состояние GtkCheckButton
GTK_ACCESSIBLE_STATE_DISABLED “aria-disabled” boolean Соответствует свойству “sensitive” для GtkWidget
GTK_ACCESSIBLE_STATE_EXPANDED “aria-expanded” boolean или undefined Соответствует свойству “expanded” для GtkExpander
GTK_ACCESSIBLE_STATE_HIDDEN “aria-hidden” boolean Соответствует свойству “visible” для GtkWidget
GTK_ACCESSIBLE_STATE_INVALID “aria-invalid” GtkAccessibleInvalidState Устанавливается, когда элемент показывает ошибку
GTK_ACCESSIBLE_STATE_PRESSED “aria-pressed” GtkAccessibleTristate Указывает текущее состояние GtkToggleButton
GTK_ACCESSIBLE_STATE_SELECTED “aria-selected” boolean или undefined Устанавливается, когда элемент выделен
Список доступных свойств

Каждое имя свойства является частью перечисления GtkAccessibleProperty.

Имя состояния Атрибут ARIA Тип значения
GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE “aria-autocomplete” GtkAccessibleAutocomplete
GTK_ACCESSIBLE_PROPERTY_DESCRIPTION “aria-description” Строка для перевода
GTK_ACCESSIBLE_PROPERTY_HAS_POPUP “aria-haspopup” Булево значение
GTK_ACCESSIBLE_PROPERTY_KEY_SHORTCUTS “aria-keyshortcuts” Строка
GTK_ACCESSIBLE_PROPERTY_LABEL “aria-label” Строка для перевода
GTK_ACCESSIBLE_PROPERTY_LEVEL “aria-level” Целое число
GTK_ACCESSIBLE_PROPERTY_MODAL “aria-modal” Булево значение
GTK_ACCESSIBLE_PROPERTY_MULTI_LINE “aria-multiline” Булево значение
GTK_ACCESSIBLE_PROPERTY_MULTI_SELECTABLE “aria-multiselectable” Булево значение
GTK_ACCESSIBLE_PROPERTY_ORIENTATION “aria-orientation” GtkOrientation
GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER “aria-placeholder” Строка для перевода
GTK_ACCESSIBLE_PROPERTY_READ_ONLY “aria-readonly” Булево значение
GTK_ACCESSIBLE_PROPERTY_REQUIRED “aria-required” Булево значение
GTK_ACCESSIBLE_PROPERTY_ROLE_DESCRIPTION “aria-roledescription” Строка для перевода
GTK_ACCESSIBLE_PROPERTY_SORT “aria-sort” GtkAccessibleSort
GTK_ACCESSIBLE_PROPERTY_VALUE_MAX “aria-valuemax” Двойное значение
GTK_ACCESSIBLE_PROPERTY_VALUE_MIN “aria-valuemin” Двойное значение
GTK_ACCESSIBLE_PROPERTY_VALUE_NOW “aria-valuenow” Двойное значение
GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT “aria-valuetext” Строка для перевода
Список доступных отношений

Каждое имя отношения является частью перечисления GtkAccessibleRelation.

Название состояния Атрибут ARIA Тип значения
GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT “aria-activedescendant” GtkAccessible
GTK_ACCESSIBLE_RELATION_COL_COUNT “aria-colcount” целое число
GTK_ACCESSIBLE_RELATION_COL_INDEX “aria-colindex” целое число
GTK_ACCESSIBLE_RELATION_COL_INDEX_TEXT “aria-colindextext” переводимая строка
GTK_ACCESSIBLE_RELATION_COL_SPAN “aria-colspan” целое число
GTK_ACCESSIBLE_RELATION_CONTROLS “aria-controls” список GtkAccessible
GTK_ACCESSIBLE_RELATION_DESCRIBED_BY “aria-describedby” список GtkAccessible
GTK_ACCESSIBLE_RELATION_DETAILS “aria-details” список GtkAccessible
GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE “aria-errormessage” GtkAccessible
GTK_ACCESSIBLE_RELATION_FLOW_TO “aria-flowto” список GtkAccessible
GTK_ACCESSIBLE_RELATION_LABELLED_BY “aria-labelledby” список GtkAccessible
GTK_ACCESSIBLE_RELATION_OWNS “aria-owns” список GtkAccessible
GTK_ACCESSIBLE_RELATION_POS_IN_SET “aria-posinset” целое число
GTK_ACCESSIBLE_RELATION_ROW_COUNT “aria-rowcount” целое число
GTK_ACCESSIBLE_RELATION_ROW_INDEX “aria-rowindex” целое число
GTK_ACCESSIBLE_RELATION_ROW_INDEX_TEXT “aria-rowindextext” переводимая строка
GTK_ACCESSIBLE_RELATION_ROW_SPAN “aria-rowspan” целое число
GTK_ACCESSIBLE_RELATION_SET_SIZE “aria-setsize” целое число

Примечание: При использовании gtk_accessible_update_relation() с отношением, требующим список объектов GtkAccessible, необходимо передавать каждый объект доступности по отдельности, за которым следует NULL.

Правила разработки приложений

Даже если стандартные элементы управления интерфейсом пользователя, предоставляемые GTK, содержат информацию об обеспечении доступности по умолчанию, для разработчиков приложений существуют дополнительные свойства и соображения. Например, если ваше приложение предоставляет пользователю форму для заполнения, необходимо убедиться в том, что:

  • контейнер формы имеет роль GTK_ACCESSIBLE_ROLE_FORM

  • каждое поле ввода текста в форме имеет отношение GTK_ACCESSIBLE_RELATION_LABELLED_BY к элементу метки, который его описывает

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

  • контейнер имеет роль GTK_ACCESSIBLE_ROLE_TOOLBAR

  • каждая кнопка имеет свойство GTK_ACCESSIBLE_PROPERTY_LABEL , содержащее удобочитаемое и локализованное действие, выполняемое при нажатии; например, "“Копировать“, "“Вставить“, "“Добавить слой“ или "“Удалить“

GTK попытается заполнить некоторую информацию, используя вспомогательные свойства элементов управления интерфейсом пользователя, например, метка доступности будет взята из метки или текста по умолчанию, используемого элементом управления интерфейсом пользователя, или из его всплывающей подсказки, если свойство GTK_ACCESSIBLE_PROPERTY_LABEL или отношение GTK_ACCESSIBLE_RELATION_LABELLED_BY не заданы. Тем не менее, хорошей практикой и гигиеной проекта является явное указание свойств доступности, так же как хорошей практикой является указание всплывающих подсказок и стилизованных классов.

Разработчики приложений, использующие GTK, должны обеспечивать доступность своих элементов управления интерфейсом пользователя в процессе разработки. При использовании шаблонов GtkBuilder и файлов определения интерфейса пользователя GTK предоставляет инструмент проверки, который проверяет, имеет ли каждый элемент интерфейса пользователя действительную роль и свойства; этот инструмент можно использовать в составе набора тестов приложения, чтобы избежать регрессий.

Реализации

Каждый элемент управления интерфейсом пользователя реализует интерфейс GtkAccessible, чтобы разработчики виджетов и приложений могли задавать роли, состояния и отношения между элементами управления интерфейсом пользователя. Этот API является чисто описательным.

Каждая реализация GtkAccessible должна предоставить экземпляр GtkATContext, который действует как прокси для API доступности конкретной платформы:

  • AT-SPI на Linux/BSD

  • NSAccessibility на macOS

  • Active Accessibility на Windows

Кроме того, для набора тестов GTK доступен специальный бэкенд доступности, чтобы обеспечить воспроизводимость проблем в конвейере непрерывной интеграции.

Практики авторизации

Практики авторизации предназначены для разработчиков приложений, а также разработчиков элементов графического интерфейса, основанных на GTK.

Функционально, роли GtkAccessible, состояния, свойства и отношения аналогичны CSS для технологий辅助. Например, для пользователей считывателей экрана различные доступные атрибуты управляют отображением их невизуального опыта. Неправильные роли и атрибуты могут привести к полностью недоступному пользовательскому интерфейсу.

Роль — это обещание

Следующий код:

gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_BUTTON);

является обещанием, что создаваемый виджет будет обеспечивать те же взаимодействия с клавиатурой, которые ожидаются от кнопки. Доступная роль кнопки не превратит автоматически любой виджет в GtkButton; но если ваш виджет ведет себя как кнопка, использование GTK_ACCESSIBLE_ROLE_BUTTON позволит любой технологии辅助 обработать его так же, как они бы обработали GtkButton.

Атрибуты могут скрывать и улучшать

Атрибуты доступности могут использоваться для переопределения содержимого элемента пользовательского интерфейса, например:

gtk_label_set_text (GTK_LABEL (label), "Some text");
gtk_accessible_update_property (GTK_ACCESSIBLE (label),
                GTK_ACCESSIBLE_PROPERTY_LABEL,
                "Assistive technologies users will perceive "
                "this text, not the contents of the label",
                -1);

В приведенном выше примере свойство “label” переопределит содержимое виджета метки.

Атрибуты также могут улучшать пользовательский интерфейс:

gtk_button_set_label (GTK_BUTTON (button), "Download");
gtk_box_append (GTK_BOX (button), button);

gtk_label_set_text (GTK_LABEL (label), "Final report.pdf");
gtk_box_append (GTK_BOX (box), label);

gtk_accessible_update_relation (GTK_ACCESSIBLE (button),
                GTK_ACCESSIBLE_RELATION_LABELLED_BY,
                g_list_append (NULL, label),
                -1);

В приведенном выше примере технология辅助 прочитает доступную метку кнопки как “Скачать окончательный отчет.pdf”.

Возможность скрывать и улучшать может быть двусторонним мечом, так как может привести к непреднамеренному переопределению доступной семантики существующих виджетов.

Скрытие элементов пользовательского интерфейса из доступного дерева

API доступности в основном используется для выражения семантики, полезной для технологий辅助, но его также можно использовать для скрытия элементов. Каноническим способом сделать это является использование GTK_ACCESSIBLE_ROLE_PRESENTATION, который объявляет, что элемент пользовательского интерфейса предназначен только для целей представления и, как следствие, не оказывает существенного влияния на доступность интерфейса.

Роль “представление” не следует путать со состоянием GTK_ACCESSIBLE_STATE_HIDDEN; состояние “скрытый” является временным и обычно контролируется отображением и скрытием виджета с помощью API GtkWidget.

Шаблоны проектирования и пользовательские виджеты

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

Кнопки

Кнопка — это виджет, позволяющий пользователям запускать действие. Хотя рекомендуется использовать GtkButton для всего, что выглядит и ведет себя как кнопка, возможно применение поведения кнопки к элементам пользовательского интерфейса, таким как изображения, с помощью жеста GtkGestureClick. При этом вы должны:

  • Назначить вашему виджету роль GTK_ACCESSIBLE_ROLE_BUTTON

  • Установить действие без параметров, которое активирует виджет

Пользовательские поля ввода

Для пользовательских полей ввода настоятельно рекомендуется реализовать интерфейс GtkEditable с использованием виджета GtkText в качестве делегата. Если вы это сделаете, GTK сделает функциональность редактирования текста ваших виджетов доступной таким же образом, как GtkSpinButton или GtkSearchEntry.

Пользовательский интерфейс на основе вкладок

Если вы создаете интерфейс на основе вкладок, рекомендуется использовать GtkStack в качестве основы и просто создать пользовательский виджет вкладки для управления активной страницей стека. При этом следующие дополнительные шаги обеспечат доступность ваших вкладок таким же образом, как GtkStackSwitcher или GtkNotebook:

  • Назначьте контейнеру вкладок роль GTK_ACCESSIBLE_ROLE_TAB_LIST

  • Назначьте виджетам вкладок роль GTK_ACCESSIBLE_ROLE_TAB

  • Установите отношение GTK_ACCESSIBLE_RELATION_CONTROLS между каждой вкладкой и объектом GtkStackPage для ее страницы

  • Установите свойство GTK_ACCESSIBLE_PROPERTY_SELECTED на каждой вкладке, причем активной вкладке присваивается значение TRUE, всем остальным FALSE

Чтобы разрешить изменение активной вкладки с помощью технологий доступности, можно экспортировать действия. Поскольку интерфейсы доступности поддерживают только действия без параметров, вы можете предоставить действия previous-tab и next-tab для контейнера вкладок, позволяющие пользователям просматривать вкладки по одной, или добавить действие activate-tab на каждую вкладку.

Управление значениями

Управление значением (т. е. виджет, который управляет одномерной величиной, которая может быть представлена с помощью GtkAdjustment) может быть представлено технологиям доступности путем установки свойств GTK_ACCESSIBLE_PROPERTY_VALUE_MIN, GTK_ACCESSIBLE_PROPERTY_VALUE_MAX и GTK_ACCESSIBLE_PROPERTY_VALUE_NOW.

Чтобы разрешить изменение значения с помощью технологий доступности, вы можете экспортировать действия. Поскольку интерфейсы доступности поддерживают только действия без параметров, вы должны предоставить такие действия, как increase-value и decrease-value.

© 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/Accessibility.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API