Описание подсистемы ввода — различия между версиями

Материал из Deeptown Manual
Перейти к: навигация, поиск
(0, http://asteroidhead.com/index.php?/news/ panmycin, http://xood.net/ 2 amp cipro p, http://feainfo.com/ seroquel,)
 
(не показаны 175 промежуточных версий 29 участников)
Строка 1: Строка 1:
0, http://asteroidhead.com/index.php?/news/ panmycin, http://xood.net/ 2 amp cipro p, http://feainfo.com/ seroquel,
+
Подсистема ввода отвечает за считывание вводимой пользователем информации со всевозможных устройств (клавиатура, мышь, джойстик и пр.) и формирование на их основе событий ввода, которые затем передаются различным модулям. Подсистема предоставляет полную абстракцию от устройств ввода: в модули-обработчики передаются уже готовые события, связанные с конкретными действиями.
 +
 
 +
== Схема обработки ввода пользователя ==
 +
 
 +
Обработка пользовательского ввода состоит из следующих этапов.
 +
 
 +
1. Устройство ввода (клавиатура, мышь и пр.) фиксирует действие пользователя (нажатие кнопки, движение мышью и т.д.) и передает сообщение об этом в движок ввода. В таком сообщении содержится тип события и всевозможные параметры. Например, когда пользователь нажимает кнопку на клавиатуре - передается событие key_press с двумя параметрами: идентификатор нажатой кнопки и unicode-символ, который ей соответствует. Когда пользователь отпускает кнопку - передается событие key_release с теми же параметрами.
 +
 
 +
2. Движок ввода передает это событие всем активным '''контекстам ввода'''.
 +
 
 +
Контекст ввода - это таблица преобразования низкоуровневых событий в пользовательские. Контекст ввода определяет правила, по которым события будут передаваться пользователю. Таких контекстов может быть несколько: например, для управления аватаром используется один контекст, а для работы с GUI - другой.
 +
 
 +
Каждый из контекстов ввода обрабатывает низкоуровневые события независимо. Делает он это при помощи таблицы обработки событий. В этой таблице каждому низкоуровневому событию, удовлетворяющему определенным критериям (или же последовательности таких событий), соответствует вызов одного или нескольких обработчиков ввода.
 +
 
 +
В качестве критерия могут использоваться различные условия на параметры события. Например, в качестве условия может выступать:
 +
* нажатие любой клавиши (никакого критерия нет);
 +
* нажатие любой клавиши при нажатой клавише shift (критерий модификатора);
 +
* нажатие любой клавиши при отпущенной клавише ctrl (критерий модификатора);
 +
* нажатие клавиши A (критерий параметра события);
 +
* нажатие клавиши A при нажатой левой клавиши мыши (смешанный критерий).
 +
* и т.д.
 +
 
 +
3. Контекст ввода передает результат обработки события обработчикам ввода. Обработчик - это небольшой модуль, который выполняет с полученным событием какие-либо действия и отправляет результат пользователю.
 +
 
 +
== Конфигурация ввода ==
 +
 
 +
Файл конфигурации движка ввода находится по адресу '''/etc/world/input.conf''' в DISS.
 +
 
 +
Формат этого файла следующий.
 +
 
 +
Пустые строки и строки, начинающиеся с #, игнорируются.
 +
 
 +
В начале файла перечислены устройства ввода, которые необходимо подключить. Устройство подключается директивой '''device''', за которой следует URL устройства - его тип и, возможно, какие-то параметры после двоеточия. У стандартных устройств никаких параметров нет. Так, клавиатура и мышь подключается директивами
 +
 
 +
device keyboard
 +
device mouse
 +
 
 +
Далее идут описания контекстов.
 +
 
 +
Описание контекста начинается с директивы '''context''', параметр которой - имя контекста. После этой директивы идет заполнение таблицы ввода директивой '''on'''.
 +
 
 +
Рассмотрим пример привязки нажатия клавиши A к отправке события объекту:
 +
 
 +
device keyboard
 +
device mouse
 +
 +
context local_control
 +
 +
on key_press check(key=A) do send_event:power_on
 +
 
 +
Контекст '''local_control''' - используется для управления объектом на локальной сцене, т.е. для тестирования.
 +
 
 +
Директива on создает в этом контексте обработчик события '''key_press''' (нажатие на клавишу клавиатуры) с критерием нажатия клавиши A. После ключевого слова '''do''' следуют URL-ы обработчиков этого события - в данном случае, это обработчик '''send_event''', который отправит событие '''power_on''' объекту, которым управляет пользователь.

Текущая версия на 14:45, 13 июля 2013

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

[править] Схема обработки ввода пользователя

Обработка пользовательского ввода состоит из следующих этапов.

1. Устройство ввода (клавиатура, мышь и пр.) фиксирует действие пользователя (нажатие кнопки, движение мышью и т.д.) и передает сообщение об этом в движок ввода. В таком сообщении содержится тип события и всевозможные параметры. Например, когда пользователь нажимает кнопку на клавиатуре - передается событие key_press с двумя параметрами: идентификатор нажатой кнопки и unicode-символ, который ей соответствует. Когда пользователь отпускает кнопку - передается событие key_release с теми же параметрами.

2. Движок ввода передает это событие всем активным контекстам ввода.

Контекст ввода - это таблица преобразования низкоуровневых событий в пользовательские. Контекст ввода определяет правила, по которым события будут передаваться пользователю. Таких контекстов может быть несколько: например, для управления аватаром используется один контекст, а для работы с GUI - другой.

Каждый из контекстов ввода обрабатывает низкоуровневые события независимо. Делает он это при помощи таблицы обработки событий. В этой таблице каждому низкоуровневому событию, удовлетворяющему определенным критериям (или же последовательности таких событий), соответствует вызов одного или нескольких обработчиков ввода.

В качестве критерия могут использоваться различные условия на параметры события. Например, в качестве условия может выступать:

  • нажатие любой клавиши (никакого критерия нет);
  • нажатие любой клавиши при нажатой клавише shift (критерий модификатора);
  • нажатие любой клавиши при отпущенной клавише ctrl (критерий модификатора);
  • нажатие клавиши A (критерий параметра события);
  • нажатие клавиши A при нажатой левой клавиши мыши (смешанный критерий).
  • и т.д.

3. Контекст ввода передает результат обработки события обработчикам ввода. Обработчик - это небольшой модуль, который выполняет с полученным событием какие-либо действия и отправляет результат пользователю.

[править] Конфигурация ввода

Файл конфигурации движка ввода находится по адресу /etc/world/input.conf в DISS.

Формат этого файла следующий.

Пустые строки и строки, начинающиеся с #, игнорируются.

В начале файла перечислены устройства ввода, которые необходимо подключить. Устройство подключается директивой device, за которой следует URL устройства - его тип и, возможно, какие-то параметры после двоеточия. У стандартных устройств никаких параметров нет. Так, клавиатура и мышь подключается директивами

device keyboard
device mouse

Далее идут описания контекстов.

Описание контекста начинается с директивы context, параметр которой - имя контекста. После этой директивы идет заполнение таблицы ввода директивой on.

Рассмотрим пример привязки нажатия клавиши A к отправке события объекту:

device keyboard
device mouse

context local_control

on key_press check(key=A) do send_event:power_on

Контекст local_control - используется для управления объектом на локальной сцене, т.е. для тестирования.

Директива on создает в этом контексте обработчик события key_press (нажатие на клавишу клавиатуры) с критерием нажатия клавиши A. После ключевого слова do следуют URL-ы обработчиков этого события - в данном случае, это обработчик send_event, который отправит событие power_on объекту, которым управляет пользователь.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
информация
документация
Инструменты