1 /* 2 * JLib - Jacob's Library. 3 * Copyright (C) 2003, 2004 Juan Carlos Seijo P�rez 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Library General Public 7 * License as published by the Free Software Foundation; either 8 * version 2 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Library General Public License for more details. 14 * 15 * You should have received a copy of the GNU Library General Public 16 * License along with this library; if not, write to the Free 17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 * 19 * Juan Carlos Seijo P�rez 20 * jacob@mainreactor.net 21 */ 22 23 /** Fuente para mostrar texto en pantalla. 24 * @file JFont.h 25 * @author Juan Carlos Seijo P�rez 26 * @date 27/03/2004 27 * @version 0.0.1 - 27/03/2004 - Primera versi�n. 28 */ 29 30 #ifndef _JFONT_INCLUDED 31 #define _JFONT_INCLUDED 32 33 #include <JLib/Graphics/JImage.h> 34 #include <SDL_ttf.h> 35 #include <stdarg.h> 36 37 /** Alineaci�n del texto a renderizar. 38 */ 39 typedef enum JFontAlign 40 { 41 JFONTALIGN_LEFT = 0, /**< Alineado a la izquierda. */ 42 JFONTALIGN_RIGHT, /**< Alineado a la derecha. */ 43 JFONTALIGN_CENTER, /**< Centrado. */ 44 }; 45 46 /** Clase wrapper de la clase SDL_Font de la librer�a SDL_ttf. 47 * Permite mostrar texto en pantalla. 48 */ 49 class JFont 50 { 51 /** Tipo de renderizado a usar 52 */ 53 typedef enum JFontRenderType 54 { 55 JFONTRENDERTYPE_SOLID = 0, /**< S�lido con colorkey. */ 56 JFONTRENDERTYPE_SHADED, /**< Con antialiasing en fondo s�lido. */ 57 JFONTRENDERTYPE_BLENDED, /**< Con antializasing en fondo transparente. */ 58 }; 59 60 TTF_Font *font; 61 62 /** Funci�n de renderizado de las PrintfXXX. 63 * @param type Tipo de render a emplear. 64 * @param align Alineaci�n del texto. 65 * @param fg Color de fuente. 66 * @param bg Color de fondo (s�lo para JFONTRENDERTYPE_SHADED). 67 * @param str Texto a renderizar. 68 */ 69 JImage * Printf(JFontRenderType type, JFontAlign align, SDL_Color &fg, SDL_Color &bg, char *str); 70 71 public: 72 /** Crea una fuente vac�a. 73 */ JFont()74 JFont() : font(0) 75 {} 76 77 /** Recupera la versi�n de ejecuci�n de SDL_ttf. El objeto devuelto tiene 78 * tres campos: major, minor y patch, que identifican la versi�n. 79 * @return La versi�n de ejecuci�n SDL_ttf. 80 */ GetLinkedVersion()81 const SDL_version * GetLinkedVersion() {return TTF_Linked_Version();} 82 83 /** Inicializa el subsistema de fuentes. S�lo es necesaria la primera vez. 84 * @return <b>true</b> si todo va bien, <b>false</b> en caso contrario. 85 */ Init()86 static bool Init() 87 { 88 if (TTF_WasInit() == 0) 89 { 90 return (-1 != TTF_Init()); 91 } 92 93 return true; 94 } 95 96 /** Devuelve la cadena de error del �ltimo error. 97 * @return Cadena de error del �ltimo error. 98 */ GetError()99 static const char * GetError() 100 { 101 return TTF_GetError(); 102 } 103 104 /** Abre la fuente del fichero indicado. 105 * @param filename Nombre del fichero .ttf o .fon. 106 * @param size Tama�o en pixels (aproximado). 107 * @return <b>true</b> si se pudo abrir, <b>false</b> si no. 108 */ Open(const char * filename,s32 size)109 bool Open(const char * filename, s32 size) 110 { 111 Destroy(); 112 return (0 != (font = TTF_OpenFont(filename, size))); 113 } 114 115 /** Establece el estilo. 116 * @param style Nuevo estilo. Puede ser una combinaci�n de 117 * TTF_STYLE_NORMAL, TTF_STYLE_BOLD, TTF_STYLE_ITALIC o TTF_STYLE_UNDERLINE. 118 */ Style(s32 style)119 void Style(s32 style) 120 { 121 TTF_SetFontStyle(font, style); 122 } 123 124 /** Recupera el estilo. 125 * @return Estilo actual como combinaci�n de TTF_STYLE_NORMAL, 126 * TTF_STYLE_BOLD, TTF_STYLE_ITALIC y TTF_STYLE_UNDERLINE. 127 */ Style()128 s32 Style() 129 { 130 return TTF_GetFontStyle(font); 131 } 132 133 /** Devuelve la altura m�xima de la fuente. 134 * @return Altura m�xima de la fuente. 135 */ Height()136 s32 Height() 137 { 138 return TTF_FontHeight(font); 139 } 140 141 /** Devuelve el ascenso de la fuente. 142 * @return Ascenso de la fuente. 143 */ Ascent()144 s32 Ascent() 145 { 146 return TTF_FontAscent(font); 147 } 148 149 /** Devuelve el descenso de la fuente. 150 * @return Descenso de la fuente. 151 */ Descent()152 s32 Descent() 153 { 154 return TTF_FontDescent(font); 155 } 156 157 /** Devuelve la separaci�n recomendada de l�nea. 158 * @return Separaci�n recomendada de l�nea. 159 */ LineDistance()160 s32 LineDistance() 161 { 162 return TTF_FontLineSkip(font); 163 } 164 165 /** Renderiza el texto dado de forma r�pida. 166 * @param text Texto a renderizar. 167 * @param fg Color de fuente. 168 */ RenderTextSolid(const char * text,SDL_Color & fg)169 JImage * RenderTextSolid(const char * text, SDL_Color &fg) 170 { 171 SDL_Surface *s = TTF_RenderUTF8_Solid(font, text, fg); 172 return s != 0 ? new JImage(s) : 0; 173 } 174 175 /** Renderiza el texto UNICODE dado de forma r�pida. 176 * @param text Texto a renderizar. 177 * @param fg Color de fuente. 178 */ RenderUNICODESolid(const u16 * text,SDL_Color & fg)179 JImage * RenderUNICODESolid(const u16 *text, SDL_Color &fg) 180 { 181 SDL_Surface *s = TTF_RenderUNICODE_Solid(font, text, fg); 182 return s != 0 ? new JImage(s) : 0; 183 } 184 185 /** Renderiza el caracter dado de forma r�pida. 186 * @param c Caracter a renderizar. 187 * @param fg Color de fuente. 188 */ RenderGlyphSolid(char c,SDL_Color & fg)189 JImage * RenderGlyphSolid(char c, SDL_Color &fg) 190 { 191 SDL_Surface *s = TTF_RenderGlyph_Solid(font, c, fg); 192 return s != 0 ? new JImage(s) : 0; 193 } 194 195 /** Renderiza el texto dado suavizado sobre fondo s�lido. 196 * @param text Texto a renderizar. 197 * @param fg Color de fuente. 198 * @param bg Color de fondo. 199 */ RenderTextShaded(const char * text,SDL_Color & fg,SDL_Color & bg)200 JImage * RenderTextShaded(const char * text, SDL_Color &fg, SDL_Color &bg) 201 { 202 SDL_Surface *s = TTF_RenderUTF8_Shaded(font, text, fg, bg); 203 return s != 0 ? new JImage(s) : 0; 204 } 205 206 /** Renderiza el texto UNICODE dado suavizado sobre fondo s�lido. 207 * @param text Texto a renderizar. 208 * @param fg Color de fuente. 209 * @param bg Color de fondo. 210 */ RenderUNICODEShaded(const u16 * text,SDL_Color & fg,SDL_Color & bg)211 JImage * RenderUNICODEShaded(const u16 *text, SDL_Color &fg, SDL_Color &bg) 212 { 213 SDL_Surface *s = TTF_RenderUNICODE_Shaded(font, text, fg, bg); 214 return s != 0 ? new JImage(s) : 0; 215 } 216 217 /** Renderiza el caracter dado suavizado sobre fondo s�lido. 218 * @param c Caracter a renderizar. 219 * @param fg Color de fuente. 220 * @param bg Color de fondo. 221 */ RenderGlyphShaded(char c,SDL_Color & fg,SDL_Color & bg)222 JImage * RenderGlyphShaded(char c, SDL_Color &fg, SDL_Color &bg) 223 { 224 SDL_Surface *s = TTF_RenderGlyph_Shaded(font, c, fg, bg); 225 return s != 0 ? new JImage(s) : 0; 226 } 227 228 /** Renderiza el texto dado suavizado sobre fondo transparente. 229 * @param text Texto a renderizar. 230 * @param fg Color de fuente. 231 */ RenderTextBlended(const char * text,SDL_Color & fg)232 JImage * RenderTextBlended(const char * text, SDL_Color &fg) 233 { 234 SDL_Surface *s = TTF_RenderUTF8_Blended(font, text, fg); 235 return s != 0 ? new JImage(s) : 0; 236 } 237 238 /** Renderiza el texto dado suavizado sobre fondo transparente. 239 * @param text Texto a renderizar. 240 * @param fg Color de fuente. 241 */ RenderUNICODEBlended(const u16 * text,SDL_Color & fg)242 JImage * RenderUNICODEBlended(const u16 * text, SDL_Color &fg) 243 { 244 SDL_Surface *s = TTF_RenderUNICODE_Blended(font, text, fg); 245 return s != 0 ? new JImage(s) : 0; 246 } 247 248 /** Renderiza el caracter dado suavizado sobre fondo transparente. 249 * @param c Caracter a renderizar. 250 * @param fg Color de fuente. 251 */ RenderGlyphBlended(char c,SDL_Color & fg)252 JImage * RenderGlyphBlended(char c, SDL_Color &fg) 253 { 254 SDL_Surface *s = TTF_RenderGlyph_Blended(font, c, fg); 255 return s != 0 ? new JImage(s) : 0; 256 } 257 258 /** Destruye el objeto, liberando la memoria asociada. 259 */ Destroy()260 void Destroy() 261 { 262 if (font != 0) 263 { 264 TTF_CloseFont(font); 265 font = 0; 266 } 267 } 268 269 /** Renderiza el texto con formato dado de forma r�pida. 270 * @param align Alineaci�n del texto. 271 * @param fg Color de fuente. 272 * @param strFormat Texto a renderizar. 273 * @param ... Argumentos adicionales tipo printf(). 274 */ 275 JImage * PrintfSolid(JFontAlign align, SDL_Color &fg, const char *strFormat, ...); 276 277 /** Renderiza el texto con formato suavizado sobre fondo s�lido. 278 * @param align Alineaci�n del texto. 279 * @param fg Color de fuente. 280 * @param bg Color de fondo. 281 * @param strFormat Texto a renderizar. 282 * @param ... Argumentos adicionales tipo printf(). 283 */ 284 JImage * PrintfShaded(JFontAlign align, SDL_Color &fg, SDL_Color &bg, const char *strFormat, ...); 285 286 /** Renderiza el texto con formato suavizado sobre fondo transparente. 287 * @param align Alineaci�n del texto. 288 * @param fg Color de fuente. 289 * @param strFormat Texto a renderizar. 290 * @param ... Argumentos adicionales tipo printf(). 291 */ 292 JImage * PrintfBlended(JFontAlign align, SDL_Color &fg, const char *strFormat, ...); 293 294 /** Destruye el objeto, liberando la memoria asociada. 295 */ ~JFont()296 ~JFont() 297 { 298 Destroy(); 299 } 300 }; 301 302 #endif // _JFONT_INCLUDED 303