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