embedFonts dans TextArea et TextField

4 views
Skip to first unread message

ths otra

unread,
Jun 20, 2009, 5:38:37 AM6/20/09
to veg...@googlegroups.com
Bonjour !


Bon, le sujet n'est pas neuf mais je refais un sujet tout beau tout propre. Comme conseillait EKA dans son précédent message voici en pièce jointe  un FLA qui isole mon problème.

Je rappelle mon objectif:

Avoir un tableau XML ou ARRAY de type:

<root>
<item label="français"    font="Arial"               lang="fr"/>
<item label="anglais"     font="DejaVuSans"    lang="en"/>
<item label="Coréen"     font="Arial"               lang="co"/>
</root>

Et appliquer aux TextField et Area de mon application les polices qui correspondent à la langue choisie par l'utilisateur (besoin de passer un NomDeLaFont:String à une méthode changeFont()  ). Seulement, j'ai un problème d'embed de police.... rien n'apparaît comme vous pourrez le constater ! je dois vraiment passer à côté de quelque chose, j'ai pourtant pas mal fouillé !

Si vous aviez une idée ....

Bon samedi !
 
embedFont.zip

ekameleon

unread,
Jun 20, 2009, 6:10:25 AM6/20/09
to veg...@googlegroups.com
Hello :)

1 - Faut vraiment que tu te mettes à jour sur les bases AS3 :)

Quand je vois du code style :

var path_font:String=new String("fonts/fonts.swf")

Alors que tu peux simplement taper :

var path:String= "fonts/fonts.swf" ;

Pas besoin de faire des new String(), surtout en AS3... tu te compliques la vie pour rien ;)

2 - Petit fix sur ton code (cela corrige pas le problème du textinput mais c'est un peu plus propre à mon sens) :

import asgard.text.FontLoader;
import asgard.text.CoreTextField ;
import asgard.events.FontEvent ;

import lunas.display.text.*

var field:CoreTextField   = new CoreTextField()   ;

field.x          = 10 ;
field.y          = 10 ;
field.border     = true ;
field.multiline  = true ;
field.wordWrap   = true ;
field.type       = "input" ;
field.background = true ;
field.embedFonts = true ;

var input:SimpleTextInput = new SimpleTextInput() ;

input.embedFonts = true ;
input.x             = 200 ;
input.y          =  10 ;

addChild( field );
addChild( input ) ;

var addFont:Function = function( e:FontEvent ):void
{
    trace( e.type + " font:" + e.font + " :: " + e.font.fontName ) ;
}

var complete:Function = function( e:Event ):void
{
    trace("> fonts diponibles    :    " + Font.enumerateFonts() ) ;           

    ///////// field

    field.defaultTextFormat    = new TextFormat("DejaVu Sans", 11, 0x000000) ;
    field.text                = "field content"
   
    ///////// input
   
    input.setStyle( "defaultTextFormat" , new TextFormat ("DejaVu Sans", 11, 0x000000) ) ;
    input.text = "input content" ;
}

var request:URLRequest =    new URLRequest( "fonts/fonts.swf" );
var loader:FontLoader  =    new FontLoader() ;

loader.context       = new LoaderContext( false , ApplicationDomain.currentDomain ) ;
loader.autoRegister     = true ;

loader.addEventListener( FontEvent.ADD_FONT , addFont ) ;

loader.contentLoaderInfo.addEventListener( Event.COMPLETE , complete ) ;

loader.load( request ) ;

PS : fait bien attention à l'ordre d'appel des méthodes et attributs sur les TextField car selon si tu utilises defaultTextFormat ou embedFonts ou text dans un ordre ou un autre tu auras pas le même rendu ... et donc pas certain de voir ton texte ..

PS2 : l'évément FontEvent.ADD_FONT est pratique pour voir si les fonts sont bien chargées.. pas besoin que tu enregistres les fonts, le FontLoader le fait tout seul pour toi.

3 - Je regarderais en rentrant (car je dois partir) ce qui cloche avec le SimpleTextInput

4 - Pour ce qui est de ta "localization" de ton contenu (textes avec font) tu devrais regarder mon moteur de localization dans andromeda.i18n + cherche le tuto là dessus sur mon blog (je le mettrais à jour la semaine prochaine)

Je ne peux pas faire plus car je dois partir dans peu de temps et je reverrais ton soucis dans le week end :)

