Rendering avanzato del testo

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

ActionScript 3.0 fornisce una vasta gamma di classi nel pacchetto flash.text per controllare le proprietà del testo visualizzato, tra cui i caratteri incorporati, le impostazioni dell'antialiasing, il controllo del canale alfa e altre impostazioni specifiche. La Guida di riferimento di ActionScript 3.0 fornisce descrizioni dettagliate di queste classi e proprietà, tra cui le classi CSMSettings, Font e TextRenderer.

Uso dei caratteri incorporati

Quando si specifica un carattere specifico per un TextField nell'applicazione, Flash Player o AIR cercano un carattere dispositivo (cioè un carattere che risiede sul computer dell'utente) con lo stesso nome. Se non lo trova sul sistema o se l'utente ha una versione leggermente diversa del carattere con tale nome, la visualizzazione del testo può apparire molto diversa da quella progettata. Per impostazione predefinita, il testo è visualizzato nel carattere Times Roman.

Per garantire che l'utente veda esattamente il carattere corretto, è possibile incorporarlo nel file SWF dell'applicazione. I caratteri incorporati offrono una serie di vantaggi:

  • Ai caratteri incorporati viene applicata la funzione di antialiasing, che rende i bordi più morbidi, specialmente nel testo di grandi dimensioni.

  • Il testo che utilizza i caratteri incorporati può essere ruotato.

  • Il testo che usa caratteri incorporati può essere reso trasparente o semitrasparente.

  • È possibile utilizzare lo stile CSS kerning (crenatura) con i caratteri incorporati.

La principale limitazione derivante dall'uso dei caratteri incorporati consiste nel fatto che aumentano le dimensioni del file o le dimensioni di scaricamento dell'applicazione.

Il metodo per incorporare un file di carattere nel file SWF dell'applicazione varia a seconda dell'ambiente di sviluppo.

Una volta incorporato un carattere, è possibile fare in modo che un TextField utilizzi il carattere incorporato corretto:

  • Impostare la proprietà embedFonts dell'oggetto TextField su true.

  • Creare un oggetto TextFormat, impostarne la proprietà fontFamily sul nome del carattere incorporato e applicare l'oggetto TextFormat all'oggetto TextField. Quando si specifica un carattere incorporato, la proprietà fontFamily deve contenere un solo nome; non può utilizzare un elenco delimitato da virgola di nomi di caratteri.

  • Se si utilizzano gli stili CSS per impostare i caratteri per gli oggetti TextField o i relativi componenti, impostare la proprietà CSS font-family sul nome del carattere incorporato. Se si desidera specificare un carattere incorporato, la proprietà font-family deve contenere un solo nome e non un elenco di nomi.

Incorporamento di un carattere in Flash

Flash Professional consente di incorporare quasi tutti i caratteri installati nel sistema, compresi i caratteri TrueType e Type 1 PostScript.

È possibile incorporare i caratteri in un'applicazione con diversi metodi. Di seguito ne sono descritti alcuni.

  • Impostare le proprietà carattere e stile di un oggetto TextField sullo stage e fare clic sulla casella di controllo Incorpora caratteri

  • Creare e fare riferimento a un simbolo di carattere

  • Creare e utilizzare una libreria condivisa in runtime contenente simboli di carattere incorporati

Per ulteriori dettagli su come incorporare i caratteri nelle applicazioni, consultate “Caratteri incorporati per i campi di testo dinamico o di input” nella guida Uso di Flash.

Incorporamento di un carattere in Flex

È possibile incorporare i caratteri in un'applicazione Flex con diversi metodi. Di seguito ne sono descritti alcuni.

  • Usare il tag per metadati [Embed] in uno script

  • Utilizzare la dichiarazione di stile@font-face

  • Stabilire una classe per il carattere e utilizzare il tag [Embed] per incorporalo.

È possibile incorporare direttamente in un'applicazione Flex soltanto caratteri TrueType. I caratteri con altri formati, ad esempio Type 1 Postscript, possono essere incorporati in un file SWF mediante Flash Professional e il file SWF può quindi essere utilizzato nell'applicazione Flex. Per ulteriori dettagli sull'uso nelle applicazioni Flex dei caratteri incorporati dai file SWF, vedete “Incorporamento dei caratteri dai file SWF” nel manuale Uso di Flex 4.

Controllo della precisione, dello spessore e dell'antialiasing

Per impostazione predefinita, Flash Player e AIR determinano le impostazioni per i controlli di visualizzazione del testo come la precisione, lo spessore e l'antialiasing quando il testo viene ridimensionato, cambia colore o viene visualizzato su vari sfondi. In alcuni casi, ad esempio in presenza di testo molto piccolo o molto grande o di testo su una gamma di sfondi univoci, è possibile controllare queste impostazioni. Potete ignorare le impostazioni di Flash Player o AIR mediante la classe flash.text.TextRenderer e le classi associate, come la classe CSMSettings. Queste classi forniscono un controllo preciso sulla qualità di rendering del testo incorporato. Per ulteriori informazioni sui caratteri incorporati, consultate Uso dei caratteri incorporati.

Nota: la proprietà flash.text.TextField.antiAliasType deve contenere il valore AntiAliasType.ADVANCED per consentire di impostare la precisione, lo spessore o la proprietà gridFitType o per utilizzare il metodo TextRenderer.setAdvancedAntiAliasingTable().

L'esempio seguente applica delle proprietà personalizzate di modulazione continua del tratto (CSM, Continuous Stroke Modulation) e di formattazione al testo visualizzato mediante un carattere incorporato di nome myFont. Quando l'utente fa clic sul testo visualizzato, in Flash Player o Adobe AIR vengono applicate le impostazioni personalizzate:

var format:TextFormat = new TextFormat(); 
format.color = 0x336699; 
format.size = 48; 
format.font = "myFont"; 
 
var myText:TextField = new TextField(); 
myText.embedFonts = true; 
myText.autoSize = TextFieldAutoSize.LEFT; 
myText.antiAliasType = AntiAliasType.ADVANCED; 
myText.defaultTextFormat = format; 
myText.selectable = false; 
myText.mouseEnabled = true; 
myText.text = "Hello World"; 
addChild(myText); 
myText.addEventListener(MouseEvent.CLICK, clickHandler); 
 
function clickHandler(event:Event):void 
{ 
    var myAntiAliasSettings = new CSMSettings(48, 0.8, -0.8); 
    var myAliasTable:Array = new Array(myAntiAliasSettings); 
    TextRenderer.setAdvancedAntiAliasingTable("myFont", FontStyle.ITALIC, TextColorType.DARK_COLOR, myAliasTable); 
}