From 65034a6b031d9d39d557d0c96881b8e6995df10e Mon Sep 17 00:00:00 2001 From: Fabrice Weinberg <Fabrice@weinberg.me> Date: Sun, 10 Jan 2016 21:12:02 +0100 Subject: [PATCH] getStringWidth will report longest line in a multiline string --- SSD1306.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/SSD1306.cpp b/SSD1306.cpp index 08ff125..b103f76 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) { -- GitLab