Added a function to attempt to diplay the words in full

This commit is contained in:
Sam
2024-03-07 19:54:31 +01:00
parent d1c962f71c
commit aa6c35044e

View File

@@ -4,6 +4,7 @@
//constructor
DisplayText::DisplayText(Adafruit_ST7796S_kbv& tftDisplay) : tft(tftDisplay) {
tft.setCursor(0,0);
tft.fillScreen(ST7796S_BLACK);
}
void DisplayText::writeText(char* text, int size, int posX, int posY, int screenTime, bool center, bool bottom) {
@@ -15,12 +16,12 @@ void DisplayText::writeText(char* text, int size, int posX, int posY, int screen
}
tft.setCursor(posX, posY);
tft.setTextSize(size);
tft.println(text);
printWordsFull(text);
delay(screenTime);
}
int DisplayText::centerText(char* text) {
int16_t x1, y1;
int16_t x1, y1;
uint16_t w, h;
tft.getTextBounds(text, 0, 0, &x1, &y1, &w, &h);
int x = (tft.width() - w) / 2;
@@ -33,4 +34,39 @@ int DisplayText::bottomText(char* text) {
tft.getTextBounds(text, 0, 0, &x1, &y1, &w, &h);
int y = (tft.height() - h);
return y;
}
void DisplayText::printWordsFull(char* text) {
char* textArray[100];
int i = 0;
char* textCopy = strdup(text);
char* word = strtok(text, " ");
while (word != NULL) {
textArray[i] = word;
word = strtok(NULL, " ");
i++;
}
int lineWidth = 0;
int maxLineWidth = 320; // replace with the width of your TFT display
int charWidth = 11; // replace with the width of your characters
for (int j = 0; j < i; j++) {
int wordLength = strlen(textArray[j]);
// If the word won't fit on the current line, move to the next line
if (lineWidth + wordLength * charWidth > maxLineWidth) {
tft.println();
lineWidth = 0;
}
tft.print(textArray[j]);
tft.print(" ");
lineWidth += (wordLength + 1) * charWidth; // +1 for the space
}
free(textCopy);
}