text: add left/right arrow support and new text functions (#456)

This commit is contained in:
walkawayy 2022-03-05 14:42:02 -05:00 committed by GitHub
parent a058f4ebd1
commit f14ec7e036
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 13 deletions

View file

@ -13,6 +13,7 @@
#define TEXT_BOX_OFFSET 2 #define TEXT_BOX_OFFSET 2
#define TEXT_MAX_STRING_SIZE 100 #define TEXT_MAX_STRING_SIZE 100
#define TEXT_MAX_STRINGS 64 #define TEXT_MAX_STRINGS 64
#define RIGHT_ARROW_SYM 109
static int16_t m_TextstringCount = 0; static int16_t m_TextstringCount = 0;
static TEXTSTRING m_TextstringTable[TEXT_MAX_STRINGS] = { 0 }; static TEXTSTRING m_TextstringTable[TEXT_MAX_STRINGS] = { 0 };
@ -38,19 +39,19 @@ static int8_t m_TextSpacing[110] = {
}; };
static int8_t m_TextASCIIMap[95] = { static int8_t m_TextASCIIMap[95] = {
0 /* */, 64 /*!*/, 66 /*"*/, 78 /*#*/, 77 /*$*/, 74 /*%*/, 78 /*&*/, 0 /* */, 64 /*!*/, 66 /*"*/, 78 /*#*/, 77 /*$*/, 74 /*%*/, 78 /*&*/,
79 /*'*/, 69 /*(*/, 70 /*)*/, 92 /***/, 72 /*+*/, 63 /*,*/, 71 /*-*/, 79 /*'*/, 69 /*(*/, 70 /*)*/, 92 /***/, 72 /*+*/, 63 /*,*/, 71 /*-*/,
62 /*.*/, 68 /**/, 52 /*0*/, 53 /*1*/, 54 /*2*/, 55 /*3*/, 56 /*4*/, 62 /*.*/, 68 /**/, 52 /*0*/, 53 /*1*/, 54 /*2*/, 55 /*3*/, 56 /*4*/,
57 /*5*/, 58 /*6*/, 59 /*7*/, 60 /*8*/, 61 /*9*/, 73 /*:*/, 73 /*;*/, 57 /*5*/, 58 /*6*/, 59 /*7*/, 60 /*8*/, 61 /*9*/, 73 /*:*/, 73 /*;*/,
66 /*<*/, 74 /*=*/, 75 /*>*/, 65 /*?*/, 0 /**/, 0 /*A*/, 1 /*B*/, 66 /*<*/, 74 /*=*/, 75 /*>*/, 65 /*?*/, 108 /*@*/, 0 /*A*/, 1 /*B*/,
2 /*C*/, 3 /*D*/, 4 /*E*/, 5 /*F*/, 6 /*G*/, 7 /*H*/, 8 /*I*/, 2 /*C*/, 3 /*D*/, 4 /*E*/, 5 /*F*/, 6 /*G*/, 7 /*H*/, 8 /*I*/,
9 /*J*/, 10 /*K*/, 11 /*L*/, 12 /*M*/, 13 /*N*/, 14 /*O*/, 15 /*P*/, 9 /*J*/, 10 /*K*/, 11 /*L*/, 12 /*M*/, 13 /*N*/, 14 /*O*/, 15 /*P*/,
16 /*Q*/, 17 /*R*/, 18 /*S*/, 19 /*T*/, 20 /*U*/, 21 /*V*/, 22 /*W*/, 16 /*Q*/, 17 /*R*/, 18 /*S*/, 19 /*T*/, 20 /*U*/, 21 /*V*/, 22 /*W*/,
23 /*X*/, 24 /*Y*/, 25 /*Z*/, 80 /*[*/, 76 /*\*/, 81 /*]*/, 97 /*^*/, 23 /*X*/, 24 /*Y*/, 25 /*Z*/, 80 /*[*/, 76 /*\*/, 81 /*]*/, 97 /*^*/,
98 /*_*/, 77 /*`*/, 26 /*a*/, 27 /*b*/, 28 /*c*/, 29 /*d*/, 30 /*e*/, 98 /*_*/, 77 /*`*/, 26 /*a*/, 27 /*b*/, 28 /*c*/, 29 /*d*/, 30 /*e*/,
31 /*f*/, 32 /*g*/, 33 /*h*/, 34 /*i*/, 35 /*j*/, 36 /*k*/, 37 /*l*/, 31 /*f*/, 32 /*g*/, 33 /*h*/, 34 /*i*/, 35 /*j*/, 36 /*k*/, 37 /*l*/,
38 /*m*/, 39 /*n*/, 40 /*o*/, 41 /*p*/, 42 /*q*/, 43 /*r*/, 44 /*s*/, 38 /*m*/, 39 /*n*/, 40 /*o*/, 41 /*p*/, 42 /*q*/, 43 /*r*/, 44 /*s*/,
45 /*t*/, 46 /*u*/, 47 /*v*/, 48 /*w*/, 49 /*x*/, 50 /*y*/, 51 /*z*/, 45 /*t*/, 46 /*u*/, 47 /*v*/, 48 /*w*/, 49 /*x*/, 50 /*y*/, 51 /*z*/,
100 /*{*/, 101 /*|*/, 102 /*}*/, 67 /*~*/ 100 /*{*/, 101 /*|*/, 102 /*}*/, 67 /*~*/
}; };
@ -127,6 +128,15 @@ void Text_ChangeText(TEXTSTRING *textstring, const char *string)
} }
} }
void Text_SetPos(TEXTSTRING *textstring, int16_t x, int16_t y)
{
if (!textstring) {
return;
}
textstring->pos.x = x;
textstring->pos.y = y;
}
void Text_SetScale(TEXTSTRING *textstring, int32_t scale_h, int32_t scale_v) void Text_SetScale(TEXTSTRING *textstring, int32_t scale_h, int32_t scale_v)
{ {
if (!textstring) { if (!textstring) {
@ -150,6 +160,14 @@ void Text_Flash(TEXTSTRING *textstring, bool enable, int16_t rate)
} }
} }
void Text_Hide(TEXTSTRING *textstring, bool enable)
{
if (!textstring) {
return;
}
textstring->flags.hide = enable;
}
void Text_AddBackground( void Text_AddBackground(
TEXTSTRING *textstring, int16_t w, int16_t h, int16_t x, int16_t y) TEXTSTRING *textstring, int16_t w, int16_t h, int16_t x, int16_t y)
{ {
@ -291,6 +309,11 @@ void Text_Draw()
static void Text_DrawText(TEXTSTRING *textstring) static void Text_DrawText(TEXTSTRING *textstring)
{ {
int sx, sy, sh, sv; int sx, sy, sh, sv;
if (textstring->flags.hide) {
return;
}
if (textstring->flags.flash) { if (textstring->flags.flash) {
textstring->flash.count -= (int16_t)g_Camera.number_frames; textstring->flash.count -= (int16_t)g_Camera.number_frames;
if (textstring->flash.count <= -textstring->flash.rate) { if (textstring->flash.count <= -textstring->flash.rate) {
@ -336,6 +359,8 @@ static void Text_DrawText(TEXTSTRING *textstring)
int32_t sprite_num = letter; int32_t sprite_num = letter;
if (letter >= 16) { if (letter >= 16) {
sprite_num = m_TextASCIIMap[letter - 32]; sprite_num = m_TextASCIIMap[letter - 32];
} else if (letter == '\t') {
sprite_num = RIGHT_ARROW_SYM;
} else if (letter >= 11) { } else if (letter >= 11) {
sprite_num = letter + 91; sprite_num = letter + 91;
} else { } else {

View file

@ -10,8 +10,10 @@
void Text_Init(); void Text_Init();
TEXTSTRING *Text_Create(int16_t x, int16_t y, const char *string); TEXTSTRING *Text_Create(int16_t x, int16_t y, const char *string);
void Text_ChangeText(TEXTSTRING *textstring, const char *string); void Text_ChangeText(TEXTSTRING *textstring, const char *string);
void Text_SetPos(TEXTSTRING *textstring, int16_t x, int16_t y);
void Text_SetScale(TEXTSTRING *textstring, int32_t scale_h, int32_t scale_v); void Text_SetScale(TEXTSTRING *textstring, int32_t scale_h, int32_t scale_v);
void Text_Flash(TEXTSTRING *textstring, bool enable, int16_t rate); void Text_Flash(TEXTSTRING *textstring, bool enable, int16_t rate);
void Text_Hide(TEXTSTRING *textstring, bool enable);
void Text_AddBackground( void Text_AddBackground(
TEXTSTRING *textstring, int16_t w, int16_t h, int16_t x, int16_t y); TEXTSTRING *textstring, int16_t w, int16_t h, int16_t x, int16_t y);
void Text_RemoveBackground(TEXTSTRING *textstring); void Text_RemoveBackground(TEXTSTRING *textstring);