2025-07-23 3:12 PM
I am trying to update a text area called textTestArea with a string and I want to be able to format the string with a newline character. Ex "I went to the store \n to buy food"
I created a texts called genericText that uses a default font that has wildcard range 0x00-0xFF , I also tried having range 0x20-0x7e and wildcard character 0x0A (/n)
here is the text and typography:
Here is the screen with text area:
in baseview.cpp it creates:
textTestArea.setPosition(397, 26, 237, 55);
textTestArea.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
textTestArea.setLinespacing(0);
Unicode::snprintf(textTestAreaBuffer, TEXTTESTAREA_SIZE, "%s", touchgfx::TypedText(T_GENERICTEXT).getText());
textTestArea.setWildcard(textTestAreaBuffer);
textTestArea.setTypedText(touchgfx::TypedText(T___SINGLEUSE_E1ZC));
add(textTestArea);
So now in my view.cpp:
static const uint16_t TEXTBUFFER_SIZE = 64;
Unicode::UnicodeChar textBuffer[TEXTBUFFER_SIZE];
Unicode::snprintf(textBuffer, TEXTBUFFER_SIZE, "I went to store \n to but food");
textTestArea.setTypedText(TypedText(T___SINGLEUSE_81C4)); // Must match your Texts View ID
textTestArea.setWildcard(textBuffer);
textTestArea.setWideTextAction(WIDE_TEXT_WORDWRAP);
textTestArea.resizeToCurrentText();
textTestArea.invalidate();
I get "test" Not I went to the store....
I have tried 100 iterations. I have gotten it to print "I went to the store \n to buy food", but can not get it to acknowledge the \n character.
How is this implemented correctly?
2025-07-23 4:20 PM
Could it be the font I am using dies not have the newline character defined? I read something about creating special characters as glyphs?
2025-07-23 6:46 PM
Could you use typed text in TouchGFX instead of programmatically assembling a multiline string? That's how I've been doing it, with no problems.
2025-07-23 6:57 PM
I tried using vendana font, no difference.
So I am able to use this code and it prints a:
Unicode::snprintf(textTestAreaBuffer, TEXTTESTAREA_SIZE, "%s", "a");
textTestArea.invalidate();
this is how the generated textTestArea is in viewbase.cpp
textTestArea.setXY(397, 26);
textTestArea.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
textTestArea.setLinespacing(0);
textTestArea.setWideTextAction(WIDE_TEXT_WORDWRAP);
Unicode::snprintf(textTestAreaBuffer, TEXTTESTAREA_SIZE, "%s", touchgfx::TypedText(T___SINGLEUSE_J85U).getText());
textTestArea.setWildcard(textTestAreaBuffer);
textTestArea.resizeToCurrentText();
textTestArea.setTypedText(touchgfx::TypedText(T___SINGLEUSE_45YP));
add(textTestArea);
}
But if I try to print a \n a: I get ??a
Unicode::snprintf(textTestAreaBuffer, TEXTTESTAREA_SIZE, "%s", "a \n a");
textTestArea.invalidate();
Not sure what to try?
2025-07-23 6:59 PM - edited 2025-07-23 7:06 PM
like this?
It still will not acknowledge \n
wait I can make it like this:
2025-07-25 8:02 AM
Like that!
Another option is to add text wrapping to your text box, but I suppose you don't as much control around how it wraps.
Our text box is in a container,
And then our code chooses which of three errors to display (via custom title, image, and text) like so (sanitized version):
void ErrorView::setupScreen()
{
ErrorViewBase::setupScreen();
TEXTS title_text = T_TEXTERROR;
TEXTS body_text = T_TEXTERROR;
uint16_t image_bitmap_id = BITMAP_IMAGE_0_ID;
const Status status = presenter->getStatus();
switch (status)
{
case Status_ERROR_1:
image_bitmap_id = BITMAP_IMAGE_1_ID;
title_text = T_TITLE_1;
body_text = T_BODY_1;
break;
case Status_ERROR_2:
image_bitmap_id = BITMAP_IMAGE_2_ID;
title_text = T_TITLE_2;
body_text = T_BODY_2;
break;
case Status_ERROR_3:
image_bitmap_id = BITMAP_IMAGE_3_ID;
title_text = T_TITLE_3;
body_text = T_BODY_3;
break;
default:
break;
}
image.setBitmap(Bitmap(image_bitmap_id));
textTitle.setTypedText(TypedText(title_text));
textInstructions.setTypedText(TypedText(body_text));
// vertically center the instructions to the right of the image within its container
textInstructions.resizeHeightToCurrentText();
textInstructions.centerY();
image.invalidate();
textTitle.invalidate();
textInstructions.invalidate();
}
2025-08-06 4:02 AM
Hello @FJB2069 ,
I was able to use the \n but using strncpy function :
void Screen1View::setupScreen()
{
Screen1ViewBase::setupScreen();
const char *myNewText = "Hello world\nthis is a test";
Unicode::strncpy(textArea1Buffer, myNewText, TEXTAREA1_SIZE);
textArea1.resizeToCurrentText();
textArea1.invalidate();
}
Here's my text config :
and my canvas :
Could you try that and let me know if that works?