Praca z czcionkami

Flash Player 10 i nowsze wersje, Adobe AIR 1.5 i nowsze wersje

Obiekt FontDescription używany jest w połączeniu z obiektem ElementFormat do określania czcionki i definiowania niektórych z jej cech. Do tych cech należy nazwa, grubość, ustawienie, sposób renderowania czcionki i miejsce jej przechowywania (czcionka urządzenia/wbudowana).

Uwaga: Mechanizm FTE nie obsługuje czcionek Type 1, ani czcionek bitmapowych np. Type 3, ATC, sfnt-wrapped CID czy Naked CID.

Definiowanie cech czcionki (obiekt FontDescription)

Właściwość fontName obiektu FontDescription może zawierać pojedynczą nazwę lub listę nazw rozdzielonych przecinkami. Na przykład w przypadku listy "Arial, Helvetica, _sans", mechanizm tekstowy będzie najpierw szukać czcionki Arial, następnie Helvetica, a gdy nie znajdzie żadnej z nich — czcionki _sans. Zestaw nazw czcionek obejmuje trzy ogólne nazwy czcionek urządzenia: "_sans", "_serif" i "_typewriter". Są one odwzorowywane na konkretne czcionki urządzenia w systemie, na którym plik jest odtwarzany. Dobrą praktyką jest podawanie nazw domyślnych, takich jak powyższe, we wszystkich opisach czcionek odwołujących się do czcionek urządzenia. Jeśli wartość właściwości fontName nie jest określona, domyślnie przyjmowana jest czcionka "_serif".

Właściwość fontPosture może mieć wartość domyślną ( FontPosture.NORMAL ) albo wartość określającą kursywę ( FontPosture.ITALIC ). Właściwości fontWeight można przypisać domyślną wartość ( FontWeight.NORMAL ) lub wartość określającą pogrubienie ( FontWeight.BOLD ).

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

Czcionki osadzone a czcionki urządzenia

Właściwość fontLookup obiektu FontDescription określa, czy w celu wyświetlenia tekstu będzie poszukiwać czcionki urządzenia, czy czcionki osadzonej. Jeśli wybrana jest czcionka urządzenia ( FontLookup.DEVICE ), środowisko wykonawcze poszukuje czcionki w systemie, w którym odtwarzany jest plik. Wybranie czcionki osadzonej ( FontLookup.EMBEDDED_CFF ) powoduje, że środowisko wykonawcze będzie poszukiwało czcionki osadzonej o określonej nazwie w pliku SWF. W przypadku tego ustawienia uwzględniane są tylko czcionki CFF (Compact Font Format). Jeśli określona czcionka nie zostanie znaleziona, używana będzie „rezerwowa” czcionka systemowa.

Użycie czcionek urządzenia powoduje, że plik SWF ma mniejszą objętość. Czcionki osadzone zapewniają większą spójność wyglądu aplikacji na różnych platformach.

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

Tryb renderowania i przyciąganie

Renderowanie czcionek CFF (Compact Font Format) jest dostępne począwszy od wersji 10 programu Flash Player 10 i wersji 1.5 środowiska Adobe AIR. Ten sposób renderowania czcionek zapewnia większą czytelność tekstu i wyższą jakość wyświetlania tekstu o małych rozmiarach. Ustawienie to ma zastosowanie wyłącznie do czcionek osadzonych. W obiekcie FontDescription wartość RenderingMode.CFF jest domyślnie przypisywana właściwości renderingMode . Można przypisać tej właściwości wartość RenderingMode.NORMAL , aby uzyskać typ renderowania stosowany w programie Flash Player 7 i wcześniejszych wersjach.

Gdy wybrane jest renderowanie CFF, druga właściwość, cffHinting , steruje dopasowaniem poziomych elementów czcionki do siatki subpikselowej. Wartość domyślna, CFFHinting.HORIZONTAL_STEM , oznacza stosowanie przyciągania CFF. Nadanie tej właściwości wartości CFFHinting.NONE powoduje wyłączenie przyciągania, co ma uzasadnienie w przypadku animacji i dużych czcionek.

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

Blokowanie i klonowanie obiektu FontDescription

Gdy obiekt FontDescription zostanie przypisany do obiektu ElementFormat , jego właściwości locked automatycznie przypisywana jest wartość true . Próba zmodyfikowania zablokowanego w ten sposób obiektu FontDescription powoduje wygenerowanie błędu IllegalOperationError . Dobrą praktyką jest pełne zdefiniowanie takiego obiektu przed przypisaniem go do instancji klasy ElementFormat .

Chcąc zmodyfikować istniejącą instancję klasy FontDescription , należy najpierw sprawdzić jej właściwość locked . Jeśli ma wartość true , należy za pomocą metody clone() utworzyć niezablokowaną kopię obiektu. Właściwości tego niezablokowanego obiektu można zmieniać, a obiekt można przypisywać do instancji obiektu ElementFormat . Wszelkie nowe wiersze utworzone na podstawie tego obiektu TextElement będą sformatowane zgodnie z nowymi właściwościami. Poprzednie wiersze utworzone na podstawie tego samego obiektu pozostaną niezmienione.

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