diff --git a/SSD1306.cpp b/SSD1306.cpp index 08ff125bc26bf1162e8c50a394855de2b45edf61..b103f7612e426b554a4e193faf25abc7b546e829 100644 --- a/SSD1306.cpp +++ b/SSD1306.cpp @@ -355,12 +355,20 @@ void SSD1306::drawStringMaxWidth(int16_t xMove, int16_t yMove, uint16_t maxLineW } uint16_t SSD1306::getStringWidth(const char* text, uint16_t length) { - uint16_t stringWidth = 0; uint16_t firstChar = pgm_read_byte(fontData + FIRST_CHAR_POS); + + uint16_t stringWidth = 0; + uint16_t maxWidth = 0; + while (length--) { stringWidth += pgm_read_byte(fontData + JUMPTABLE_START + (text[length] - firstChar) * JUMPTABLE_BYTES + JUMPTABLE_WIDTH); + if (text[length] == 10) { + maxWidth = max(maxWidth, stringWidth); + stringWidth = 0; + } } - return stringWidth; + + return max(maxWidth, stringWidth); } void SSD1306::setTextAlignment(SSD1306_TEXT_ALIGNMENT textAlignment) {