Главная » Просмотр файлов » Руководство программиста в Photon

Руководство программиста в Photon (953920), страница 66

Файл №953920 Руководство программиста в Photon (Руководство программиста в Photon) 66 страницаРуководство программиста в Photon (953920) страница 662013-09-22СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 66)

Пространство событий

Регионы могут генерировать и собирать объекты, называемые событиями. Эти события могут перемещаться в одном из двух направлений через пространство событий (т.е. либо к пользователю, либо от него). Перемещаясь сквозь пространство событий, события взаимодействуют с другими регионами – таким образом приложения взаимодействуют друг с другом. Процессом, поддерживающим эту простую архитектуру, является менеджер Photon.

Используя регионы и события, можно легко создать все службы, требуемые для системы управления окнами – оконные менеджеры, драйверы и приложения. И поскольку процессы, регионами которых управляет менеджер Photon'а, не обязательно должны размещаться на том же компьютере, что и менеджер Photon'а, легко выполнить распределённые по сети приложения.

Регионы и события

Программы Photon'а используют два базовых объекта: регионы и события. Регионы – объекты стационарные, тогда как события перемещаются через пространство событий.

Регион – это одиночная, фиксированная прямоугольная область, которую программа перемещает в пространстве событий. Регион обладает атрибутами, которые определяют, как он взаимодействует с событиями.

Некое событие представляет из себя набор неперекрываемых прямоугольников, которые могут генерироваться и собираться регионами в любом направлении пространства событий. Все события имеют какой-то присоединённый тип. Некоторые типы событий также владеют соответствующими данными.

События

Когда некое событие проходит сквозь пространство событий, его набор прямоугольников взаимодействует с регионами, размещёнными в пространстве событий другими приложениями. Когда такое происходит, менеджер Photon'а настраивает набор прямоугольников события в соответствии с атрибутами регионов, с которыми это событие взаимодействует.

Начальный набор прямоугольников

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

Набор прямоугольников события

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

Накопленный набор прямоугольников

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

 Список типов событий см. в разделе "Типы событий".

Регионы

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

Photon использует серии регионов, выстроенных от корневого региона в конце пространства событий Photon'а к графическому региону в начале (впереди). События рисования стартуют в регионе приложения и движутся вперёд к графическому региону. События ввода стартуют на регионе Мышь/Клавиатура и перемещаются назад в направлении к корневому региону.

Расщеплённый образ регионов Photon'а

В файле <photon/PhT.h> определены следующие константы:

  • Ph_DEV_RID – идентификатор региона устройств

  • Ph_ROOT_RID – идентификатор корневого региона

Владелец регионов и менеджер Photon'а могут располагаться на разных компьютерах.

Регион имеет два атрибута, которые управляют тем, как с событиями обращаться, когда те пересекают регион:

  • чувствительность

  • непрозрачность

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

Чувствительность

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

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

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

Непрозрачность

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

Если регион непрозрачен для какого-то типа события, любое событие этого типа, пересекающее регион, получает набор прямоугольников события, откорректированный таким образом, что отсекается пересекаемым регионом. Эти изменения набора прямоугольников таковы, что они включают прямоугольники меньших размеров. Эти новые прямоугольники описывают части события, которые остались видимы для регионов, находящихся в пространстве событий позади этого региона.

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

Краткая сводка атрибутов

В следующей таблице суммируется, как атрибуты региона оказывают воздействие на пересекающие регион события:

Если регион является:

То событие является:

И набор для прямоугольников является:

Не чувствительным, не непрозрачным

Проигнорированным

Не подвергшимся воздействию

Не чувствительным, непрозрачным

Проигнорированным

Подвергшимся воздействию

Чувствительным, не непрозрачным

Собранным

Не подвергшимся воздействию

Чувствительным, непрозрачным

Собранным

Подвергшимся воздействию

Регистрация событий (event logging)

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

Модификация событий

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

Взаимосвязь родитель/потомок

Все регионы обладают взаимосвязями типа родитель/потомок. Регион потомка всегда располагается впереди родительского региона (т.е. ближе к пользователю), и его координаты являются относительными – задаются относительно родительского региона.

Координатное пространство Photon'а

