Руководство программиста в Photon (953920), страница 67
Текст из файла (страница 67)
Например, драйверы мыши и клавиатуры являются драйверами ввода, поскольку они генерируют события и являются источником воздействия аппаратного обеспечения. С другой стороны, графические драйверы являются драйверами вывода, потому что они накапливают события, которые становятся причиной того, что драйверы воздействуют на аппаратные устройства.
Драйверы ввода
Драйвер мыши
Драйвер мыши размещает регион на пользовательской стороне региона устройств. Он получает информацию от мыши как аппаратного устройства и строит необработанные события указателя 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 обеспечивает разработчиков возможностью создания приложений, которые могут с лёгкостью поддерживать основные языки и алфавиты мира.