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

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); 
        } 
    } 
}