Text rendering tweaks.

This commit is contained in:
Steve 2018-12-23 15:32:33 +00:00
parent fc0bcc998c
commit a7310e43b1
4 changed files with 37 additions and 25 deletions

View File

@ -88,16 +88,16 @@ static void draw(void)
float h; float h;
int th; int th;
h = (SCREEN_WIDTH / 800.0) * background[endingImageIndex]->rect.h; h = (app.config.winWidth / 800.0) * background[endingImageIndex]->rect.h;
blitRectScaled(atlasTexture->texture, 0, SCREEN_HEIGHT - h, SCREEN_WIDTH, h, &background[endingImageIndex]->rect, 0); blitRectScaled(atlasTexture->texture, 0, app.config.winHeight - h, app.config.winWidth, h, &background[endingImageIndex]->rect, 0);
if (endingTimer > 0 && endingTextIndex < NUM_ENDING_LINES) if (endingTimer > 0 && endingTextIndex < NUM_ENDING_LINES)
{ {
app.textWidth = (SCREEN_WIDTH / 2); app.textWidth = (app.config.winWidth / 2);
th = getWrappedTextHeight(endingText[endingTextIndex], 24) + 15; th = getWrappedTextHeight(endingText[endingTextIndex], 24) + 15;
drawRect(0, SCREEN_HEIGHT - th - 10, SCREEN_WIDTH, th + 10, 0, 0, 0, 128); drawRect(0, app.config.winHeight - th - 10, app.config.winWidth, th + 10, 0, 0, 0, 128);
drawText(SCREEN_WIDTH / 2, SCREEN_HEIGHT - th, 24, TA_CENTER, colors.white, endingText[endingTextIndex]); drawText(app.config.winWidth / 2, app.config.winHeight - th, 24, TA_CENTER, colors.white, endingText[endingTextIndex]);
app.textWidth = 0; app.textWidth = 0;
} }
} }

View File

