comparison dmtext.c @ 63:3d9da937db69

More work on the text support.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 01 Oct 2012 10:42:56 +0300
parents f28cd66356f6
children
comparison
equal deleted inserted replaced
62:daeb5d4f6bad 63:3d9da937db69
6 */ 6 */
7 #include "dmtext.h" 7 #include "dmtext.h"
8 8
9 #ifdef DM_GFX_TTF_TEXT 9 #ifdef DM_GFX_TTF_TEXT
10 10
11 void dmDrawTTFTextConst(SDL_Surface *screen, TTF_Font *font, SDL_Color col, int x, int y, const char *fmt) 11 void dmDrawTTFTextConst(SDL_Surface *screen, TTF_Font *font, SDL_Color col, int xc, int yc, const char *fmt)
12 { 12 {
13 SDL_Surface *text = TTF_RenderText_Blended(font, fmt, col); 13 SDL_Surface *text = TTF_RenderText_Blended(font, fmt, col);
14 if (text) 14 if (text)
15 { 15 {
16 SDL_Rect rect; 16 SDL_Rect rect;
17 rect.x = x; 17 rect.x = xc;
18 rect.y = y; 18 rect.y = yc;
19 rect.w = text->w; 19 rect.w = text->w;
20 rect.h = text->h; 20 rect.h = text->h;
21 SDL_BlitSurface(text, NULL, screen, &rect); 21 SDL_BlitSurface(text, NULL, screen, &rect);
22 SDL_FreeSurface(text); 22 SDL_FreeSurface(text);
23 } 23 }
24 } 24 }
25 25
26 void dmDrawTTFTextVA(SDL_Surface *screen, TTF_Font *font, SDL_Color col, int x, int y, const char *fmt, va_list ap) 26 void dmDrawTTFTextVA(SDL_Surface *screen, TTF_Font *font, SDL_Color col, int xc, int yc, const char *fmt, va_list ap)
27 { 27 {
28 char *tmp = dm_strdup_vprintf(fmt, ap); 28 char *tmp = dm_strdup_vprintf(fmt, ap);
29 if (tmp != NULL) 29 if (tmp != NULL)
30 { 30 {
31 dmDrawTTFTextConst(screen, font, col, x, y, tmp); 31 dmDrawTTFTextConst(screen, font, col, xc, yc, tmp);
32 dmFree(tmp); 32 dmFree(tmp);
33 } 33 }
34 } 34 }
35 35
36 void dmDrawTTFText(SDL_Surface *screen, TTF_Font *font, SDL_Color col, int x, int y, const char *fmt, ...) 36 void dmDrawTTFText(SDL_Surface *screen, TTF_Font *font, SDL_Color col, int xc, int yc, const char *fmt, ...)
37 { 37 {
38 va_list ap; 38 va_list ap;
39 39
40 va_start(ap, fmt); 40 va_start(ap, fmt);
41 dmDrawTTFTextVA(screen, font, col, x, y, fmt, ap); 41 dmDrawTTFTextVA(screen, font, col, xc, yc, fmt, ap);
42 va_end(ap); 42 va_end(ap);
43 } 43 }
44 44
45 #endif 45 #endif
46 46
47 #ifdef DM_GFX_BM_TEXT 47 #ifdef DM_GFX_BM_TEXT
48 48
49 void dmDrawBMTextConst(SDL_Surface *screen, DMBitmapFont *font, int mode, int xc, int yc, const char *fmt) 49 void dmDrawBMTextConst(SDL_Surface *screen, DMBitmapFont *font, int mode, int xc, int yc, const char *fmt)
50 { 50 {
51 const char *ptr = fmt; 51 const char *ptr = fmt;
52 DMScaledBlitFunc *blit = dmGetScaledBlitFunc(screen, font->glyphs[0], mode); 52 DMScaledBlitFunc blit = dmGetScaledBlitFunc(screen->format, font->glyphs[0]->format, mode);
53 while (*ptr) 53 while (*ptr)
54 { 54 {
55 char ch = *ptr++; 55 char ch = *ptr++;
56 56
57 if (isprint(ch) && ch != ' ' && ch != '\t') 57 if (isprint(ch) && ch != ' ' && ch != '\t')
58 { 58 {
59 SDL_Surface *glyph = font->glyphs[(unsigned char) ch]; 59 SDL_Surface *glyph = font->glyphs[(unsigned char) ch];
60 blit(glyph, xc, yc, glyph->width, glyph->height, screen); 60 blit(glyph, xc, yc, glyph->w, glyph->h, screen);
61 xc += glyph->width; 61 xc += glyph->w;
62 } 62 }
63 else 63 else
64 xc += font->width; 64 xc += font->width;
65 } 65 }
66 } 66 }
69 void dmDrawBMTextVA(SDL_Surface *screen, DMBitmapFont *font, int mode, int xc, int yc, const char *fmt, va_list ap) 69 void dmDrawBMTextVA(SDL_Surface *screen, DMBitmapFont *font, int mode, int xc, int yc, const char *fmt, va_list ap)
70 { 70 {
71 char *tmp = dm_strdup_vprintf(fmt, ap); 71 char *tmp = dm_strdup_vprintf(fmt, ap);
72 if (tmp != NULL) 72 if (tmp != NULL)
73 { 73 {
74 dmDrawBMTextConst(screen, font, col, x, y, tmp); 74 dmDrawBMTextConst(screen, font, mode, xc, yc, tmp);
75 dmFree(tmp); 75 dmFree(tmp);
76 } 76 }
77 } 77 }
78 78
79 79
80 void dmDrawBMText(SDL_Surface *screen, DMBitmapFont *font, int mode, int xc, int yc, const char *fmt, ...) 80 void dmDrawBMText(SDL_Surface *screen, DMBitmapFont *font, int mode, int xc, int yc, const char *fmt, ...)
81 { 81 {
82 va_list ap; 82 va_list ap;
83 83
84 va_start(ap, fmt); 84 va_start(ap, fmt);
85 dmDrawBMTextVA(screen, font, col, x, y, fmt, ap); 85 dmDrawBMTextVA(screen, font, mode, xc, yc, fmt, ap);
86 va_end(ap); 86 va_end(ap);
87 } 87 }
88 88
89 #endif 89 #endif