Изменения в обработке и визуализации текста в Windows 7
Несмотря на то, что изображения и видео давно и прочно обосновались на наших компьютерах, мы все еще очень много времени проводим, взаимодействуя тем или иным образом с текстом. Лишь немногие из нас по-настоящему задумываются о технологиях, необходимых для качественного визуального представления текста и действительно использующих шагнувшие далеко вперед технические возможности дисплеев, графических процессоров и программных интерфейсов, доступных разработчикам. В Windows 7 базовая поддержка вывода текста и шрифтов в GDI продолжает оставаться основой, обеспечивающей совместимость приложений. Построенная на основе современной инфраструктуры DirectX, Windows 7 улучшает качество отображения текста с помощью доступного для разработчиков DirectWrite API. Это новая подсистема API, которая вскоре, как вы сами увидите, получит широкое распространение в приложениях от Microsoft и сторонних разработчиков, а также в самой Windows. В статье речь пойдет об изменениях в технологии ClearType и работе со шрифтами, которые стали доступны благодаря новым текстовым API базирующимся на GDI. Об этом было подробно рассказано в ходе PDC 2008. Автором статьи является Ворашай Шаоверапразит (Worachai Chaoweeraprasit), ведущий специалист в группе разработки графических компонентов системы. – Стивен
Одна из главных задач создания Windows 7 – улучшение графического представления информации и повышение точности передачи графики в системе. В связи с этим наша группа работает над усовершенствованием основополагающего компонента – механизма представления текста, т.е. элемента, который всегда находится у вас перед глазами, хотя мы надеемся, что сам механизм остается для вас незаметным.
Необходимость качественного текста
Около 80% времени, которое пользователи проводят за компьютером, они читают или пишут. Это не должно никого удивлять, поскольку машина взаимодействует с человеком прежде всего посредством текста, и до тех пор, пока не существует технологии прямой передачи сигналов компьютера в мозг, текст, скорее всего, останется основным способом получения информации с экрана ПК.
Исследования показывают, что чем качественнее текст, тем выше скорость чтения и степень усвоения материала. Люди – существа, способные великолепно ухватывать суть написанного и строить цепочки взаимосвязей между словами, являющихся визуальным отображением понятий. В этом и заключается умение читать. Мы научились делать это так хорошо, что основная работа выполняется автоматически, едва ли не бессознательно, с огромной скоростью, при условии, что представление текста для этого специально оптимизировано. Возможно, это объясняет, почему многие могут часами зачитываться книгой, при том что некоторые испытывают усталость, сравнительно недолго посидев перед монитором. Любой из факторов визуального восприятия в состоянии серьезно осложнить, замедлить процесс чтения. Четкий текст – это текст, отображенный так, чтобы ускорить чтение улучшить восприятие прочитанного.
Равномерность белого поля, окружающего каждую букву, слово, строчку и абзац, играет огромную роль в поддержании темпа чтения, а черный цвет знаков служит опорой нашего внимания. Слишком длинная строчка, слишком тесно друг к другу расположились буквы в слове, не выровнен абзац – любое из этих условий удаляет от смысла написанного и делает носитель текста [экран] все более заметным для нас. Настоящее искусство представления текста заключается в том, чтобы его содержание осознавалось и впитывалось читателем, чтобы читатель уделял как можно меньше внимания тому, как, собственно говоря, создано изображение текста. Любой, кто связан с типографской работой, скажет: хорошее качество печати – это его способность не привлекать ничье внимание; только плохое качество печати оставляет след в восприятии, бросается в глаза. Роль Windows как платформы состоит в том, чтобы обеспечивать безукоризненное представление текста и дать разработчикам инструменты, позволяющие наилучшим образом визуализировать текст в приложениях, разумеется, в тех пределах, в которых это необходимо.
Совершенствуя существующие технологии
Люди склонны вырабатывать привычки, и часто привычки становятся преимущественным способом существования. Чем проще деятельность, тем легче она поглощает нас, и тем труднее нам переключиться на что-то иное. Когда заходит речь о тексте на экране, мы говорим об экране, на который смотрим изо дня в день. И внезапные перемены в этом случае могут сослужить плохую службу – даже если это перемены к лучшему. Так как же нам все-таки улучшить то, к чему мы так безнадежно привыкли? Мы собирались постепенно продвигаться вперед в этом деле, деле улучшения привычного, сохраняя и поддерживая уже имеющееся, – никаких революций. Однако чтобы понять, в чем заключается усовершенствование, давайте попристальнее взглянем на то, как реализовано текущее представление и какие проблемы приходилось решать на протяжении долгих лет разработок.
Текущая реализация механизма визуализации текста основывается на понятии пикселя устройства отображения. Масштаб текста определенного размера соотносится с количеством пикселей по горизонтали и вертикали на поверхности отображения. Так, текст высотой 10 пунктов соответствует примерно 80 пикселям на бумаге, отпечатанной на обычном принтере с разрешением 600 dpi, а на мониторе с разрешением 96 dpi его высота будет в среднем соответствовать 13 пикселям. Такое положение дел с физическим экраном с трудом соответствует качеству, требуемому для четкой передачи текста.
К счастью, пришествие технологии ClearType коренным образом улучшило четкость, как составляющую понятия качества текста. ClearType использует конструктивные особенности ЖК-мониторов и преимущества человеческого зрения. В ЭЛТ-мониторах расположение красных, зеленых и синих светоизлучающих элементов никак не связано с пиксельной решеткой. На жидкокристаллических же дисплеях каждый пиксель состоит из трех таких элементов: красного, зеленого и синего. Эти элементы (назовем их субпикселями) являются прямоугольниками шириной 1/3 пикселя и высотой 1 пиксель, и расположены они строго по порядку. Обычно графическое ПО рассматривает пиксель как единое целое. ClearType же воспринимает субпиксели как самостоятельные структурные единицы. Наши глаза могут воспринять как контраст цветов, так и контраст яркостей. Но на малых масштабах контраст цветов воспринимается почти в три раза слабее, поэтому текст, отображенный с помощью ClearType, выглядит монохромным и гладким. Это обусловило популярность технологии в последние годы.
Другая приятная особенность ClearType состоит в том, что технология улучшает представление текста, не создавая проблем с совместимостью отдельных приложений – действительный размер глифа не меняется, как не меняется расстояние между соседними знаками. Поэтому ClearType можно включить и выключить, не заботясь о сохранении выбранной возможности для программы или документа. Работа с этой опцией остается целиком на усмотрение пользователя. В Windows 7 мы еще значительнее усовершенствовали механизм управления ClearType, увеличив степень детализации представления с помощью примеров, основывающихся на опыте использования ПК. И, конечно же, как и прежде, вы можете произвольно включать и выключать ClearType.
Однако, как и все остальное в этом мире, использование ClearType – палка о двух концах. Сохраняя обратную совместимость, эта технология ограничена своей неспособностью изменить характер представления глифов. Высота и ширина знаков, а также расстояние между соседними знаками остаются фиксированными и соответствуют округленному числу пикселей при заданном размере шрифта.
Одно из важнейших по сравнению с прошлым усовершенствований, сделанных нами в Windows 7, является переход от стандартной модели аппаратного пикселя к модели, выстраиваемой вокруг так называемого «аппаратно-независимого пикселя» (device independent pixel или DIP). Это некий «виртуальный пиксель», составляющий 1/96 дюйма в формате с плавающей точкой. В этой модели глиф (или любая другая геометрическая абстракция) может уменьшаться до размеров субпикселей и размещаться где угодно между двумя пикселями. Новый ClearType позволяет сжимать глифы для вписывания их в субпиксели экрана, наиболее близкие к их идеальному состоянию, тем самым обеспечивая наиболее качественную и естественную степень четкости отображаемого на экране текста, тем самым приближая его к состоянию, характерному для напечатанного на бумаге.
Приведенное ниже изображение показывает отличия между обыкновенным ClearType (вверху) и новым, естественным, как мы его назвали, ClearType в Windows 7 (внизу). Естественный ClearType требует использования новых API. Обратите внимание, как толщина букв в слове и расстояние между знаками, а также тщательнее соблюдаемые ширина и межсимвольное расстояние улучшают общее восприятие отображаемого слова. Заметьте, что все знаки отображаются в своем реальном размере, никакого искусственного регулирования межсимвольного расстояния не происходит. Желающие могут ознакомиться с великолепной статьей Кевина Ларсона (Kevin Larson), исследователя из группы Advanced Reading Technology, в которой подробно рассмотрены научные аспекты узнавания слов в текстах.
Рис.1. ClearType (вверху) и естественный ClearType (снизу) в Windows 7
Возможность автоматически распределять текст по экрану так, чтобы обеспечивать его наиболее естественное представление, обладает приятным побочным эффектом, а именно – текст теперь может размещаться в строке без необходимой прежде привязки к физической разрешающей способности монитора. Для дизайнера интерфейсов это означает, что теперь стало возможным создавать приложения, будучи уверенным, что на всех остальных экранах оно будет отображено точно так же, как на его мониторе. Это особенно важно для локализованного ПО: переведенный текст будет иметь тот же шаблон, что и оригинальный.
Это усовершенствование в состоянии обеспечить более реалистичное отображение печатного документа на экране, и экранное изображение документа будет точнее соответствовать своему бумажному аналогу. Масштабирование изображения документа тоже выиграет. Представьте себе: документом на экране можно манипулировать так, как будто это лист бумаги, который вы подносите ближе к глазам либо отодвигаете его. Возможно, это сделает чтение с экрана более удобным.
Шрифты и управление ими
Шрифт – душа и сердце типографского искусства. Сегодня в комплекте с Windows поставляется множество шрифтов, в то время как в мире их создается все больше. Windows Vista содержит на 40% больше встроенных шрифтов, чем Windows XP. В Windows 7 мы добавим около 40 новых шрифтов, чтобы держаться в русле. Кроме того, мы добавили некоторые возможности просмотра и классификации шрифтов в Windows 7 Explorer, чтобы немного облегчить работу с большими библиотеками сходных по начертанию шрифтов.
Использующиеся по умолчанию элементы управления в диалоговом окне представления шрифтов, а также выпадающие меню шрифтов в новом ленточном интерфейсе Windows 7 обновлены с тем, чтобы предоставить пользователю более разумные возможности выбора, в том числе на основе пользовательских профилей. В зависимости от характеристик профиля, таких, как язык системы, месторасположение, набор клавиатурных раскладок, в списке шрифтов не будут показаны шрифты для языков, не используемых в определенном пользователем культурном пространстве. Например, иноязычные шрифты не будут по умолчанию показаны пользователю, выбравшему только английские установки системы. Это улучшит концентрацию и послужит повышению эффективности работы в таких приложениях, как NotePad, WordPad и Paint. Сторонние приложения, использующие ленточный интерфейс или элементы управления в диалоговом окне представления шрифтов, получают те же самые преимущества. Пользователь, разумеется, сохраняет возможность вернуть любые доступные в системе шрифты в область видимости, отметив их в соответствующем диалоге из панели управления Windows 7.
В состав Windows XP SP2 было включено 133 шрифта, в состав Windows Vista – уже 191 шрифт, а в Windows 7 мы планируем включить 235 шрифтов.
Этот рост количества естественным образом сопряжен с определенным улучшением качества. Долгое время мы рассматривали шрифты как ресурс, которые должен быть доступен на системном уровне. Он «устанавливался» на компьютер и занимал некое место в пространстве имен файлов, управляемого ядром ОС. Но, возможно, для кого-то окажется важным, что шрифт Arial Black на самом деле не относится к той же группе, в которую входят шрифты Arial Narrow или Arial. А совместная группировка этих шрифтов в системе имеет место потому, что ОС производит ее на основе имени, и для нее это просто разные шрифты с разными, но похожими именами. Именно поэтому при таком способе управления и представления вам не удастся увидеть разные версии одного шрифта одновременно.
Поскольку шрифт является системным ресурсом, необычный способ использования шрифта, такой, как встраивание шрифтов в документы или использование шрифта, характерного только для определенной программы, осуществлялся через механизм «индивидуальной установки». В процедуру такой установки входила проверка имени шрифта на уникальность, но при этом такое имя отделялось и скрывалось от установленных в системе и увидеть шрифт в других приложениях, для которых он не предназначался, было невозможно. Но сама установка «индивидуального» шрифта ничем не отличалась от установки «публичного» – с точки зрения ОС.
Важное усовершенствование в системе управления шрифтами Windows 7 заключается в появлении понятия «набор шрифтов». Благодаря ему стало возможным разделение шрифтов, совместно использующих одно и то же выделенное пространство имен. Системный набор шрифтов подобен имеющемуся в нашем распоряжении сегодня, он создается и управляется системой, но наряду с ним стало возможным создание пользовательских наборов, управление которыми возможно при помощи приложения, в котором шрифты используются. Это позволяет использовать в определенном документе шрифты, характерные только для него, и создавать программы и дополнения, использующие собственные уникальные шрифты. Такое разделение устраняет необходимость не только переустановки и обновления шрифтов на системном уровне, но и потребность обеспечивать доступ к разным версиям одного и того же шрифта в разных наборах.
Новая система управления улучшает упорядочение шрифтов внутри набора. Она поддерживает группировку по толщине, плотности/ширине и наклону, когда шрифты сходного начертания имеют разные характеристики (жирный, обычный, курсив, контурный и т.д.) и объединяются в группы по семействам. Так, Arial Narrow становится принадлежащим к семейству шрифтов Arial. Такой способ группировки рекомендован для оптимального отображения содержимого на базе CSS.
Начертание шрифтов
Шрифты, помимо всего остального, служат инструментом авторского самовыражения. Поэтому технология создания шрифта – инструмент творчества. Одной из таких технологий, набирающих популярность в последнее время, является технология OpenType. С ее помощью можно воплотить в жизнь новые способы создания шрифтов. OpenType позволяет создателю самому определять, как взаимодействуют друг с другом глифы и как происходит процесс их трансформации от одной стадии к другой. Автор шрифта воплощает эти характеристики в исполняемый модуль, представляемый в системе (например, для какой-либо программы) как функция, или особенность, шрифта.
OpenType представляет собой ответвление технологии TrueType Open, разработанной Microsoft в 1994-95 гг. Технология TrueType Open добавляет таблицы GSUB, GPOS, BASE, JSTF и GDEF в формат TrueType. В то время основной целью их использования было создание арабских шрифтов, в связи с необычной сложностью такой задачи. Microsoft решила переименовать технологию в OpenType в 1996 г., и в том же году компания Adobe внедрила в нее свой формат CFF начертаний глифов. Сегодня OpenType используется для улучшения четкости текста, а также для создания новых впечатляющих шрифтов и начертаний для различных языков.
Несмотря на то, что OpenType существует и доступен для разработчиков относительно давно, использование этой технологии в Windows остается пока уделом ряда специализированных программ. Прежняя графическая подсистема Windows не в полной мере интегрировала OpenType для того, чтобы она стала основной технологией отображения текста. Это удерживало многих разработчиков от ее использования, поскольку не существовало способа предварительно оценить результаты внедрения OpenType. В свою очередь, это не могло вдохновить разработчиков популярных программ. Полноценный переход на OpenType – довольно сложный и многоступенчатый процесс, но это и хорошее капиталовложение с прицелом на будущее, уменьшающее риски из-за грядущей несовместимости и увеличивающее достоинства программы. Windows 7 – очередной шаг на таком пути. Я знаю, что многие хотели двигаться быстрее в этом направлении. Хочу заверить: мы делаем все, что от нас зависит, чтобы уравновесить темп инноваций и вопросы совместимости.
Windows 7 не только сама использует технологии OpenType, но и делает их доступными на программном уровне для приложений. Разработчики могут использовать их при создании приложений и экспериментировать, чтобы наилучшим образом применять эту технологию в основных сценариях работы программ. Windows 7 содержит совершенно новый шрифт стандарта OpenType, Gabriola, созданный известным типографом Джоном Хадсоном (John Hudson). Gabriola интенсивно использует контекстные наборы символов и предлагает не имеющие аналогов в прошлом комплекты стилей для различных вариантов использования шрифта. Изображения, приведенные ниже, иллюстрируют имеющиеся варианты начертаний. Обратите внимание, что основное отличие состоит в утонченности линий в разных начертаниях.
Gabriola, набор стилей 1 из 3
Gabriola, набор стилей 2 из 3
Gabriola, набор стилей 3 из 3
Рис. 2. Различные начертания шрифта Gabriola
Следующее изображение иллюстрирует потенциал формы знаков в 8-ом по счету представлении комплекта стилей шрифта для того, чтобы по-разному отображать слово в зависимости от того, в каком именно месте в строке оно расположено.
Рис. 3. Слово отображается по-разному в зависимости от положения в строке
Новые API
Визуализация текста – весьма нетривиальная задача, даже если он воспринимается как некая функция, которая обязана присутствовать по умолчанию. Существуют сотни способов форматирования текстов в документах, и часто различные пути приводят к похожим результатам. HTML/CSS – сложный стандарт и превосходный пример богатства возможностей форматирования и набора. В основе логики форматирования лежат языковые особенности – орфография и пунктуация определенного языка. Windows уже давно поддерживает юникод – еще один довольно сложный стандарт глобального обмена данными. Windows поддерживает и его постоянно растущий набор шрифтов в каждой новой версии. Соотнесение вводимых символов окончательному отображению глифов представляет собой запутанную процедуру трансформации, включающую анализ характеристик шрифта и манеру письма, характерную для того или иного языка. Когда визуализация глифа завершена, он проходит растеризацию, совмещение и фильтрацию для финального отображения на экране.
В связи с тем, что в силу своей природы процесс этот поэтапный, различные приложения требуют различного уровня поддержки от системы обработки текста. Например, легендарному приложению «Hello world» достаточно просто вывести соответствующий текст на экран. Но такой уровень едва ли приемлем для подготовки документа в системах Microsoft Word или Adobe InDesign. Некоторые приложения могут содержать код, ориентированный на использование разных графических подсистем. На практике это осложняет текстовой подсистеме, привязанной к определенной модели графической трансформации, возможность широко использоваться в огромном количестве программ из экосистемы Windows.
Для нас уже на ранней стадии планирования работ по созданию Windows 7 стало очевидным, что интерпретация и визуализация текста – процесс далеко не однородный и разным приложениям требуется разная степень его поддержки. Соответствующий уровень доступности к функциям обработки текста со стороны приложений важен так же, как и собственно функции. Новая система визуализации текста в Windows 7 представляет собой самостоятельную конструкцию внутри операционной системы, названную нами DirectWrite. API для работы с ней состоит из 4 уровней – интерфейсы данных шрифта, поддержка собственно рендеринга, обработка данных языка и определение особенностей ввода с клавиатуры. Они соотнесены так, чтобы нижерасположенный уровень не нуждался в данных из уровня, расположенного выше, и чтобы ни один из уровней не зависел от конкретной модели графического представления. Изображение, которое вы видите, иллюстрирует последнее утверждение: простенькое приложение использует новый механизм определения особенностей ввода с клавиатуры и обработки языковых данных, и окончательная визуализация представляет собой экстраполированную на основе двумерных графических данных трехмерную фигуру. Подсистема двумерной графики, предоставляющая эти данные – тоже новинка, получившая в Windows 7 название Direct2D. Обе эти подсистемы были впервые представлены на конференции PDC 2008 как новая графическая основа в Windows 7.
Рис. 4. Простое приложение генерирует трехмерное изображение текста
DirectWrite служит гарантией прежних вложений разработчиков в существующие технологии GDI и GDI+, по крайней мере, в трех аспектах. Во-первых, описанный выше многоуровневый дизайн DirectWrite позволяет четко отделить процесс размещения текста от процесса его визуализации. Это позволяет приложениям использовать DirectWrite для размещения текста одновременно с визуализацией традиционными способами, такими, как GDI и GDI+. Возможен и обратный сценарий, когда приложение использует GDI для размещения текста одновременно с его обработкой посредством DirectWrite. Во-вторых, это совместимость, обеспеченная тем, что DirectWrite поддерживает все существующие способы ввода и обработки текста, представленные в GDI. Приложение, использующее API DirectWrite, размещает и обрабатывает текст только посредством DirectWrite, в той же манере, как это делает GDI, но при этом GDI не задействован. Текст, размещаемый и обрабатываемый в этом режиме совместимости, с точки зрения пользователя ничем не отличается от результата, полученного при работе GDI, и таким образом сохраняется та конфигурация, макет и прочие особенности текста в окнах приложения или в документе. И, наконец, в-третьих, DirectWrite предоставляет комплект API, полностью сохраняющих работоспособность при использовании GDI. Приложение, работающее со шрифтовым объектом GDI, может преобразовать его в шрифтовый объект DirectWrite – и наоборот. Уровень шрифтовой подсистемы является самым нижним в API DirectWrite, что обеспечивает естественную поддержку взаимодействия, которой вполне достаточно для сохранения целостности данных. Как только приложение получает контроль над шрифтовым объектом DirectWrite, оно, в свою очередь, может предоставлять доступ к нему любому другому вышестоящему DirectWrite API, нуждающемуся в шрифтовом объекте DirectWrite. Обратная конвертация в шрифтовый объект GDI позволяет остальным основанным на GDI приложениям спокойно работать; в то же время для них сохраняется возможность воспользоваться всеми преимуществами, предоставляемыми новой моделью работы со шрифтами. Приведу реальный пример: растеризатор XPS-принтера в Windows 7 реализован как надстройка над DirectWrite; он использует возможности взаимодействия API DirectWrite для того, чтобы осуществить обратное преобразование в шрифтовый объект GDI, что, в свою очередь, является частью процесса преобразования напечатанного XPS-принтером документа в объект, пригодный для печати на другом, не-XPS принтере. Программа просмотра XPS-документов в Windows 7 также использует технологии DirectWrite наряду с GDI+-рендерингом для отображения на экране компьютера.
О нюансах работы API можно говорить очень долго. На семинаре в ходе конференции PDC 2008 Леонардо Бьянко (Leonardo Blanco) и Кам Вед Брат (Kam VedBrat) уже сообщали подробности о DirectWrite и Direct2D и о том, как создавать подобные приложения.
Многое изменилось с тех пор, как были написаны первые текстовые API для Windows GDI, такие как TextOut и ExtTextOut для Windows NT 3.1 (а также дополнения к ним). Развитие технологий визуализации текста – важнейшая часть работы над фундаментальными функциями Windows 7. Мы продолжим совершенствовать этот краеугольный камень GUI операционной системы для того, чтобы, вне зависимости от языка, системы письма или устройства визуализации, Windows могла всегда предложить разработчикам отличные инструменты программирования, а пользователям – высокое качество и удобство применения.
Ворашай Шаоверапразит (Worachai Chaoweeraprasit)