@ -136,7 +136,7 @@ void initHub(void)
cursor.y = app.config.winHeight / 2; cursor.y = app.config.winHeight / 2;
SDL_WarpMouseInWindow(app.window, cursor.x, cursor.y); SDL_WarpMouseInWindow(app.window, cursor.x, cursor.y);
game.isComplete = 1; game.isComplete = 0;
for (t = game.missionStatusHead.next ; t != NULL ; t = t->next) for (t = game.missionStatusHead.next ; t != NULL ; t = t->next)
{ {
@ -506,7 +506,7 @@ static void drawMissionInfo(void)
drawText(UI_WIDTH / 2, y + 25, 32, TA_CENTER, colors.white, selectedMission->name); drawText(UI_WIDTH / 2, y + 25, 32, TA_CENTER, colors.white, selectedMission->name);
app.textWidth = (w - 150); app.textWidth = (w - 25);
drawText(x + 15, y + 100, 22, TA_LEFT, colors.white, selectedMission->description); drawText(x + 15, y + 100, 22, TA_LEFT, colors.white, selectedMission->description);
app.textWidth = 0; app.textWidth = 0;

View File

@ -17,6 +17,7 @@ extern "C" { /* This helps CPP projects that include this header */
* Returns 0 success or -1 on failure, the error message is then retrievable * Returns 0 success or -1 on failure, the error message is then retrievable
* via SDL_GetError(). * via SDL_GetError().
*/ */
#define SDL_SavePNG(surface, file) \
SDL_SavePNG_RW(surface, SDL_RWFromFile(file, "wb"), 1) SDL_SavePNG_RW(surface, SDL_RWFromFile(file, "wb"), 1)
/* /*
@ -29,19 +30,15 @@ extern "C" { /* This helps CPP projects that include this header */
* Returns 0 success or -1 on failure, the error message is then retrievable * Returns 0 success or -1 on failure, the error message is then retrievable
* via SDL_GetError(). * via SDL_GetError().
*/ */
extern int SDL_SavePNG_RW(SDL_Surface *surface, SDL_RWops *rw, int freedst);
/* /*
* Return new SDL_Surface with a format suitable for PNG output. * Return new SDL_Surface with a format suitable for PNG output.
*/ */
extern SDL_Surface *SDL_PNGFormatAlpha(SDL_Surface *src);
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */
#endif #endif
#endif #endif
#define SDL_SavePNG(surface, file) \
extern SDL_Surface *SDL_PNGFormatAlpha(SDL_Surface *src);
extern int SDL_SavePNG_RW(SDL_Surface *surface, SDL_RWops *rw, int freedst);
#define SDL_SavePNG(surface, file) \

View File

@ -22,15 +22,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
static void initFont(char *name, char *filename); static void initFont(char *name, char *filename);
static void drawWord(char *word, int *x, int *y, int startX); static void drawWord(char *word, int *x, int *y, int startX);
static void drawTextLines(int x, int y, int size, int align, SDL_Color color); static void drawTextLines(int x, int y, int size, int align);
static void drawTextLine(int x, int y, int size, int align, SDL_Color color, const char *line); static void drawTextLine(int x, int y, int size, int align, const char *line);
void calcTextDimensions(const char *text, int size, int *w, int *h); void calcTextDimensions(const char *text, int size, int *w, int *h);
void useFont(char *name); void useFont(char *name);
static void initChars(Font *f); static void initChars(Font *f);
static char *nextCharacter(const char *str, int *i); static char *nextCharacter(const char *str, int *i);
static Glyph *findGlyph(char *c); static Glyph *findGlyph(char *c);
static SDL_Color white = {255, 255, 255, 255};
static char drawTextBuffer[1024]; static char drawTextBuffer[1024];
static Font fontHead; static Font fontHead;
static Font *fontTail; static Font *fontTail;
@ -56,6 +55,7 @@ static void initFont(char *name, char *filename)
SDL_Rect dest; SDL_Rect dest;
Glyph *g; Glyph *g;
int i; int i;
SDL_Color white = {255, 255, 255, 255};
f = malloc(sizeof(Font)); f = malloc(sizeof(Font));
memset(f, 0, sizeof(Font)); memset(f, 0, sizeof(Font));
@ -156,9 +156,6 @@ void drawText(int x, int y, int size, int align, SDL_Color color, const char *fo
if (activeFont) if (activeFont)
{ {
SDL_SetTextureColorMod(activeFont->texture, color.r, color.g, color.b);
SDL_SetTextureAlphaMod(activeFont->texture, color.a);
memset(&drawTextBuffer, '\0', sizeof(drawTextBuffer)); memset(&drawTextBuffer, '\0', sizeof(drawTextBuffer));
va_start(args, format); va_start(args, format);
@ -167,16 +164,34 @@ void drawText(int x, int y, int size, int align, SDL_Color color, const char *fo
if (app.textWidth == 0) if (app.textWidth == 0)
{ {
drawTextLine(x, y, size, align, color, drawTextBuffer); SDL_SetTextureColorMod(activeFont->texture, 0, 0, 0);
SDL_SetTextureAlphaMod(activeFont->texture, 255);
drawTextLine(x + 2, y + 2, size, align, drawTextBuffer);
drawTextLine(x + 1, y + 1, size, align, drawTextBuffer);
SDL_SetTextureColorMod(activeFont->texture, color.r, color.g, color.b);
SDL_SetTextureAlphaMod(activeFont->texture, color.a);
drawTextLine(x, y, size, align, drawTextBuffer);
} }
else else
{ {
drawTextLines(x, y, size, align, color); SDL_SetTextureColorMod(activeFont->texture, 0, 0, 0);
SDL_SetTextureAlphaMod(activeFont->texture, 255);
drawTextLines(x + 2, y + 2, size, align);
drawTextLines(x + 1, y + 1, size, align);
SDL_SetTextureColorMod(activeFont->texture, color.r, color.g, color.b);
SDL_SetTextureAlphaMod(activeFont->texture, color.a);
drawTextLines(x, y, size, align);
} }
} }
} }
static void drawTextLines(int x, int y, int size, int align, SDL_Color color) static void drawTextLines(int x, int y, int size, int align)
{ {
char line[MAX_LINE_LENGTH], token[MAX_WORD_LENGTH]; char line[MAX_LINE_LENGTH], token[MAX_WORD_LENGTH];
int i, n, w, h, currentWidth, len; int i, n, w, h, currentWidth, len;
@ -198,7 +213,7 @@ static void drawTextLines(int x, int y, int size, int align, SDL_Color color)
if (currentWidth + w > app.textWidth) if (currentWidth + w > app.textWidth)
{ {
drawTextLine(x, y, size, align, color, line); drawTextLine(x, y, size, align, line);
currentWidth = 0; currentWidth = 0;
@ -217,10 +232,10 @@ static void drawTextLines(int x, int y, int size, int align, SDL_Color color)
} }
} }
drawTextLine(x, y, size, align, color, line); drawTextLine(x, y, size, align, line);
} }
static void drawTextLine(int x, int y, int size, int align, SDL_Color color, const char *line) static void drawTextLine(int x, int y, int size, int align, const char *line)
{ {
int i, startX, n, w, h; int i, startX, n, w, h;
char word[MAX_WORD_LENGTH]; char word[MAX_WORD_LENGTH];