Added a function to attempt to diplay the words in full
This commit is contained in:
@@ -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,7 +16,7 @@ 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);
|
||||
}
|
||||
|
||||
@@ -34,3 +35,38 @@ int DisplayText::bottomText(char* text) {
|
||||
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);
|
||||
|
||||
}
|
Reference in New Issue
Block a user