Noticias Weblogs Foros Wiki Código

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

Joan Llenas at garnet.io :: Thoughts on software development

Runtime fonts

Febrero 16th, 2011 - [Enlace local]

Cargar fuentes bajo demanda es algo que puede ayudar mucho a disminuir el tamaño de un archivo swf, sobretodo cuando estamos creando una aplicación que requiere de varios tipos de fuentes y con rangos Unicode ámplios.
Es el caso por ejemplo de aplicaciones que requieren globalizarse (g11n) y a causa de ello se deben proporcionar tipografías de varios alfabetos.
La cosa se pone peor si además utilizamos más de una tipografía en la aplicación, cosa muy normal en realidad.
Flex nos proporciona una forma muy sencilla de crear archivos SWF con tipografías compiladas. Son lo que se llaman CSS Modules.

Los CSS Modules son archivos CSS a los que se les pasa el compilador. Algo tan sencillo como esto mxmlc estilos.css. O si no te gusta la línea de comandos, desde Flex builder simplemente haciendo click derecho sobre el archivo CSS verás que puedes marcar la opción Compile CSS to SWF.
Cuando compiles revisa la carpeta de salida (bin-debug) y verás que hay un archivo swf con el nombre del CSS que has marcado como compilable.

Una vez tenemos compilado el CSS solo nos queda realizar la carga e inyectarla en el motor de estilos de Flex. Para ello utilizaremos el método especialmente creado a este respecto: loadStyleDeclarations2() de la instancia del StyleManager que tenemos disponible desde cualquier control Flex.
Este método devuelve un IEventDispatcher que podemos utilizar para controlar el proceso de carga con los eventos: StyleEvent.COMPLETE, StyleEvent.ERROR y StyleEvent.PROGRESS.
Dejo un ejemplo sencillo que carga fuentes a través de la selección en un DropDownList.

RuntimeFonts.mxml

PLAIN TEXT
MXML:
  1. "1.0" encoding="utf-8"?>
  2. xmlns:fx="http://ns.adobe.com/mxml/2009"
  3.     xmlns:s="library://ns.adobe.com/flex/spark"
  4.     xmlns:mx="library://ns.adobe.com/flex/mx">
  5.     >
  6.         [CDATA[
  7.             import mx.events.StyleEvent;
  8.             protected function dropdownlist1_changeHandler():void
  9.             {
  10.                 fonts.enabled = false;
  11.                 var dispatcher:IEventDispatcher = styleManager.loadStyleDeclarations2( fonts.selectedItem.url );
  12.                 dispatcher.addEventListener(StyleEvent.COMPLETE, onComplete);
  13.             }
  14.             private function onComplete(event:StyleEvent):void
  15.             {
  16.                 sample.setStyle("fontFamily", fonts.selectedItem.label);
  17.                 fonts.enabled = true;
  18.             }
  19.  
  20.         ]]>
  21.     >
  22.     horizontalCenter="0"
  23.         verticalCenter="0" horizontalAlign="center">
  24.         id="sample" text="The quick brown fox jumps over the lazy dog" fontSize="30"/>
  25.         id="fonts" change="dropdownlist1_changeHandler()"
  26.             width="200"
  27.             selectedIndex="-1">
  28.             >
  29.                 label="Kingthings Stirrup"
  30.                     url="fonts/Kingthings_Stirrup.swf"/>
  31.                 label="Circline"
  32.                     url="fonts/Circljo.swf"/>
  33.             >
  34.         >
  35.     >
  36. >

Kingthings_Stirrup.css

PLAIN TEXT
CSS:
  1. /* http://www.abstractfonts.com/font/14632 */
  2. @font-face {
  3.     src: url("Kingthings_Stirrup.ttf");
  4.     embedAsCFF: true;
  5.     fontFamily: "Kingthings Stirrup";
  6.     fontStyle: normal;
  7.     fontWeight: normal;
  8. }

Descarga ejemplo

En el zip hay un proyecto Flex4 para Flash Builder.

Runtime fonts (0) - 61.43 kB
zip

» Leer más, comentarios, etc...

Información legal y técnica