0,0 → 1,120 |
/* |
SDL_bdf - renders BDF fonts |
Copyright (C) 2002-2003 Andre de Leiradella |
|
This library is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser General Public |
License as published by the Free Software Foundation; either |
version 2.1 of the License, or (at your option) any later version. |
|
This library is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
Lesser General Public License for more details. |
|
You should have received a copy of the GNU Lesser General Public |
License along with this library; if not, write to the Free Software |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
For information about SDL_bdf contact leiradella@bigfoot.com |
|
Version 1.0: first public release. |
Version 1.1: removed SDL dependecies, now SDL_bdf can be used with any graphics |
library. |
Version 1.2: fixed BDF_SizeH and BDF_SizeEntitiesH to return the correct sizes. |
*/ |
#ifndef __SDL_bdf_h__ |
#define __SDL_bdf_h__ |
|
#ifdef __cplusplus |
extern "C" { |
#endif |
|
/* Error codes. */ |
|
/* No error. */ |
#define BDF_OK 0 |
/* Not enough memory reading BDF font. */ |
#define BDF_MEMORYERROR 1 |
/* Error reading BDF font. */ |
#define BDF_READERROR 2 |
/* Can only handle BDF font varsions up to 2.2. */ |
#define BDF_WRONGVERSION 3 |
/* Can only handle horizontal BDF fonts. */ |
#define BDF_CANNOTHANDLEVERTICAL 4 |
/* Character found past end of BDF font. */ |
#define BDF_TOOMANYCHARACTERS 5 |
/* BDF font is missing characters. */ |
#define BDF_TOOFEWCHARACTERS 6 |
/* Error parsing BDF font. */ |
#define BDF_PARSEERROR 7 |
|
/* A BDF character. */ |
typedef struct { |
char *name; |
int code; |
int dwx0, dwy0; |
int dwx1, dwy1; |
int bbw, bbh, bbxoff0x, bbyoff0y, wbytes; |
unsigned char *bits; |
} BDF_Char; |
|
/* A BDF font. */ |
typedef struct { |
int metricsSet, numChars; |
BDF_Char *chars; |
BDF_Char *code[256]; |
} BDF_Font; |
|
/* |
Function to put a pixel on the surface, it receives a pointer to the surface |
(whatever format it may be), the x and y coordinates and the color. |
*/ |
typedef void (*BDF_PutPixel)(void *, int, int, unsigned int); |
|
/* |
Function to read a byte, it receives an user defined void pointer and must |
return a value in the range [0..255] or -1 to indicate EOF. |
*/ |
typedef int (*BDF_ReadByte)(void *); |
|
/* |
Opens a BDF font, it receives the function that will produce the stream of |
bytes, the user defined void pointer that will be passed to getbyte and a |
pointer to an int that will receive the error code. Returns the BDF font. |
*/ |
extern BDF_Font *BDF_OpenFont(BDF_ReadByte getbyte, void *info, int *error); |
/* |
Closes the font and frees all associated memory. |
*/ |
extern void BDF_CloseFont(BDF_Font *font); |
/* |
Determines the size of the horizontal text, returns the width and height of the |
smallest rectangle that can acomodate the rendered text and the start position |
in x0 and y0 on where the text must be rendered to exactly fit the rectangle. |
This is because the render functions take the y parameter as the baseline of |
the text to allow different fonts (e.g. normal and italic) to be mixed in the |
same line. It handles NULL pointers for pieces of information you don't want. |
*/ |
extern void BDF_SizeH(BDF_Font *font, char *text, int *x0, int *y0, int *width, int *height); |
/* |
Same as above but accepts entities in the form &...; |
*/ |
extern void BDF_SizeEntitiesH(BDF_Font *font, char *text, int *x0, int *y0, int *width, int *height); |
/* |
Draws the text at the given surface starting at position (x, y). It calls |
putpixel with the surface, coordinates and color to draw the pixel (doesn't |
clip). Returns the next x coordinate to continue to render more text. Only |
accepts characters in the range [0..255]. |
*/ |
extern int BDF_DrawH(void *surface, BDF_PutPixel putpixel, BDF_Font *font, char *text, int x, int y, unsigned int color); |
/* |
Same as above but accepts entities in the form &...; |
*/ |
extern int BDF_DrawEntitiesH(void *, BDF_PutPixel, BDF_Font *, char *, int, int, unsigned int); |
|
#ifdef __cplusplus |
}; |
#endif |
|
#endif |