Apache Adobe Flex TutorialTutoriaux Adobe Flex & AIR en Français

2avr/101

Flex 4 – Layout Mirroring pour texte right-to-left (Hébreu, Arabe, …)

Avant de partir en vacances une petite dizaine de jours (pas de blog donc ^^), voici une petite news de la part de la team Adobe Flex SDK.

La nouvelle Product Manager sur Flex, Deepa Subramaniam vient d'annoncer sur son blog une des nouveautés qui va arriver avec les prochaines release de Flex 4 (et oui, ils continuent à travailler dessus ;) ).  Cette nouvelle fonctionnalité est nommée "Layout Mirroring".

Elle sert à faire un effet "miroir" (pas un effet réflexion web 2.0) vertical pour les applications utilisant une mise en page qui doit être adaptée au texte qui s'écrivent de droite à gauche comme l'Hébreu ou l'Arabe.

Mirroring layouts in Flex

Dans la pratique, cet effet miroir se traduit par une nouvelle propriété de style "layoutDirection" sur UIComponent. Celle-ci est par défaut à "ltr" (left-to-right, le standard Français / Anglais) mais vous pouvez la passer à "rtl". Notez que comme les autres propriétés de style, celle-ci se "cascade" dans votre application. C'est-à-dire qu'il suffit de mettre votre Application en layout "rtl" pour que cela se propage à tous les composants UIComponent de votre Application.

Toute cette manipulation se fait grâce au nouveau moteur de texte "Flash Text Engine" introduit dans Flex 4. Pour que toute votre application puisse avoir cet disposition miroir, il faut donc que tous vos composants utilisent ce FTE. Pour cela, il suffit de préciser dans les propriétés de compilation de votre projet Flex 4 "Use Flash Text Engine in Flex Components".

Spécifications sur le Layout Mirroring

Si vous voulez tester, il vous faut un des derniers build de Flex 4.1 disponible sur le site d'Adobe. En effet, vous aurez accès à cette fonctionnalité à partir de la release "4.1.0.15132".

Télécharger la release Flex SDK 4.1.0.15132

Télécharger les dernières versions de Flex 4 SDK

28déc/094

Flex Tips – Embed Font sur un TextField qui n'apparait pas

Un mini-post qui pourrait aider quelques Flexeurs sur un comportement assez étrange quand on utilise des polices embarquées (Embedded). Le code parait bon, pas d'erreur de compilation ni d'exécution mais pourtant le texte n'apparaît pas. J'ai bloqué une petite demi-heure sur ce bug stupide, cela vous arrivera peut-être ^^.

Voici le code que j'avais (réduit):

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                creationComplete="onCreationComplete();"
                xmlns:comp="comp.*"
                xmlns:local="*">
  <mx:Script>
    <![CDATA[
      import com.bg.BasicFontAssets;
      [Embed(systemFont='Arial', fontName='ArialR', mimeType='application/x-font', unicodeRange="U+0020-U+002F,  U+0030-U+0039, U+003A-U+0040, U+0041-U+005A,U+005B-U+0060, U+0061-U+007A, U+007B-U+007E,U+20AC-U+20AC,  U+00A3-U+00A3, U+00B2-U+00B2,U+00F9-U+00F9,  U+00E0-U+00F6")]
      public static var ArialR:Class;

      private function onCreationComplete():void {
        var format:TextFormat = new TextFormat;
        format.font = "ArialR";
        format.color = 0xFFFFFF;
        format.size = 20;

        var tf:TextField = new TextField;
        tf.embedFonts = true;
        tf.autoSize = TextFieldAutoSize.LEFT;
        tf.antiAliasType = AntiAliasType.ADVANCED;
        tf.text = "Text de test";
        tf.defaultTextFormat = format;
        uiComp.addChild(tf);
      }
    ]]>
  </mx:Script>
  <mx:UIComponent id="uiComp"
                  rotation="10"/>
</mx:Application>

Tout parait OK et pourtant rien de s'affiche. Le bug se situe en fait au moment de l'assignation du "defaultTextFormat". Celle-ci (qui indique que le font est Embed), est faite après l'assignation de la propriété "text". Pour résoudre ce bug, il suffit de:

  • Assigner "defaultTextFormat" avant "text"
  • ou faire l'assignation à la main: tf.setTextFormat(format).

A ce moment-là, votre champ texte va apparaître avec votre texte et vous pouvez passez au bug suivant :) .

24nov/096

Flex Tips – Font Embed avec seulement les caractères français (French Unicode)

Pour ne pas avoir de surprises quand on change de plate-formes d'exécution de Flash Player, il est tentant d'embarquer une police de caractère. Ainsi, vous aurez un rendu qui sera (quasiment) le même que vous soyez sur Linux, Mac ou Windows. Il y a plusieurs technique pour embarquer (embed) une font, cet article en fait le point:

Flex Embed Fonts – Polices Embarquées à la compilation

