ft2-clone

Fasttracker 2 clone
Log | Files | Refs | README | LICENSE

commit 900219373bae44cbf473a35dd8f414ce67768d28
parent 9401e0cd75b52f21e0f7918e8cc3f1cf96ff15ff
Author: Olav Sørensen <olav.sorensen@live.no>
Date:   Wed, 13 Jan 2021 21:21:45 +0100

Moved some code

Diffstat:
Msrc/ft2_gui.c | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/ft2_gui.h | 2++
2 files changed, 66 insertions(+), 0 deletions(-)

diff --git a/src/ft2_gui.c b/src/ft2_gui.c @@ -288,6 +288,70 @@ uint16_t textWidth16(const char *textPtr) return textWidth; } +void textOutTiny(int32_t xPos, int32_t yPos, char *str, uint32_t color) // A..Z/a..z and 0..9 +{ + uint32_t *dstPtr = &video.frameBuffer[(yPos * SCREEN_W) + xPos]; + while (*str != '\0') + { + char chr = *str++; + + if (chr >= '0' && chr <= '9') + { + chr -= '0'; + } + else if (chr >= 'a' && chr <= 'z') + { + chr -= 'a'; + chr += 10; + } + else if (chr >= 'A' && chr <= 'Z') + { + chr -= 'A'; + chr += 10; + } + else + { + dstPtr += FONT3_CHAR_W; + continue; + } + + const uint8_t *srcPtr = &bmp.font3[chr * FONT3_CHAR_W]; + for (int32_t y = 0; y < FONT3_CHAR_H; y++) + { + for (int32_t x = 0; x < FONT3_CHAR_W; x++) + { +#ifdef __arm__ + if (srcPtr[x] != 0) + dstPtr[x] = color; +#else + // carefully written like this to generate conditional move instructions (font data is hard to predict) + uint32_t tmp = dstPtr[x]; + if (srcPtr[x] != 0) tmp = color; + dstPtr[x] = tmp; +#endif + } + + srcPtr += FONT3_WIDTH; + dstPtr += SCREEN_W; + } + + dstPtr -= (SCREEN_W * FONT3_CHAR_H) - FONT3_CHAR_W; + } +} + +void textOutTinyOutline(int32_t xPos, int32_t yPos, char *str) // A..Z/a..z and 0..9 +{ + const uint32_t bgColor = video.palette[PAL_BCKGRND]; + const uint32_t fgColor = video.palette[PAL_FORGRND]; + + textOutTiny(xPos-1, yPos, str, bgColor); + textOutTiny(xPos, yPos-1, str, bgColor); + textOutTiny(xPos+1, yPos, str, bgColor); + textOutTiny(xPos, yPos+1, str, bgColor); + + textOutTiny(xPos, yPos, str, fgColor); +} + void charOut(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char chr) { assert(xPos < SCREEN_W && yPos < SCREEN_H); diff --git a/src/ft2_gui.h b/src/ft2_gui.h @@ -87,6 +87,8 @@ void blitFastClipX(uint16_t xPos, uint16_t yPos, const uint8_t *srcPtr, uint16_t void hexOut(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, uint32_t val, uint8_t numDigits); void hexOutBg(uint16_t xPos, uint16_t yPos, uint8_t fgPalette, uint8_t bgPalette, uint32_t val, uint8_t numDigits); void hexOutShadow(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, uint8_t shadowPaletteIndex, uint32_t val, uint8_t numDigits); +void textOutTiny(int32_t xPos, int32_t yPos, char *str, uint32_t color); // A..Z/a..z and 0..9 +void textOutTinyOutline(int32_t xPos, int32_t yPos, char *str); // A..Z/a..z and 0..9 void charOut(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, char chr); void charOutBg(uint16_t xPos, uint16_t yPos, uint8_t fgPalette, uint8_t bgPalette, char chr); void charOutShadow(uint16_t xPos, uint16_t yPos, uint8_t paletteIndex, uint8_t shadowPaletteIndex, char chr);