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

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

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

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

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

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

Размерами корневого региона являеются размеры всего координатного пространства 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'е драйверы не имеют существенных отличий от других приложений. Это просто программы, которые используют регионы и события конкретным образом, чтобы обеспечить свой сервис. В зависимости от своих функций драйвер может быть драйвером ввода или драйвером вывода.

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

Драйверы ввода

Драйвер мыши

Драйвер мыши размещает регион на пользовательской стороне региона устройств. Он получает информацию от мыши как аппаратного устройства и строит необработанные события указателя Photon'а, которые затем генерируются в направлении корневого региона.

Драйвер клавиатуры

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

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

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

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

Драйверы вывода

Графический драйвер

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

 API прорисовки Photon'а накапливает запросы на прорисовку в пакеты, которые генерируются как одно событие прорисовки.

Несколько графических драйверов

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

Драйверы, использующие отдельные регионы

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

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

Драйверы, использующие перекрывающиеся регионы

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

Инкапсуляция драйверов

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

Оконный менеджер Photon'а

Оконный менеджер является необязательным приложением Photon'а, которое управляет появлением и работой с меню, кнопками, линейками прокрутки и прочим подобным. Он обеспечивает для оконной системы свойство "видеть и осязать" (напр., Motif).

Оконный менеджер также управляет рабочей областью, дополнительными методами для фокусирования событий клавиатуры, и позволяет Вам отображать фоновую плоскость. Для обеспечения всех этих служб оконный менеджер располагает в пространстве событий несколько регионов:

  • Регионы оконных рамок

  • Регион фокусировки

  • Регион рабочей области

  • Регион фона

Регионы оконных рамок

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

Чтобы указать, что он может обеспечить оконные службы, оконный менеджер регистрируется у менеджера Photon'а. Когда приложение открывает окно, оконный менеджер устанавливает от своего имени два региона: регион рамки окна и регион приложения (или регион окна). Регион рамки окна чуть больше по размерам, чем регион окна и располагается прямо за ним.

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

Регион фокусировки

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

Оконный менеджер может перенаправлять события клавиатуры на регионы, которые не расположены непосредственно позади экранного указателя. Например, он может фокусировать события в сторону последнего окна, на котором "щёлкнул" пользователь (т.е. активное окно). Оконный менеджер может направлять события клавиатуры на этот активный регион, даже если регион прикрыт другим регионом.

Регион рабочей области

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

Регион фона

Пользователь часто любит иметь разукрашенную картинку в качестве фона, отображённую позади окон на экране. Чтобы отобразить такую побитовую карту, оконный менеджер располагает в пространстве событий регион фона.

ПРИЛОЖЕНИЕ 2. ОБЗОР ВИДЖЕТОВ

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

Иконка PhAB

Класс

Описание

PtArc

Эллиптический сектор

PtBasic

Суперкласс – основа для большинства виджетов

PtBezier

Кривая Безье

PtBkgd

Подложка для непрозрачных образов, градиентов, картинок.

PtButton

Кнопка ( для инициирования действия )

PtCalendar

Календарь

PtClient

Суперкласс для клиентских виджетов (не присутствует в типичной установке)

PtClock

Аналоговые, цифровые или часы из «светодиодов»

PtColorPanel

Панель цветов

PtColorPatch

Виджет предназначен для того, чтобы помочь в выборе параметров цвета

PtColorSel

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

PtColorSelGroup

Набор виджетов для выбора цвета

PtColorWell

Прямоугольный виджет, отображающий цвет и позволяющий его изменить

PtComboBox

Текстовое поле с возможностью выбора значения из списка

PtCompound

Суперкласс для смешанных виджетов (не присутствует в типичной установке)

PtContainer

Суперкласс для виджетов-контейнеров (не присутствует в типичной установке)

PtDisjoint

Суперкласс для «разрозненных» (состоящих из отдельных частей) виджетов (не присутствует в типичной установке)

PtDivider

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

PtEllipse

Эллипс

PtFileSel

Виджет в виде дерева, позволяющий выбирать файлы и папки

PtFlash

Контейнер, отображающий анимацию в формате Macromedia Flash 4

PtFontSel

Виджет для выбора атрибутов шрифта

PtGauge

Суперкласс для виджетов - ?? (не присутствует в типичной установке)

PtGenList

Суперкласс для виджетов – списков (не присутствует в типичной установке)

PtGenTree

Суперкласс для виджетов – «деревьев» (не присутствует в типичной установке)

PtGraphic

Суперкласс для виджетов-изображений (не присутствует в типичной установке)

PtGrid

Сетка

PtGroup

Группа – для создания используйте команду «Сгруппировать вместе» (« Group together»)

PtLabel

Ярлык в виде текста, изображения или образа

PtLine

Прямая линия (один сегмент )

PtList

Список текстовых полей

PtMenu

Меню – для создания меню воспользуйтесь специальным модулем меню

PtMenuBar

Панель меню, располагаемая в верхней части окна

PtMenuButton

Кнопка, при нажатии на которую всплывает меню или подпункт меню

PtMeter

Виджет для отображения количественных характеристик чего-либо

PtMultitext

Многострочное текстовое поле с возможностью отображения шрифтов с различными атрибутами

PtNumeric

Суперкласс для числовых полей (не присутствует в типичной установке)

PtNumericFloat

Поле для ввода чисел с плавающей запятой

PtNumericInteger

Поле для ввода целочисленных данных

PtOnOffButton

Кнопка, имеющая два состояния

PtOSContainer

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

PtPane

Контейнер, управляющий дочерними виджетами

PtPanelGroup

Контейнер, управляющий закладками

PtPixel

Набор точек

PtPolygon

Набор соединенных сегментов-линий

PtPrintSel

Составной виджет, позволяющий настроить печать

PtProgress

Индикатор процесса

PtRaw

Виджет в котором вы можете использовать низкоуровневые функции рисования.

PtRawList

«Чистый» список

PtRawTree

«Чистоу» дерево

PtRect

Прямоугольник

PtRegion

Регион фотона – должен создаваться PtCreateWidget()

PtScrollArea

Суперкласс для «прокручивающихся» виджетов (не присутствует в типичной установке)

PtScrollBar

Полоса прокрутки

PtScrollContainer

Окно для просмотра элементов большого размера («большой виртуальной поверхности»)

PtSeparator

Разделитель

PtServer

Виджет-сервер – должен создаваться PtCreateWidget()

PtSlider

«Ползунок» - механизм ввода целочисленных данных из определенного диапазона

PtTab

Закладка

PtTerminal

Эмулятор терминала

PtText

Однострочное текстовое поле

PtTimer

Таймер

PtToggleButton

Кнопка у которой два состояния

PtToolbar

Суперкласс для виджетов-панелей инструментов

PtToolbarGroup

Группа элементов панели инструментов

PtTree

Иерархическое дерево

PtTrend

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

PtTty

Устройство – терминал

PtWebClient

Виджет для отображения HTML страниц

PtWidget

Суперкласс для любого виджета (не присутствует в типичной установке)

PtWindow

Окно – для создания следует использовать соответствующий модуль

Приложение 3. Поддержка многоязычности Unicode

В этом приложении описывается, как Photon обрабатывает символы различных языков. Это включает:

  • Широкие и многобайтовые символы

  • Unicode

  • UTF-8 кодирование

  • Функции преобразования

  • Другие кодировки

  • Драйверы клавиатуры

  • Формирующие последовательности Photon'а

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

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

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

Список файлов учебной работы

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