Removed retarded const char *

This commit is contained in:
2021-08-11 19:17:26 +02:00
parent 975db87adc
commit 13e9eac3d3
2 changed files with 30 additions and 28 deletions

View File

@@ -2884,20 +2884,22 @@ int16_t TFT_eSPI::height(void)
** Description: Return the width in pixels of a string in a given font ** Description: Return the width in pixels of a string in a given font
***************************************************************************************/ ***************************************************************************************/
int16_t TFT_eSPI::textWidth(const char *string) int16_t TFT_eSPI::textWidth(std::string_view string)
{ {
return textWidth(string, textfont); return textWidth(string, textfont);
} }
int16_t TFT_eSPI::textWidth(const char *string, uint8_t font) int16_t TFT_eSPI::textWidth(std::string_view string, uint8_t font)
{ {
int32_t str_width = 0; int32_t str_width = 0;
uint16_t uniCode = 0; uint16_t uniCode = 0;
auto ptr = std::begin(string);
#ifdef SMOOTH_FONT #ifdef SMOOTH_FONT
if(fontLoaded) { if(fontLoaded) {
while (*string) { while (*ptr) {
uniCode = decodeUTF8(*string++); uniCode = decodeUTF8(*ptr++);
if (uniCode) { if (uniCode) {
if (uniCode == 0x20) str_width += gFont.spaceWidth; if (uniCode == 0x20) str_width += gFont.spaceWidth;
else { else {
@@ -2905,7 +2907,7 @@ int16_t TFT_eSPI::textWidth(const char *string, uint8_t font)
bool found = getUnicodeIndex(uniCode, &gNum); bool found = getUnicodeIndex(uniCode, &gNum);
if (found) { if (found) {
if(str_width == 0 && gdX[gNum] < 0) str_width -= gdX[gNum]; if(str_width == 0 && gdX[gNum] < 0) str_width -= gdX[gNum];
if (*string || isDigits) str_width += gxAdvance[gNum]; if (*ptr || isDigits) str_width += gxAdvance[gNum];
else str_width += (gdX[gNum] + gWidth[gNum]); else str_width += (gdX[gNum] + gWidth[gNum]);
} }
else str_width += gFont.spaceWidth + 1; else str_width += gFont.spaceWidth + 1;
@@ -2920,8 +2922,8 @@ int16_t TFT_eSPI::textWidth(const char *string, uint8_t font)
if (font>1 && font<9) { if (font>1 && font<9) {
char *widthtable = (char *)pgm_read_dword( &(fontdata[font].widthtbl ) ) - 32; //subtract the 32 outside the loop char *widthtable = (char *)pgm_read_dword( &(fontdata[font].widthtbl ) ) - 32; //subtract the 32 outside the loop
while (*string) { while (*ptr) {
uniCode = *(string++); uniCode = *(ptr++);
if (uniCode > 31 && uniCode < 128) if (uniCode > 31 && uniCode < 128)
str_width += pgm_read_byte( widthtable + uniCode); // Normally we need to subtract 32 from uniCode str_width += pgm_read_byte( widthtable + uniCode); // Normally we need to subtract 32 from uniCode
else str_width += pgm_read_byte( widthtable + 32); // Set illegal character = space width else str_width += pgm_read_byte( widthtable + 32); // Set illegal character = space width
@@ -2932,13 +2934,13 @@ int16_t TFT_eSPI::textWidth(const char *string, uint8_t font)
#ifdef LOAD_GFXFF #ifdef LOAD_GFXFF
if(gfxFont) { // New font if(gfxFont) { // New font
while (*string) { while (*ptr) {
uniCode = decodeUTF8(*string++); uniCode = decodeUTF8(*ptr++);
if ((uniCode >= pgm_read_word(&gfxFont->first)) && (uniCode <= pgm_read_word(&gfxFont->last ))) { if ((uniCode >= pgm_read_word(&gfxFont->first)) && (uniCode <= pgm_read_word(&gfxFont->last ))) {
uniCode -= pgm_read_word(&gfxFont->first); uniCode -= pgm_read_word(&gfxFont->first);
GFXglyph *glyph = &(((GFXglyph *)pgm_read_dword(&gfxFont->glyph))[uniCode]); GFXglyph *glyph = &(((GFXglyph *)pgm_read_dword(&gfxFont->glyph))[uniCode]);
// If this is not the last character or is a digit then use xAdvance // If this is not the last character or is a digit then use xAdvance
if (*string || isDigits) str_width += pgm_read_byte(&glyph->xAdvance); if (*ptr || isDigits) str_width += pgm_read_byte(&glyph->xAdvance);
// Else use the offset plus width since this can be bigger than xAdvance // Else use the offset plus width since this can be bigger than xAdvance
else str_width += ((int8_t)pgm_read_byte(&glyph->xOffset) + pgm_read_byte(&glyph->width)); else str_width += ((int8_t)pgm_read_byte(&glyph->xOffset) + pgm_read_byte(&glyph->width));
} }
@@ -2948,7 +2950,7 @@ int16_t TFT_eSPI::textWidth(const char *string, uint8_t font)
#endif #endif
{ {
#ifdef LOAD_GLCD #ifdef LOAD_GLCD
while (*string++) str_width += 6; while (*ptr++) str_width += 6;
#endif #endif
} }
} }
@@ -4329,7 +4331,7 @@ uint16_t TFT_eSPI::decodeUTF8(uint8_t c)
** Function name: decodeUTF8 ** Function name: decodeUTF8
** Description: Line buffer UTF-8 decoder with fall-back to extended ASCII ** Description: Line buffer UTF-8 decoder with fall-back to extended ASCII
*************************************************************************************x*/ *************************************************************************************x*/
uint16_t TFT_eSPI::decodeUTF8(uint8_t *buf, uint16_t *index, uint16_t remaining) uint16_t TFT_eSPI::decodeUTF8(const uint8_t *buf, uint16_t *index, uint16_t remaining)
{ {
uint16_t c = buf[(*index)++]; uint16_t c = buf[(*index)++];
//Serial.print("Byte from string = 0x"); Serial.println(c, HEX); //Serial.print("Byte from string = 0x"); Serial.println(c, HEX);
@@ -4877,13 +4879,13 @@ int16_t TFT_eSPI::drawChar(uint16_t uniCode, int32_t x, int32_t y, uint8_t font)
** Description : draw string with padding if it is defined ** Description : draw string with padding if it is defined
***************************************************************************************/ ***************************************************************************************/
// Without font number, uses font set by setTextFont() // Without font number, uses font set by setTextFont()
int16_t TFT_eSPI::drawString(const char *string, int32_t poX, int32_t poY) int16_t TFT_eSPI::drawString(std::string_view string, int32_t poX, int32_t poY)
{ {
return drawString(string, poX, poY, textfont); return drawString(string, poX, poY, textfont);
} }
// With font number. Note: font number is over-ridden if a smooth font is loaded // With font number. Note: font number is over-ridden if a smooth font is loaded
int16_t TFT_eSPI::drawString(const char *string, int32_t poX, int32_t poY, uint8_t font) int16_t TFT_eSPI::drawString(std::string_view string, int32_t poX, int32_t poY, uint8_t font)
{ {
int16_t sumX = 0; int16_t sumX = 0;
uint8_t padding = 1, baseline = 0; uint8_t padding = 1, baseline = 0;
@@ -4987,10 +4989,10 @@ int16_t TFT_eSPI::drawString(const char *string, int32_t poX, int32_t poY, uint8
cheight = (glyph_ab + glyph_bb) * textsize; cheight = (glyph_ab + glyph_bb) * textsize;
// Get the offset for the first character only to allow for negative offsets // Get the offset for the first character only to allow for negative offsets
uint16_t c2 = 0; uint16_t c2 = 0;
uint16_t len = strlen(string); uint16_t len = string.size();
uint16_t n = 0; uint16_t n = 0;
while (n < len && c2 == 0) c2 = decodeUTF8((uint8_t*)string, &n, len - n); while (n < len && c2 == 0) c2 = decodeUTF8((const uint8_t*)std::begin(string), &n, len - n);
if((c2 >= pgm_read_word(&gfxFont->first)) && (c2 <= pgm_read_word(&gfxFont->last) )) { if((c2 >= pgm_read_word(&gfxFont->first)) && (c2 <= pgm_read_word(&gfxFont->last) )) {
c2 -= pgm_read_word(&gfxFont->first); c2 -= pgm_read_word(&gfxFont->first);
@@ -5008,7 +5010,7 @@ int16_t TFT_eSPI::drawString(const char *string, int32_t poX, int32_t poY, uint8
} }
#endif #endif
uint16_t len = strlen(string); uint16_t len = string.size();
uint16_t n = 0; uint16_t n = 0;
#ifdef SMOOTH_FONT #ifdef SMOOTH_FONT
@@ -5020,7 +5022,7 @@ int16_t TFT_eSPI::drawString(const char *string, int32_t poX, int32_t poY, uint8
if (padX && !_fillbg) _fillbg = true; if (padX && !_fillbg) _fillbg = true;
while (n < len) { while (n < len) {
uint16_t uniCode = decodeUTF8((uint8_t*)string, &n, len - n); uint16_t uniCode = decodeUTF8((uint8_t*)ptr, &n, len - n);
drawGlyph(uniCode); drawGlyph(uniCode);
} }
_fillbg = fillbg; // restore state _fillbg = fillbg; // restore state
@@ -5031,7 +5033,7 @@ int16_t TFT_eSPI::drawString(const char *string, int32_t poX, int32_t poY, uint8
#endif #endif
{ {
while (n < len) { while (n < len) {
uint16_t uniCode = decodeUTF8((uint8_t*)string, &n, len - n); uint16_t uniCode = decodeUTF8((const uint8_t*)std::begin(string), &n, len - n);
sumX += drawChar(uniCode, poX+sumX, poY, font); sumX += drawChar(uniCode, poX+sumX, poY, font);
} }
} }
@@ -5107,7 +5109,7 @@ return sumX;
** Function name: drawCentreString (deprecated, use setTextDatum()) ** Function name: drawCentreString (deprecated, use setTextDatum())
** Descriptions: draw string centred on dX ** Descriptions: draw string centred on dX
***************************************************************************************/ ***************************************************************************************/
int16_t TFT_eSPI::drawCentreString(const char *string, int32_t dX, int32_t poY, uint8_t font) int16_t TFT_eSPI::drawCentreString(std::string_view string, int32_t dX, int32_t poY, uint8_t font)
{ {
uint8_t tempdatum = textdatum; uint8_t tempdatum = textdatum;
int32_t sumX = 0; int32_t sumX = 0;
@@ -5122,7 +5124,7 @@ int16_t TFT_eSPI::drawCentreString(const char *string, int32_t dX, int32_t poY,
** Function name: drawRightString (deprecated, use setTextDatum()) ** Function name: drawRightString (deprecated, use setTextDatum())
** Descriptions: draw string right justified to dX ** Descriptions: draw string right justified to dX
***************************************************************************************/ ***************************************************************************************/
int16_t TFT_eSPI::drawRightString(const char *string, int32_t dX, int32_t poY, uint8_t font) int16_t TFT_eSPI::drawRightString(std::string_view string, int32_t dX, int32_t poY, uint8_t font)
{ {
uint8_t tempdatum = textdatum; uint8_t tempdatum = textdatum;
int16_t sumX = 0; int16_t sumX = 0;

View File

@@ -563,11 +563,11 @@ class TFT_eSPI { friend class TFT_eSprite; // Sprite class has access to protect
// Handle char arrays // Handle char arrays
// Use with setTextDatum() to position string on TFT, and setTextPadding() to blank old displayed strings // Use with setTextDatum() to position string on TFT, and setTextPadding() to blank old displayed strings
drawString(const char *string, int32_t x, int32_t y, uint8_t font), // Draw string using specified font number drawString(std::string_view string, int32_t x, int32_t y, uint8_t font), // Draw string using specifed font number
drawString(const char *string, int32_t x, int32_t y), // Draw string using current font drawString(std::string_view string, int32_t x, int32_t y), // Draw string using current font
drawCentreString(const char *string, int32_t x, int32_t y, uint8_t font), // Deprecated, use setTextDatum() and drawString() drawCentreString(std::string_view string, int32_t x, int32_t y, uint8_t font), // Deprecated, use setTextDatum() and drawString()
drawRightString(const char *string, int32_t x, int32_t y, uint8_t font); // Deprecated, use setTextDatum() and drawString() drawRightString(std::string_view string, int32_t x, int32_t y, uint8_t font); // Deprecated, use setTextDatum() and drawString()
// Text rendering and font handling support funtions // Text rendering and font handling support funtions
void setCursor(int16_t x, int16_t y), // Set cursor for tft.print() void setCursor(int16_t x, int16_t y), // Set cursor for tft.print()
@@ -596,13 +596,13 @@ class TFT_eSPI { friend class TFT_eSprite; // Sprite class has access to protect
setTextFont(uint8_t font); // Set the font number to use in future setTextFont(uint8_t font); // Set the font number to use in future
#endif #endif
int16_t textWidth(const char *string, uint8_t font), // Returns pixel width of string in specified font int16_t textWidth(std::string_view string, uint8_t font), // Returns pixel width of string in specified font
textWidth(const char *string), // Returns pixel width of string in current font textWidth(std::string_view string), // Returns pixel width of string in current font
fontHeight(int16_t font), // Returns pixel height of string in specified font fontHeight(int16_t font), // Returns pixel height of string in specified font
fontHeight(void); // Returns pixel width of string in current font fontHeight(void); // Returns pixel width of string in current font
// Used by library and Smooth font class to extract Unicode point codes from a UTF8 encoded string // Used by library and Smooth font class to extract Unicode point codes from a UTF8 encoded string
uint16_t decodeUTF8(uint8_t *buf, uint16_t *index, uint16_t remaining), uint16_t decodeUTF8(const uint8_t *buf, uint16_t *index, uint16_t remaining),
decodeUTF8(uint8_t c); decodeUTF8(uint8_t c);
// Support function to UTF8 decode and draw characters piped through print stream // Support function to UTF8 decode and draw characters piped through print stream