Text sdl

Description

Ceci vous permet d'afficher du text dans une fenètre SDL.
La font est hardcoder en partie (carractère les plus courant), vous pouvez en rajoutez (et me les passer :p).

On peut choisir la taille, la couleur du text et du font (font qui peut être transpartant).

ça me rend bien des services, et c'est même pas lent.

Source / Exemple :


void	SDLText(SDL_Surface *pScreen, char *pText, rect rZone, float fSize, color cTop, color cBack)
{
	int		c, l, h, lm, hm, lp, hp;
	rect	Zone;

	SDLTextInit();

	lp = (int)(TEXT_WIDTH * fSize);
	hp = (int)(TEXT_HEIGHT * fSize);
	lm = (int)(rZone.l / lp);
	hm = (int)(rZone.h / hp);
	l = -1;
	h = 0;
	Zone.x = rZone.x;
	Zone.y = rZone.y;
	Zone.l = rZone.l;
	Zone.h = rZone.h;

	for(c = 0; pText[c]; c++)
	{
		if(((l + 1) <= lm) && (pText[c] != '\n'))
		{
			l++;
		}
		else
		{
			if(pText[c] == '\n')
				c++;

			if((h + 1) <= hm)
			{
				l = 0;
				h++;
			}
			else
				return;
		}

		Zone.x = rZone.x + l * lp;
		Zone.y = rZone.y + h * hp;
		SDLTextCarac(pScreen, pText[c], Zone.x, Zone.y, fSize, cTop, cBack);
	}
}

void	SDLTextCarac(SDL_Surface *pSpcreen, char cCar, int x, int y, float fSize, color cTop, color cBack)
{
	int  	px, py;

	for(py = 0; py < (TEXT_HEIGHT * fSize); py++)
	{
		for(px = 0; px < (TEXT_WIDTH * fSize); px++)
		{
			if(TableCar[cCar][(int)(py / fSize)][(int)(px / fSize)] == 49)
   			{
				SDLTextPoint(pSpcreen, x + px, y + py, cTop);
			}
			else
			{
				if((cBack.r != -1) && (cBack.g != -1) && (cBack.b != -1))
					SDLTextPoint(pSpcreen, x + px, y + py, cBack);
			}
		}
	}
}

void	SDLTextPoint(SDL_Surface *pScreen, int x, int y, color cColor)
{
	Uint16	*pPxl;

	if((x > 0) && (x < pScreen->w) && (y > 0) && (y < pScreen->h))
	{
		pPxl = (Uint16*)pScreen->pixels + ((pScreen->pitch / 2 * y) + x);

  • pPxl = SDL_MapRGB(pScreen->format, (Uint8)cColor.r, (Uint8)cColor.g, (Uint8)cColor.b);
} } ...

Conclusion :


Il y a des exemples, c'est tres facile a utilisé et modifié une font (des 0 et 1)
Les carractères sont en binaire, dans des grille 6*9 (du 5*7 étendu).

/* 'A' */
strcpy(TableCar[65][0], "001000");
strcpy(TableCar[65][1], "010100");
strcpy(TableCar[65][2], "100010");
strcpy(TableCar[65][3], "100010");
strcpy(TableCar[65][4], "111110");
strcpy(TableCar[65][5], "100010");
strcpy(TableCar[65][6], "100010");
strcpy(TableCar[65][7], "000000");
strcpy(TableCar[65][8], "000000");

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.