1
0
mirror of git://projects.qi-hardware.com/gmenu2x.git synced 2024-11-17 20:14:03 +02:00

Improve performance in Font::writeLine.

Asking FreeType for metrics before asking it for a render, when rendering
would compute the metrics anyway, is wasteful. Now the width of text, for
horizontal alignment purposes, is simply the width of the render.
This commit is contained in:
Nebuleon Fumika 2014-07-13 21:24:20 +00:00 committed by Maarten ter Huurne
parent 099bd24556
commit 08fffbff6a

View File

@ -87,17 +87,6 @@ void Font::writeLine(Surface *surface, const char *text,
return; return;
} }
switch (halign) {
case HAlignLeft:
break;
case HAlignCenter:
x -= getTextWidth(text) / 2;
break;
case HAlignRight:
x -= getTextWidth(text);
break;
}
switch (valign) { switch (valign) {
case VAlignTop: case VAlignTop:
break; break;
@ -111,6 +100,21 @@ void Font::writeLine(Surface *surface, const char *text,
SDL_Color color = { 0, 0, 0, 0 }; SDL_Color color = { 0, 0, 0, 0 };
SDL_Surface *s = TTF_RenderUTF8_Blended(font, text, color); SDL_Surface *s = TTF_RenderUTF8_Blended(font, text, color);
if (!s) {
ERROR("Font rendering failed for text \"%s\"\n", text);
return;
}
switch (halign) {
case HAlignLeft:
break;
case HAlignCenter:
x -= s->w / 2;
break;
case HAlignRight:
x -= s->w;
break;
}
SDL_Rect rect = { (Sint16) x, (Sint16) (y - 1), 0, 0 }; SDL_Rect rect = { (Sint16) x, (Sint16) (y - 1), 0, 0 };
SDL_BlitSurface(s, NULL, surface->raw, &rect); SDL_BlitSurface(s, NULL, surface->raw, &rect);
@ -137,6 +141,10 @@ void Font::writeLine(Surface *surface, const char *text,
color.b = 0xff; color.b = 0xff;
s = TTF_RenderUTF8_Blended(font, text, color); s = TTF_RenderUTF8_Blended(font, text, color);
if (!s) {
ERROR("Font rendering failed for text \"%s\"\n", text);
return;
}
SDL_BlitSurface(s, NULL, surface->raw, &rect); SDL_BlitSurface(s, NULL, surface->raw, &rect);
SDL_FreeSurface(s); SDL_FreeSurface(s);
} }