3 Texto
La librería SDL 2 no dispone de funciones para mostrar texto en la ventana, por lo tanto tendremos que acudir a la librería SDL_ttf.
Al contrario de lo que sucede con SDL_image, con SDL_ttf será necesario inicializar la librería antes de usarla, y liberarla al terminar, usando las funciones TTF_Init y TTF_Quit.
La librería SDL_ttf, como su nombre indica, utiliza fuentes TrueType, que son escalables, aunque también puede usar fuentes no escalables (las que tienen extensión .fon), por lo que será necesario que nuestro programa pueda acceder a los ficheros que contienen esas fuentes.
Abrir una fuente
Windows almacena las fuentes en una carpeta llamada "fonts" en el directorio del sistema, pero si queremos asegurarnos de que nuestros programas SDL tienen acceso a las fuentes que utiliza, no es mala idea copiarlas a la misma carpeta que la aplicación.
Lo primero que tenemos que hacer es abrir una fuente para nuestro texto. Esto se consigue con la función TTF_OpenFont, a la que pasaremos dos parámetros: el fichero de la fuente y el tamaño. Esta función nos devolverá un puntero a una estructura opaca TTF_Font, que usaremos como manipulador para referirnos a ella en las funciones que la usen.
Las fuentes creadas utilizan recursos del sistema, por lo que deberemos asegurarnos de liberarlas, o cerrarlas, cuando ya no las necesitemos, y antes de cerrar la librería, usando la función TTF_CloseFont.
Crear un texto
Las imágenes que contienen el texto se almacenan en una estructura SDL_Surface, por lo que primero deberemos convertirlas a texturas para después copiarlas al contexto de renderizado.
Disponemos de un montón de funciones para crear texto, que podemos clasificar en cinco grupos: Glypth32, Glyph, Text, UNICODE, y UTF8.
Cada grupo tiene cuatro variantes: Blended, LCD, Shaded y Solid, o sea, mezclado, LCD, sombreado y sólido.
Los grupos Text, UNICODE, y UTF8 disponen además de una variante para estas cuatro, Wrapped, o sea, envuelto.
Esto nos da un total de treinta y dos funciones.
Grupos
- Grupo Glyph32
- Toman como parámetro un único carácter de 32 bits.
- Grupo Glyph
- Toman como parámetro un único carácter de 16 bits. A partir de la versión 2.0.18 de SDL_ttf no tiene sentido usar este grupo de funciones, y es preferible usar Glyph32.
- Grupo Text
- Toman como parámetro una cadena de texto C, un char*, en codificación Latin1. Esta es la codificación normal por defecto en Windows, al menos en español e inglés.
- Grupo UNICODE
- Toman como parámetro una cadena de caracteres Uint16*, en codificación UCS-2.
- Grupo UTF8
- Toman como parámetro una cadena de caracteres de 8 bits, en codificación UTF8. Por compatibilidad, tal vez sea la mejor opción, siempre que escribamos nuestro código con codificación UTF8.
Variantes
- Variante Blended
- Crea superficies ARGB, es decir, de 32 bits, incluyendo el canal alfa.
- Variante LCD
- Crea superficies ARGB, es decir, de 32 bits, incluyendo el canal alfa, pero en calidad subpixel.
- Variante Solid
- Crea superficies de ocho bits, con paleta, lo que es más rápido.
- Variante Shaded
- Crea superficies de ocho bits, con paleta, igual que Solid, pero admite un parámetro extra para el color de fondo.
Variante Wrapped
Permite dividir el texto en varias líneas. Requiere un parámetro extra para indicar la longitud máxima de cada línea.
Funciones
Estas son todas las funciones disponibles para generar superficies a partir de texto:
A estas funciones hay que añadir las tres macros incluidas por retrocompatibilidad: TTF_RenderText, TTF_RenderUNICODE y TTF_RenderUTF8. Que son alias para las funciones TTF_RenderText_Shaded, TTF_RenderUNICODE_Shaded y TTF_RenderUTF8_Shaded, respectivamente.
Modificadores
Una vez abierta una fuente tenemos varias opciones para modificarla.
Podemos cambiar la dirección del texto, mediante la función TTF_SetFontDirection.
Podemos modificar el estilo, con la función TTF_SetFontStyle.
También podemos modificar el tamaño, con TTF_SetFontSize.
Para modificar el contorno podemos usar la función TTF_SetFontOutline.
Podemos establecer diferentes opciones de fuentes huecas mediante TTF_SetFontHinting, combinando con TTF_SetFontOutline.
Obtener el tamaño de un texto
Es posible obtener el tamaño de una cadena antes de renderizarla. Para ello disponemos de tres funciones: TTF_SizeText, TTF_SizeUNICODE y TTF_SizeUTF8.
Mostrar el texto
Las funciones de renderizado de texto crean una superficie, pero no podemos mostrar superficies directamente en la ventana, antes tendremos que convertirlas en texturas.
Para convertir una superficie en una textura usaremos la función SDL_CreateTextureFromSurface.
Y para calcular las dimensiones de una textura usaremos la función SDL_QueryTexture.
SDL_Rect rTexto; ... superficie = TTF_RenderUTF8_Blended(fuente, "Hola, SDL 2.", blanco); texture = SDL_CreateTextureFromSurface(renderer, superficie); SDL_QueryTexture(texture, NULL, NULL, &rTexto.w, &rTexto.h); rTexto.x = rTexto.y = 30; SDL_RenderCopy(renderer, texture, NULL, &rTexto);
Ejemplo 2
Nombre | Fichero | Fecha | Tamaño | Contador | Descarga |
---|---|---|---|---|---|
Ejemplo 2 | sdl_002.zip | 2024-01-07 | 1947028 bytes | 4 |