Все регионы располагаются внутри координатного пространства Photon'а, имеющего следующие размеры:

Корневой регион

Самым дальним от пользователя всегда является особый регион, называемый корневым регионом. Все другие регионы в некотором роде произошли от него. Как только какое-то событие прошло от пользователя и достигло корневого региона, оно прекращает свой существование.

Размерами корневого региона являеются размеры всего координатного пространства Photon'а. Как результат взаимосвязи родитель/потомок всех регионов, месторасположение любого региона в конечном счёте является относительным к размерам корневого региона.

 Регион может быть расположен в пространстве событий где угодно и тем не менее он имеет в качестве своего родителя корневой регион.

Типы событий

События генерируются по следующим причинам:

  • нажата клавиша, информация о состоянии клавиатуры

  • нажата и отпущена кнопка мыши

  • движение мыши (с нажатой или ненажатой кнопкой)

  • пересечение границы

  • регион открылся или закрылся (exposed or covered)

  • операции перетаскивания

  • операция типа "тащи и бросай"

  • функции прорисовки

Более полную информацию о типах событий см. в описании PhEvent_h "Справочника библиотечных функций Photon'а".

Как владельцы регионов уведомляются о событиях

Владельцы региона могут быть уведомлены о событиях менеджером Photon'а тремя различными способами:

  • упорядоченным опросом (polling);

  • синхронным уведомлением;

  • асинхронным уведомлением.

Упорядоченный опрос

При упорядоченном опросе приложение вызывает некую функцию, которая запрашивает менеджер Photon'а с требованием немедленного ответа – либо с каким-то событием, либо с состоянием, указывающим, что никакое событие не доступно.

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

Синхронное уведомление

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

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

Асинхронное уведомление

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

При асинхронном уведомлении приложение может блокироваться на нескольких источниках, включая процессы, не являющиеся приложением Photon'а.

Регион устройств

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

  • регион драйверов, располагающийся на пользовательской стороне региона устройств;

  • регион приложений, располагающийся на другой стороне региона устойств.

Менеджер Photon'а использует регион устройств для фокусирования событий указателя мыши и событий клавиатуры, а также для управления событиями перетаскивания.

Фокусировка указателя

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

Сгенерированное драйвером событие указателя является несфокусированным, или необработанным, до тех пор, пока оно не достигнет региона устройств, где менеджер Photon'а его перехватит и затем определит ему местоположение в пространстве координат Photon'а.

Определение этого местоположения – которое известно как фокусировка события – управляет тем, какие регионы будут накапливать событие. Затем менеджер Photon'а повторно сгенерирует событие из сфокусированного местоположения.

Поскольку Photon генерирует сфокусированные или сфабрикованные (cooked) события перемещения указателя в обоих направлениях от региона устройств, программы приложения могут в той же степени, что и программы драйвера, быть информированными о действиях указателя. Например, когда графический драйвер накапливает сфокусированные события указателя, он обновляет местоположение графического изображения указателя на экране.

Фокусировка клавиатуры

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

Оконный менеджер дополняет методы фокусировки клавиатуры. Более подробно см. раздел "Оконный менеджер Photon'а".

События перетаскивания

Приложение инициирует перетаскивание, генерируя событие перетаскивания для региона устройств. Как только это событие забирается регионом устройств, менеджер Photon'а берёт на себя заботу о взаимодействии с указателем (т.е. перетаскиваемым прямоугольником) до тех пор, пока операция перетаскивания не будет завершена. После завершения, регион устройств генерирует событие перетаскивания для приложения.

Событие "тащи и бросай"

Во время выполнения операции "тащи и бросай" генерируется серия событий, чтобы известить вовлечённые в эту операцию виджеты о состоянии операции. Некоторые из этих событий генерируются для источника операции, остальные – для адресата этой операции. Более подробно см. главу "Тащить и бросать".

Драйверы фотона

В Photon'е драйверы не имеют существенных отличий от других приложений. Это просто программы, которые используют регионы и события конкретным образом, чтобы обеспечить свой сервис. В зависимости от своих функций драйвер может быть драйвером ввода или драйвером вывода.

Характеристики

Тип файла
Документ
Размер
7,62 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6392
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее