zombiebox
Version:
ZombieBox is a JavaScript framework for development of Smart TV and STB applications
31 lines (29 loc) • 3.19 kB
Markdown
Input processing
===
Обработка нажатий кнопок пульта осуществляется по принципу всплытия
событий (event propagation). Местом зарождения события является
InputDispatcher, который в результате взаимодействия с компонентом ввода
платформы (*IInput)* производит обработку событий нажатия. При
наступлении соответствующего события, внутренний код нажатой кнопки
переводится в унифицированный код фреймворка и дальше передается на
обработку глобальному объекту приложения.
Глобальный объект приложения затем запускает погружение события нажатия
по иерархии композиции слоев. Вначале будет вызван метод processKey у
текущей сцены, которая при наличии в ней дочерних слоев, вызовет
processKey у верхнего дочернего слоя (top child layer), в противном
случае передаст обработку нажатия своему активному виджету, а тот своему
и т.д. Если событие не обработано в процессе погружения, то виджет по
умолчанию вызывет метод \_processKey, в котором производит обработку
событий связанных с его собственной логикой. В базовой реализации виджет
обрабатывает в методе \_processKey события кнопок навигации (UP, DOWN,
LEFT, RIGHT). В случае, если ни на одном из уровней погружения событие
не было обработано, вызывается метод \_processKey уже непосредственно у
самого глобального объекта приложения, который в случае, если нажата
кнопка BACK, выполнит перемещение по истории записей назад.
Так же input dispatcher отвечает за обработку курсора, если он
поддерживается устройством. Для этого контейнер, после передачи в него
виджета, с помощью input dispather назначает обработчики на события
мышки <abbr title='Document Object Model'>DOM</abbr> элемента виджета (mouseover, click, mousewheel), при
наступлении которых, виджет обрабатывает его соответствующим образом.
Так, например, на событие mouseover виджет активируется, а на событие
click - сэмулирует нажатие на него кнопки ENTER.