Cependant, de base, Flex va embarquer l'ensemble des caractères de la police. Cela peut être particulièrement encombrant pour la plupart des applications puisque le poids du SWF va gonfler pour pouvoir supporter des caractères que votre utilisateur ne va sûrement jamais utiliser (qui va taper un caractère norvégien avec un clavier français ?).

Pour améliorer cette situation, Flex vous donne la possibilité de restreindre les caractères embarqués en précisant des plages de caractères Unicode. Vous pouvez trouver la liste des caractères Unicode sur Wikipedia:

List of Unicode characters

Par exemple, pour intégrer une font avec seulement les chiffres, vous pouvez écrire dans la déclaration CSS:

unicode-range: U+0030-U+0039;

Ici, on va aller du caractère U+0030 (zero) au caractère U+0039 (neuf).

Pour ne spécifier qu'un caractère, il suffit de créer une plage avec les deux bornes égales.

Pour intégrer uniquement les caractères français, c'est-à-dire les chiffres, les lettres, les lettres en majuscule, la ponctuation et les lettres accentuées, il vous faudrait donc préciser toutes les plages.

Pour vous faciliter la tâche, j'ai déjà fait ce recoupement. Voici donc les codes Unicodes à préciser dans votre unicode-range. L'application sert à tester cette opération. Tapez des caractères, s'il n'apparaissent pas, cela signifie que le caractère n'est pas inclus. Pour l'anecdote, la taille de l'application est passée de 225Ko à 191Ko mais cela peut se révéler beaucoup plus intéressant sur d'autres polices.

Si vous pensez qu'il faille rajouter un caractère, laisser un commentaire, avec le code Unicode si possible pour que je puisse compléter cet exemple:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" viewSourceURL="srcview/index.html">
  <mx:Style>
   @font-face {
        src: url("C:\\Windows\\Fonts\\GOTHIC.ttf");
        fontFamily: gothicCentury;
        unicode-range: U+0020-U+002F, /* ponctuation */
        U+0030-U+0039, /* 0-9 */
        U+003A-U+0040,
        U+0041-U+005A,
        U+005B-U+0060,
        U+0061-U+007A, /* a-z */
        U+007B-U+007E,
        U+20AC-U+20AC, /* euro sign */
        U+00A3-U+00A3, /* pound sign */
        U+00B2-U+00B2, /* power of 2 */
        U+00F9-U+00F9, /* ù */
        U+00E0-U+00F6; /* accents */
    }
		global {
			fontFamily: gothicCentury;
		}
	</mx:Style>
  <mx:TextInput id="input" fontSize="20" width="350"/>
  <mx:Label text="{input.text}" fontSize="20"/>
</mx:Application>

Flex Source Code Download: Télécharger le code source complet de l'application

This movie requires Flash Player 11

Remplis sous: Exemple, Fonts 6 Commentaires
21avr/093

Flex Tips – Insérer des caractères accentués dans un Resource Bundle (bug d'encodage)

Beaucoup de tutoriaux sur flex-tutorial portent sur l'internationalisation d'applications Flex grâce aux resource bundles. Pour en savoir plus sur ces manipulations, consultez la partie Flex Localization de la liste des tutoriaux Adobe Flex. Admettons que vous vouliez internationaliser votre application, et que vous voulez passer une partie de votre application en Français. Pour cet exemple, je vais simplement reprendre le code de l'exemple sur le changement de locale dynamique.

Voici notre fichier de langue Français:

# locale/fr_FR/RegistrationForm.properties
registration_title=Inscription
submit_button=Valider le formulaire
personname=Nom
street_address=Rue
city=Ville
state=Etat
zip=Code Postal
thanks=Merci pour votre enregistrement
flag=Embed("images/flag_french.gif")

Jusque là, tout va bien, car aucune des chaînes ne contient d'accent, ni de caractères spéciaux. Modifions maintenant la ligne state=:

state=état

Voici à quoi va ressembler notre application:

bug encodage Flex

Voici le bug, à la place de notre "é", Flex nous affiche un carré. Si vous avez déjà assez d'expérience dans le dev web, vous avez peut-être déjà vu ce problème dans du HTML, du à un mauvais encodage des caractères. Et bien ici, c'est le même problème.

19juin/086

Flash Font – Convertir un fichier TTF en SWF (Convert TTF to SWF)

Pour un projet personnel, j'avais besoin d'intégrer une police à mon application Flex. Cette police n'était pas une police Windows standard (Arial, Verdana,...) mais une police téléchargée sur Internet.

Pour qu'elle soit utilisée dans toute mon appli Flex, j'ai utilisé la directive CSS font-face suivante:

@font-face {
	src: url("fonts/font.ttf");
	fontFamily:AvantGarde-Book;
}

global{
	fontFamily:AvantGarde-Book;
}

Cependant, à la compilation, Flex m'a lancé l'erreur suivante:

exception during transcoding: Unexpected exception encountered while reading font file 'font.ttf'
Remplis sous: CSS, Fonts Lire la suite