Работа со шрифтами

Flash Player 10 и более поздних версий, Adobe AIR 1.5 и более поздних версий

Объект FontDescription используется вместе с объектом ElementFormat для определения начертания шрифта и настройки его характеристик. В число характеристик входит имя шрифта, его толщина, наклон, визуализация и местоположение шрифта (в устройстве или в SWF-файле).

Примечание. FTE не поддерживает шрифты Type 1 и точечные шрифты, например, Type 3, ATC, sfnt-wrapped CID или Naked CID.

Определение характеристик шрифта (объект FontDescription)

Свойство fontName объекта FontDescription может содержать одно имя или список имен, разделенных запятыми. Например, в списке Arial, Helvetica, _sans механизм обработки текста сначала ищет Arial, затем Helvetica, а после этого _sans, если не удалось найти первые два шрифта. Набор имен шрифтов включает три имени общих шрифтов устройства: _sans, _serif и _typewriter. Они соотносятся с определенными шрифтами устройства в зависимости от системы воспроизведения. Полезно указывать имена по умолчанию, подобные этим, во всех описаниях шрифтов, использующих шрифты устройства. Если свойство fontName не определено, по умолчанию используется _serif.

Свойство fontPosture можно установить на значение по умолчанию ( FontPosture.NORMAL ) или на значение «курсивное начертание» ( FontPosture.ITALIC ). Свойство fontWeight можно Установить на значение по умолчанию ( FontWeight.NORMAL ) или на значение «полужирное начертание» ( FontWeight.BOLD ).

var fd1:FontDescription = new FontDescription(); 
fd1.fontName = "Arial, Helvetica, _sans"; 
fd1.fontPosture = FontPosture.NORMAL; 
fd1.fontWeight = FontWeight.BOLD;

Встроенные шрифты и шрифты устройства

Свойство fontLookup объекта FontDescription указывает, какой шрифт должен искать механизм обработки текста для визуализации текста: шрифт устройства или встроенный шрифт. Если указан шрифт устройства ( FontLookup.DEVICE ), среда выполнения ищет шрифт в системе воспроизведения. Если указан встроенный шрифт ( FontLookup.EMBEDDED_CFF ), среда выполнения ищет встроенный шрифт с указанным именем в SWF-файле. Эта настройка поддерживает только компактные встроенные шрифты CFF (Compact Font Format). Если указанный шрифт не найден, используется шрифт устройства по умолчанию.

Использование шрифтов устройства позволяет уменьшить размер SWF-файла. Встроенные шрифты обеспечивают правильное отображение на разных платформах.

var fd1:FontDescription = new FontDescription(); 
fd1.fontLookup = FontLookup.EMBEDDED_CFF; 
fd1.fontName = "Garamond, _serif";

Режим визуализации и доводка до пикселов

Во Flash Player 10 и Adobe AIR 1.5 добавлена визуализация CFF (компактные встроенные шрифты). При использовании данного типа визуализации экранные шрифты становятся более разборчивыми, а отображение текста, написанного мелким шрифтом, выполняется более качественно. Эта настройка применяется только к встроенным шрифтам. В объекте FontDescription это значение ( RenderingMode.CFF ) используется по умолчанию для свойства renderingMode . Можно установить свойство на RenderingMode.NORMAL для выбора типа визуализации, применяемого во Flash Player 7 и более ранних версиях.

Если выбрана CFF-визуализация, второе свойство, cffHinting , управляет привязкой горизонтальных линий шрифта к подпикселной сетке. По умолчанию используется значение CFFHinting.HORIZONTAL_STEM , которое включает привязку к пикселам. Если задать этому свойству значение CFFHinting.NONE , доводка отключается. Эта настройка подходит для анимации и крупного шрифта.

var fd1:FontDescription = new FontDescription(); 
fd1.renderingMode = RenderingMode.CFF; 
fd1.cffHinting = CFFHinting.HORIZONTAL_STEM;

Блокировка и клонирование объектов FontDescription

Если объект FontDescription назначается объекту ElementFormat , его свойство locked автоматически получает значение true . При попытке изменить заблокированный объект FontDescription выводится ошибка IllegalOperationError . Лучше всего дать полное определение такому объекту, прежде чем назначать его экземпляру ElementFormat .

Если требуется изменить существующий экземпляр FontDescription , сначала нужно проверить значение свойства locked . Если оно имеет значение true , используйте метод clone() для создания незаблокированной копии объекта. Свойства такого объекта можно изменить, а затем назначить его экземпляру ElementFormat . Новые строки, созданные из этого объекта TextElement , будут иметь новое форматирование. Предыдущие строки, созданные из этого объекта ранее, останутся без изменений.

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
 
    public class FontDescriptionCloneExample extends Sprite 
    { 
        private var tb:TextBlock = new TextBlock(); 
        private var te:TextElement; 
        private var ef1:ElementFormat; 
        private var ef2:ElementFormat; 
         private var fd1:FontDescription = new FontDescription(); 
        private var fd2:FontDescription; 
 
        public function FontDescriptionCloneExample() 
        { 
            fd1.fontName = "Garamond"; 
            ef1 = new ElementFormat(fd); 
            var str:String = "This is flash text"; 
            te = new TextElement(str, ef); 
            tb.content = te; 
            var tx1:TextLine = tb.createTextLine(null,600); 
            addChild(tx1); 
             
            fd2 = (fd1.locked) ? fd1.clone() : fd1; 
            fd2.fontName = "Arial"; 
            ef2 = (ef1.locked) ? ef1.clone() : ef1; 
            ef2.fontDescription = fd2; 
            tb.content.elementFormat = ef2; 
            var tx2:TextLine = tb.createTextLine(null,600); 
            addChild(tx2); 
        } 
    } 
}