Formatted Text - cnjinhao/nana GitHub Wiki
The formatted text is a string that contains font style, colour and other information for rich text rendering.
The label widget supports the formatted text.
Enable the Formatted Text mode.
label.format(true);Bold font
label.caption("Hello, <bold>This is a bold text</>");Font color
label.caption("Hello, <bold color=0xff0000>This is a bold red text</>");Change font family name
label.caption("Hello, <bold color=0xff0000 font=\"Consolas\">This is a bold red Consolas text</>");Change font size
label.caption("Hello, <bold color=0xff0000 font=\"Consolas\" size=20>This is a bold red Consolas text in size 20</>");Reserved words
The formatted text defines some reserved words: red, green, blue, white and black. The reserved words can simplify the formatted text and increas readability.
label.caption("Click <color=0xff target=\"target id\">here</>");
//vs
label.caption("Click <blue target=\"target id\">here</>");Alignment of Text
The Formatted Text defines the vertical alignment of text. The default alignment of text is baseline-aligned. Nana provides 4 kinds of alignments: top, center, bottom and baseline. They are useful tools when display texts with different size in a line.
label.caption("<size=12 top>top</><size=14 center>center<size=16 bottom>bottom</><size=30>baseline</><size=10>small font by baseline</>");URL Attribute
label.caption("Hello, <bold color=0xff0000 font=\"Consolas\" url=\"http://nanapro.org\">This is a bold red Consolas text</>"");Arrow cursor becomes a hand when the cursor moves over the red text. Meanwhile, it calls a web browser to open the URL by clicking the red text. NOTE: the url only works under Windows
Target Attribute
The target attribute allows user clicking on the specified text, and application can react to the operation.
int main()
{
using nanemspace nana;
form fm;
label lab(fm, rectangle{0, 0, 100, 40});
lab.caption("Click <color=0xff target=\"target id\">here</>");
lab.format(true);
lab.add_format_listener([](label::command cmd, const std::string& str)
{
if(label::command::click == cmd)
{
msgbox mb("target clicked");
mb<<"the target \""<<str<<"\" is clicked";
mb();
}
});
fm.show();
exec();
}label.caption("<image=\"file.bmp\"><bold red size=20>Nana C++ Library</>");The image tag has not a close-tag </>. The image is displayed with its orignal size.
Sizing image
label.caption("<image=\"file.bmp\" size=(150,150)><bold red size=20>Nana C++ Library</>");"size=(150,150)" means that it stretchs the image by the specified size.
In some situations, the image is required to be displayed by a given size but with preserving aspect ratio. By using max_limited/min_limited, it is possible to make it.
max_limited: stretchs the image with preserving aspect ratio until its one of edge beyongds the specified size.
min_limited: stretchs the image with preserving aspect ratio until its one of edge is less than the specified size.
label.caption("<image=\"file.bmp\" size=(150,150) max_limited><bold red size=20>Nana C++ Library</>");