EKA+ :)

ths otra

unread,
Jun 20, 2009, 6:20:49 AM6/20/09
to veg...@googlegroups.com
Merci merci, c'est déjà chouette pour tes conseils. La localization est déjà en place et fonctionne à merveille ! grace à ton article ! Je continue, et post mes avancées.

eKameleon

unread,
Jun 20, 2009, 1:11:31 PM6/20/09
to VEGAS - ECMASCript & ActionScript OpenSource framework
Hello :)

Tu mettras à jour les sources de VEGAS et j'ai fait un petit
changement dans les composants de type "text input"...

Du coup tu peux directement taper :

input.defaultTextFormat = new TextFormat("myFont", ...

et faut pas oublier que sur les composants SimpleTextInput et
VisualTextInput il faut utiliser par contre le style du composant pour
changer les propriétés "color" et "disabledColor". J'ai mis à jour les
exemples dans les sources de LunAS :

http://code.google.com/p/lun-as/source/browse/trunk/AS3/trunk/examples/lunas/display/text/examples/ExampleSimpleTextInput.as

PS : tu peux retrouver ces exemples en "external" dans les sources de
VEGAS dans bin/tests/lunas/display...

Bon sinon du coup avec VEGAS mis à jour tu peux taper dans ton test :

//////////////////////////////////

import asgard.text.FontLoader;
import asgard.text.CoreTextField ;
import asgard.events.FontEvent ;

import lunas.display.text.*

var field:CoreTextField = new CoreTextField() ;

field.x = 10 ;
field.y = 10 ;
field.width = 250 ;
field.height = 150 ;
field.border = true ;
field.multiline = true ;
field.wordWrap = true ;
field.type = "input" ;
field.background = true ;
field.embedFonts = true ;

var input:SimpleTextInput = new SimpleTextInput() ;

input.setStyle( "color" , 0x000000 ) ;
input.setStyle( "disabledColor" , 0xCCCCCC ) ; // only if
input.enabled = false
input.embedFonts = true ;
input.w = 250 ;
input.h = 150 ;
input.multiline = true ;
input.wordWrap = true ;
input.x = 300 ;
input.y = 10 ;

addChild( field );
addChild( input ) ;

var addFont:Function = function( e:FontEvent ):void
{
trace( e.type + " font:" + e.font + " :: " + e.font.fontName ) ;
}


var complete:Function = function( e:Event ):void
{
trace("> fonts diponibles : " + Font.enumerateFonts() ) ;

var format:TextFormat = new TextFormat("DejaVu Sans", 11,
0x000000) ;

///////// field

field.defaultTextFormat = format ;
field.text = "field content" ;

///////// input

input.textField.defaultTextFormat = format ;
input.text = "input content" ;
}


var request:URLRequest = new URLRequest( "fonts/fonts.swf" );
var loader:FontLoader = new FontLoader() ;

loader.context = new LoaderContext( false ,
ApplicationDomain.currentDomain ) ;
loader.autoRegister = true ;

loader.addEventListener( FontEvent.ADD_FONT , addFont ) ;

loader.contentLoaderInfo.addEventListener( Event.COMPLETE ,
complete ) ;

loader.load( request ) ;

//////////////////////////////////

Voilà .. avec les petites modifs apportées je pense que ce sera bien
plus simple pour tout le monde :)

eKA+ :)

On 20 juin, 12:20, ths otra <ths.o...@gmail.com> wrote:
> Merci merci, c'est déjà chouette pour tes conseils. La localization est déjà
> en place et fonctionne à merveille ! grace à ton article ! Je continue, et
> post mes avancées.
>
Reply all
Reply to author
Forward
0 new messages