Mercurial > hg > dmlib
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 |