diff --git a/radio/src/gui/colorlcd/draw_functions.cpp b/radio/src/gui/colorlcd/draw_functions.cpp index 148b2ae9a..81d5f9762 100644 --- a/radio/src/gui/colorlcd/draw_functions.cpp +++ b/radio/src/gui/colorlcd/draw_functions.cpp @@ -511,20 +511,42 @@ void drawTextLines(BitmapBuffer * dc, coord_t left, coord_t top, coord_t width, coord_t line = getFontHeight(flags & 0xFFFF); coord_t space = getTextWidth(" ", 1, flags); coord_t word; - const char * eos = str + strlen(str); - const char * nxt; + const char * nxt = str; - while (str < eos) { - nxt = strstr(str, " "); - if (!nxt) nxt = eos; + while (true) { + for (bool done = false; !done; nxt++) { + switch (nxt[0]) { + case '-': + case '/': + case ':': + nxt++; + case ' ': + case '\n': + case '\0': + done = true; + } + } + nxt--; word = getTextWidth(str, nxt - str, flags); if (x + word > left + width && x > left) { x = left; y += line; } - if (y + line > top + height) break; + if (y + line > top + height) return; dc->drawSizedText(x, y, str, nxt - str, flags); - str = nxt + 1; - x += word + space; + x += word; + switch (nxt[0]) { + case '\0': + return; + case '\n': + x = left; + y += line; + nxt++; + break; + case ' ': + x += space; + nxt++; + } + str = nxt; } } \ No newline at end of file