QuickDraw GX
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
QuickDraw GX был заменой QuickDraw (QD) 2D-графического механизма и диспетчера печати в классической Mac OS . [1] Его базовая платформа рисования представляла собой объектно-ориентированную , независимую от разрешения систему с сохраняемым режимом , что значительно упрощало программистам выполнение общих задач (по сравнению с исходным QuickDraw). Кроме того, GX добавил различные команды рисования кривых, которых не хватало в QD, а также представил TrueType в качестве базовой системы шрифтов. [2]
Хотя GX решал многие проблемы, с которыми сталкивалась QD, к моменту его появления большинство разработчиков уже разработали свои собственные решения этих проблем. GX также страдал от ряда несовместимостей в существующих программах, особенно в тех, которые разработали свои собственные расширения QD. Это, в сочетании с противодействием со стороны значительной части рынка разработчиков, особенно со стороны Adobe, владельца PostScript , и отсутствием информации от Apple о преимуществах GX и о том, почему пользователям следует принять ее, привело к тому, что технология была отодвинута на второй план.
QuickDraw GX не получил большого развития после своего первого выпуска и был формально «убит» с покупкой NeXT и возможным принятием модели обработки изображений Quartz в Mac OS X. Многие из функций его компонентов сохранились и теперь являются стандартными для текущей платформы Macintosh; TrueType GX, в частности, стал широко используемым современным стандартом в форме переменных шрифтов OpenType .
История
[ редактировать ]Проблемы с QuickDraw
[ редактировать ]К концу 80-х годов архитектурные ограничения QuickDraw начали налагать ограничения на Apple и сторонних разработчиков. [3]
- Все общедоступные структуры данных QuickDraw предполагают 16-битное целочисленное координатное пространство без возможности использования дробных координат. [4]
- Добавлять новые функции в QuickDraw было крайне сложно из-за отсутствия сокрытия данных в API. Центральной структурой данных в QuickDraw был GrafPort, структура со всеми открытыми переменными-членами. Хуже того, структура GrafPort была разработана для непосредственного внедрения в структуры данных сторонних разработчиков, поэтому Apple не могла добавлять новые переменные. Color QuickDraw, представленный в 1987 году, представлял собой огромный шаг вперед по сравнению с оригинальным черно-белым QuickDraw. Это увеличило сложность разработки цветных приложений для Mac. [4] Например, QuickDraw не мог легко поддерживать сложные графические преобразования, такие как вращение и сдвиг, а введение новых типов данных, таких как кривые, было невозможно. [5]
Создание GX
[ редактировать ]Похоже, что GX начался окольным путем, первоначально как система контурных шрифтов, которая будет добавлена в Mac OS. В механизм рендеринга шрифтов был включен ряд полезных расширений, в частности, система координат с фиксированной точкой и различные команды рисования кривых. Система также включала систему «обертывания» существующих шрифтов PostScript Type 1 в собственный внутренний формат, которая добавляла версии предварительного просмотра растровых изображений для быстрого рендеринга на экране. Позднее этот проект приобрел расширенную роль, когда Apple и Microsoft согласились работать вместе над созданием альтернативы шрифтам PostScript, которые были чрезвычайно дорогими, создав проект TrueType на основе существующих усилий Apple.
Другой проект, поначалу явно не связанный с этим, пытался решить проблемы с преобразованием QuickDraw в различные форматы вывода на принтер. Если раньше разработчики были вынуждены писать собственный код для преобразования экранного дисплея QuickDraw в PostScript для печати, то в новой архитектуре принтера такие преобразования будут обеспечиваться операционной системой. Кроме того, новая система была специально спроектирована так, чтобы быть максимально гибкой и поддерживать не только принтеры QD и PS, но, возможно, Hewlett-Packard . другие стандарты, такие как PCL и Система также поддерживала «настольные принтеры» (принтеры, которые появлялись в виде значков на рабочем столе пользователя), давно востребованную функцию, отсутствующую в QD, и добавляла улучшенные диалоговые окна и элементы управления печатью.
Неизвестно, когда проекты объединились, но в то время это была общая тема в Apple. Большую часть конца 1980-х и начала 1990-х годов менеджеры среднего звена вели ожесточенную войну за сферы влияния , собирая проекты в «сверхпроекты», которые содержали достаточно важного кода, чтобы сделать их «неубиваемыми». К сожалению, это часто резко задерживало реализацию проектов; один компонент отставал от графика, что вынудило отложить выпуск всей коллекции, чтобы ее можно было выпустить «полностью». QuickDraw GX стал одной из таких жертв, а задержки и изменения направления в TrueType, а также другие проблемы сильно задержали внедрение GX.
Apple Обсуждения технологии GX начали появляться в различных отраслевых журналах примерно в 1992 году, особенно в собственной разработке . На тот момент казалось, что релиз неизбежен, возможно, в конце 1992 или начале 1993 года.
Выпуск и использование
[ редактировать ]Первоначально GX был выпущен примерно в январе 1994 года как отдельный пакет. Версия 1.1.1 была включена в состав Системы 7.5 позже в том же году, но успеха не имела. Пакет был достаточно большим, чтобы перегружать память большинства существующих компьютеров Macintosh того времени, а аргументы типа «теперь вы можете печатать в PostScript» были менее чем впечатляющими, учитывая, что многие существующие программы уже добавили такую поддержку. Пользователи и разработчики обычно игнорировали GX, и рынок для этой системы просто так и не появился.
Причина неудачи GX на рынке неизвестна. Во-первых, GX была очень большой и требовала столько же памяти, сколько и остальная часть ОС. [6] Скорость также была проблемой, поэтому ее можно было использовать только на компьютерах Mac с Motorola 68020 или выше. Учитывая, что установленная база Mac в то время все еще содержала большое количество компьютеров на базе 68000, таких как Mac Plus , эти требования ограничивали количество компьютеров, на которых он мог работать. Когда он был впервые выпущен, в одном обзоре отмечалось: «QuickDraw GX не для всех и требует больше оперативной памяти, чем есть на многих компьютерах Mac». [7] [ мертвая ссылка ]
Кроме того, API системы был очень большим и занимал несколько книг. Реализация программы GX была непростой задачей, хотя разработка должна была быть проще. Это была не проблема самой архитектуры GX, а побочный эффект «всеохватывающего» характера системы — проблема, от которой страдало большинство продуктов Apple той эпохи (см., PowerTalk например, ). В результате привлекательность застройщика была ограничена; для использования системы в программах потребовалось бы много усилий, а полученное приложение могло бы работать только на подмножестве установленной базы. Число программ на базе GX (в отличие от GX- совместимых ) составило менее шести, включая Typestry от Pixar. [8] компании Softpress и UniQorn . [9]
Кроме того, изменение систем печати создало серьезные реальные проблемы. Хотя печать PostScript никогда не была простой задачей, за годы, прошедшие с момента выпуска оригинального LaserWriter , разработчики создали библиотеку решений распространенных проблем. С изменением архитектуры GX большинство из них перестало работать. Для принтеров также требовались новые «драйверы GX», и Apple не поставляла драйверы для всех своих принтеров , не говоря уже о сторонних принтерах. Проблемы с печатью были повсеместными, и их было настолько сложно исправить, что пользователи часто в отчаянии отказывались от системы.
Популярность GX среди пользователей была очень близка к нулю, как и в случае с большинством новых технологий, выпущенных Apple в начале 1990-х годов. Возможно, он получил широкое распространение в рамках проекта Copland , но Copland так и не был запущен. Хотя Apple продолжала заявлять, что GX — это будущее графики на Mac, к 1995 году стало ясно, что они больше не «проталкивают» его, что расстраивало его сторонников.
В Mac OS 8 прекратилась поддержка архитектуры печати GX, хотя архитектуры управления текстом и цветом сохранились. Элементы архитектуры управления текстом стали частью спецификации TrueType, а элементы архитектуры управления цветом стали частью спецификации Международного консорциума цвета . С появлением Mac OS X части GX продолжают жить в Apple Type Services for Unicode Imaging (ATSUI) и в ColorSync , формат файла которых идентичен исходному формату, разработанному для GX.
Описание
[ редактировать ]Графика
[ редактировать ]QuickDraw GX основан на объектно-ориентированной модели, в которой графические объекты осознают свое состояние и несут ответственность за него. В отличие от QuickDraw, здесь не существует универсального «состояния», каждая команда рисования может воссоздать состояние из данных, хранящихся в нем, или различных «родительских» объектов. Например, программист может создать redBox
объект, который сначала устанавливает красный цвет, а затем рисует квадрат. С этого момента программе больше не нужно явно задавать цвет перед рисованием, система GX сама всегда правильно устанавливает цвет рисования, когда ее просят нарисовать. redBox
и сбросьте его, когда закончите. Поскольку это состояние было частным и отправлялось в GX при необходимости, GX теоретически позволял Mac OS поддерживать защищенную память, поскольку состояние больше не передавалось напрямую между программами и графической системой.
Это сильно контрастирует с оригинальным QuickDraw, где за все изменения состояния отвечал программист. Например, если бы нужно было нарисовать красный блок, а затем серию линий, линии также были бы красными, если бы программист сначала явно не изменил цвет. Преимущество этого подхода заключается в том, что он сводит к минимуму количество команд, необходимых для установки состояния; программист может организовать рисование для одновременного рисования групп объектов с одинаковым стилем и тем самым сэкономить время. Недостатком этого подхода является то, что легко «забыть» изменить состояние и в конечном итоге вызвать проблемы, причем настолько легко, что программисты часто сохраняют и восстанавливают полное состояние перед каждой командой рисования, тем самым потенциально снижая производительность.
Состояние рисования в GX было иерархическим. Для каждого окна создавался режим рисования по умолчанию, как и в QD, и объекты рисования без каких-либо других изменений состояния будут использовать эти настройки по умолчанию. Затем программист мог изменить состояние самих объектов, как в нашем примере. redBox
Например, или поочередно измените состояние всего рисунка, установив состояние в объекте окна. Объекты GX можно было легко собирать в группы, которые сами по себе являются объектами, что позволяет устанавливать состояние для всего сложного объекта.
Одной из частей общего состояния рисования было gxMapping
. 3х3 Это была матрица , которая могла выражать произвольные линейные преобразования в двух измерениях, включая перспективы искажения . Все объекты GX имели связанное отображение как часть состояния рисования, что позволяло использовать такие вещи, как повороты и перемещения. Хотя все это состояние проходило в gxMapping
для этого объекта GX также предоставил команды «обертки», такие как «поворот», чтобы упростить API использование .
В отличие от QuickDraw, QuickDraw GX допускал дробные координаты. Однако это были значения с фиксированной запятой , а не с плавающей запятой . Во время разработки GX (конец 1980-х — начало 1990-х годов) использование арифметики с плавающей запятой все еще имело значительное снижение производительности.
Графическая архитектура GX была построена на основе нескольких типов заранее созданных объектов, хотя API для их изучения и управления ими был доступен полный набор вызовов :
- gxShape определял базовую геометрию фигуры (например, координаты контрольных точек кривой или текстовое содержимое текстового объекта).
- gxStyle . определяет детали базовой геометрии фигуры, такие как толщина линий, стили окончания и соединения, образец заливки и шрифт текста
- gxInk определял , как значения пикселей должны были вычисляться при рендеринге формы: помимо указания базового цвета для формы, это также включало сложную структуру режима передачи , которая могла определять широкий спектр функций начального и конечного значения пикселя назначения.
- gxFont . представлял собой шрифт, либо установленный для общесистемного использования, либо устанавливаемый текущим приложением «на лету» для собственного использования Вызовы API позволяли запрашивать свойства шрифта, включая определение того, какие кодировки (Unicode, языковые и т. д.) он может поддерживать.
- gxProfile представлял собой цветовой профиль ColorSync, используемый как часть спецификации цвета для рисования. В GX интегрирована полная поддержка сопоставления цветов на всех этапах процесса рисования, а также поддержка цветовых спецификаций, отличных от RGB (таких как HSV , YUV и CIE XYZ).
- gxTransform определял связь между формой и устройством отображения. Помимо пути обрезки и gxMapping, которые преобразовывали фигуру перед ее отображением на устройстве вывода, этот объект также задавал информацию проверки попадания , которая контролировала реакцию на щелчки пользователя в области фигуры.
- gxViewDevice . представляет собой блок пиксельной памяти, в который будет отображаться рисунок Это может быть реальный экранный дисплей или закадровый блок памяти. GX поддерживал все макеты пикселей QuickDraw ; это позволило как устройству просмотра GX, так и QuickDraw GrafPort указывать на одни и те же пиксели, тем самым позволяя приложениям смешивать оба набора вызовов рисования.
- gxViewPort . был логическим местом назначения для рисования gxTransform может указать список из более чем одного из них; форма будет нарисована во всех из них одновременно
GXDrawShape
вызов. - gxViewGroup представляет соединение между устройствами просмотра и портами просмотра. Каждый порт просмотра имел gxMapping, определяющий его отношение к глобальной системе координат группы представлений; и каждое устройство просмотра имело gxMapping, которое определяло его местоположение и размер пикселей относительно координат группы просмотра. Существовала одна предопределенная группа просмотра, которая содержала все экранные устройства просмотра (и чьи порты просмотра фактически соответствовали экранным окнам); приложения могли свободно создавать свои собственные группы просмотра для устройств просмотра за кадром и портов просмотра.
- gxTag . позволял прикреплять произвольную информацию, определяемую приложением, к большинству вышеуказанных типов объектов Каждый тег имел код типа OSType , но к одному и тому же объекту могло быть прикреплено несколько тегов одного типа.
Типы фигур
[ редактировать ]Формы GX могут быть разных типов:
- прямая линия, определяемая своими конечными точками.
- прямоугольник, определяемый его левой, правой, верхней и нижней границами.
- многоугольник, определяемый последовательностью координат вершин.
- форма кривой представляла собой одну квадратичную кривую Безье, определяемую тремя контрольными точками.
- форма пути , которая представляла собой последовательность квадратичных кривых Безье . С каждой контрольной точкой был связан флаг, указывающий, находится ли она «по кривой» или «не по кривой». Точка на кривой была конечной точкой Безье, а точка вне кривой - средней точкой Безье. Если встречались две последовательные точки отклонения от кривой, то считалось, что неявная точка на кривой лежит на полпути между ними. Две последовательные точки на кривой образовывали отрезок прямой.
- растровая форма содержала растровые данные в любом из поддерживаемых форматов пикселей.
- фигура изображения представляла собой группу других фигур (возможно, включая рекурсивные фигуры изображений) с возможностью указания дополнительных преобразований, применимых ко всей группе.
- различные типы типографских фигур описаны в разделе «Типографика GX» ниже.
- дополнительные типы, которые, возможно, не были полезны непосредственно для рисования, но могли быть объединены с другими фигурами при расчетах геометрии: пустая фигура (отрисовка которой ничего не дала); форма точки , состоящая из одной точки; и полную форму (бесконечной протяженности).
Типография
[ редактировать ]Типографские функции GX были интегрированы в виде трех типов gxShape:
- Текстовые фигуры были самыми простыми: они содержали один фрагмент текста, выполненный в одном стиле шрифта.
- Формы глифов были способом использовать формы символов (« глифы ») как чистую геометрию, например, в качестве обтравочных контуров .
- Формы компоновки были наиболее продуманными. Их можно разделить на несколько прогонов с разными стилями шрифтов, даже с разными языковыми кодировками и направлениями текста. Таким образом, можно было встроить последовательность арабского текста, отображаемого справа налево, во внешнюю последовательность римского текста, написанного слева направо. Формы макета раскрыли всю мощь контекстных замен, кернинга, вариаций и всех других возможностей шрифтов TrueType GX. Их основным ограничением было то, что они ограничивались одной строкой текста.
API GX также предоставляет функции проверки попадания, так что, например, если пользователь щелкнет фигуру макета в середине лигатуры или в области между изменением направления текста, GX сам предоставит интеллектуальные возможности для определения того, какой символ позиция в исходном тексте соответствовала щелчку.
TrueType GX
[ редактировать ]В GX было проведено важное различие между символом и глифом , это различие также встречается в стандарте Unicode. Символ . был абстрактным символом из набора символов системы письма, например, буквой «f» в системах письма латинского алфавита Принимая во внимание, что глиф представлял собой определенную графическую форму из определенного шрифта, независимо от того, представляла ли эта форма один символ или набор символов. Так, например, в шрифте Hoefler Text были глифы, обозначающие буквы «f» и «l». У него также был еще один глиф для обозначения лигатуры «f», который можно было автоматически составлять (вместо отдельных глифов) везде, где два абстрактных символа «f» и «l» встречались последовательно в исходном тексте.
Это различие было важным, поскольку такие контекстные замены происходили во время рендеринга без каких-либо изменений в исходной строке символов. Таким образом, они не имели никакого влияния на редактирование или поиск текста. Файлы шрифтов PostScript Type 1 имеют сопоставление только «один к одному», а поскольку лигатуры имеют сопоставления «многие к одному», их нельзя вставить в композицию без изменения исходной строки символов, например, лигатура ffi помещается в позицию заглавной буквы Y. в продуктах шрифтов Adobe, а «Adobe Offices» создается путем ввода «Adobe O» <изменить шрифт> «Y» <изменить шрифт> «ces». В макете строка символов разрывается, а в PDF-файле, созданном из потокового PostScript, символы f+f+i можно восстановить только в том случае, если имя глифа соответствует списку имен глифа.
Контекстными заменами можно управлять, включив или отключив параметры композиции шрифта TrueType GX в WorldText на компакт-диске Mac OS 9 или в TextEdit в Mac OS X. Шрифты обычно имеют функции, называемые «общими лигатурами» (например, пример «fl»). ), «редкие лигатуры» (такие как письменные лигатуры ME и MD), «архаичные нетерминальные s» (для автоматической замены буквы «s» на архаичную форму , больше похожую на «f», за исключением концов слова) и даже выбор между совершенно отдельными наборами рисунков глифов, например, более или менее витиеватыми формами.
Правила выполнения контекстных замен реализованы в виде конечных автоматов, встроенных в шрифт, и интерпретируются LLM Line Layout Manager, аналогом модуля управления цветом CMM для сервисов ColorSync. Управление текстом в операционной системе позволило QuickDraw GX принимать строки символов с любым сочетанием систем письма и сценариев и автоматически составлять строки, независимо от того, была ли кодировка Unicode 1.0 или 8-битная и 8/16-битная кодировки.
Еще одной интересной особенностью были «вариации» шрифтов, которые были эквивалентом GX « множественных основных » шрифтов Adobe. В то время как шрифты Adobe требовали от пользователя явного создания «экземпляра» шрифта путем указания значений для осей вариаций, прежде чем они могли его использовать, GX позволял пользователю указывать шрифт непосредственно для стиля макета, а затем динамически изменять значения осей и сразу наблюдайте влияние на расположение текста.
Эта технология стала основой того, что Microsoft и Adobe приняли на вооружение в 2016 году, разработав переменные шрифты OpenType .
Разработчики
[ редактировать ]Кэри Кларк был архитектором и техническим руководителем QuickDraw GX. Он работал над Color QuickDraw и впоследствии стал одним из первых участников Rocket Science Games и WebTV. Кейт МакГрегор был менеджером графической группы и основным разработчиком цветовой архитектуры для QuickDraw GX, а Роберт Джонсон был постоянным математиком. [ нужны дальнейшие объяснения ]
Среди других разработчиков проекта:
- Том Дауди
- Майкл Фэйрман
- Дэвид Ван Бринк
- Крис на Землю
- Оливер Стил
- Дэйв Гуд
- Пабло Ферникола
TrueType GX
[ редактировать ]Дэйв Дж. Опстад был архитектором типографского движка и таблиц формирования шрифтов Apple. Затем он стал техническим руководителем в Monotype Imaging. Среди других, кто работал над TrueType GX:
- Эрик Мэдер
- Сампо Каасила
- Майк Рид
- Арло
Ссылки
[ редактировать ]- ^ «Документация разработчика Mac OS 8 и 9: QuickDraw GX» . 8 июля 2003 г. Архивировано из оригинала 8 июля 2003 г. Проверено 26 апреля 2024 г.
- ^ алиб-мс (10.06.2020). «Краткая история TrueType — Типографика» . Learn.microsoft.com . Проверено 26 апреля 2024 г.
- ^ Энгст, Тоня (12 сентября 1994 г.). «TidBITS: Предварительное практическое руководство по QuickDraw GX, часть I» . Db.tidbits.com . Проверено 9 ноября 2009 г.
- ^ Jump up to: а б «Наследие: Справочник по QuickDraw» . Разработчик.apple.com . Проверено 9 ноября 2009 г. [ мертвая ссылка ]
- ^ Липтон, Дэниел (06 декабря 2004 г.). «QUICKDRAW GX ДЛЯ ПОСТСКРИПТОВЫХ ПРОГРАММИСТОВ» . МакТех . Корпорация Xplain . Проверено 9 ноября 2009 г.
- ^ Халпер, Марк (12 декабря 1994 г.). «Система Apple 7.5 прославилась простотой использования» . Компьютерный мир . Том. 28, нет. 50. с. 41.
- ^ «TidBITS#243/12-сен-94» . Tidbits.com . Проверено 9 ноября 2009 г.
- ^ Фили, Джим (июль 1995 г.). Кэти Эйбс (ред.). «Новая жизнь QuickDraw GX» . Макмир . Том. 12, нет. 7. с. 119.
- ^ Шорр, Джозеф (август 1996 г.). «Юникорн 1.0.1» . Макмир . Том. 13, нет. 8. с. 56.
Внешние ссылки
[ редактировать ]- QuickDraw GX — документация Apple GX в Интернете.