diff options
| author | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2025-06-22 12:06:15 +0200 |
|---|---|---|
| committer | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2025-06-22 12:06:15 +0200 |
| commit | 0ca30a2d019ec31459a571dd82a36dad140df49b (patch) | |
| tree | 3bb6aad41a6d518f04b72e09b98f0ff7c7abfef0 /samples/tests/text.cpp | |
| parent | 86ff26b3787c09b2e9a321d944af312b49041f08 (diff) | |
unified samples app in c++, unit testing wip
Diffstat (limited to 'samples/tests/text.cpp')
| -rw-r--r-- | samples/tests/text.cpp | 284 |
1 files changed, 284 insertions, 0 deletions
diff --git a/samples/tests/text.cpp b/samples/tests/text.cpp new file mode 100644 index 0000000..0f151ca --- /dev/null +++ b/samples/tests/text.cpp @@ -0,0 +1,284 @@ +#include "VkvgTest.hpp" + +static const char *txt = "The quick brown fox jumps over the lazy dog"; + +void print(VkvgContext ctx, float penY, uint32_t size) { + vkvg_set_font_size(ctx, size); + vkvg_move_to(ctx, 10, penY); + vkvg_show_text(ctx, txt); +} +void print_boxed(VkvgContext ctx, const char *text, float penX, float penY, uint32_t size) { + vkvg_set_font_size(ctx, size); + vkvg_text_extents_t te = {0}; + vkvg_text_extents(ctx, text, &te); + vkvg_font_extents_t fe = {0}; + vkvg_font_extents(ctx, &fe); + + vkvg_move_to(ctx, penX, penY); + vkvg_rectangle(ctx, penX, penY - fe.ascent, te.width, fe.height); + vkvg_set_source_rgb(ctx, 0.2f, 0.2f, 0.7f); + vkvg_fill(ctx); + + vkvg_move_to(ctx, penX, penY); + vkvg_set_source_rgb(ctx, 1, 1, 1); + vkvg_show_text(ctx, text); +} +void print_unboxed(VkvgContext ctx, const char *text, float penX, float penY, uint32_t size) { + vkvg_set_font_size(ctx, size); + vkvg_move_to(ctx, penX, penY); + vkvg_set_source_rgb(ctx, 1, 1, 1); + vkvg_show_text(ctx, text); +} +TEST(text2) { + VkvgContext ctx = vkvg_create(test->surf); + vkvg_clear(ctx); + + vkvg_color_t bg = {0.0, 0.0, 0.0, 1}; + vkvg_color_t fg = {1.0f, 1.0f, 1.0f, 1}; + + vkvg_set_source_rgba(ctx, bg.r, bg.g, bg.b, bg.a); + vkvg_paint(ctx); + vkvg_set_source_rgba(ctx, fg.r, fg.g, fg.b, fg.a); + // vkvg_select_font_face(ctx, "droid"); + vkvg_select_font_face(ctx, "times"); + + float penY = 10.f; + + for (uint32_t size = 4; size < 39; size++) { + print(ctx, (float)penY, size); + penY += size; + } + + vkvg_destroy(ctx); +} +TEST(text1) { + VkvgContext ctx = vkvg_create(test->surf); + vkvg_clear(ctx); + + vkvg_color_t fg = {0.0, 0.0, 0.0, 1}; + vkvg_color_t bg = {0.9f, 0.9f, 0.9f, 1}; + + vkvg_set_source_rgba(ctx, bg.r, bg.g, bg.b, bg.a); + vkvg_paint(ctx); + vkvg_set_source_rgba(ctx, fg.r, fg.g, fg.b, fg.a); + + uint32_t size = 8; + float penY = 100.f; + + vkvg_set_font_size(ctx, size); + + vkvg_select_font_face(ctx, "mono"); + vkvg_move_to(ctx, 100.f, penY); + vkvg_show_text(ctx, txt); + + penY += 1.2f * size; + + vkvg_select_font_face(ctx, "times"); + vkvg_move_to(ctx, 100.f, penY); + vkvg_show_text(ctx, txt); + + penY += 1.2f * size; + + vkvg_select_font_face(ctx, "arial:italic"); + vkvg_move_to(ctx, 100.f, penY); + vkvg_show_text(ctx, txt); + + vkvg_destroy(ctx); +} +TEST(text_test) { + VkvgContext ctx = vkvg_create(test->surf); + vkvg_clear(ctx); + + // vkvg_color_t fg = {0.2,0.2,0.2,1}; + vkvg_color_t fg = {0.0, 0.0, 0.0, 1}; + vkvg_color_t bg = {1.0f, 1.0f, 1.0f, 1}; + vkvg_set_source_rgba(ctx, bg.r, bg.g, bg.b, bg.a); + vkvg_paint(ctx); + + float size = 19; + float penY = 50; + float penX = 10; + + /*vkvg_rectangle(ctx,30,0,100,400); + vkvg_clip(ctx);*/ + + // vkvg_select_font_face(ctx, "/usr/local/share/fonts/DroidSansMono.ttf"); + // vkvg_select_font_face(ctx, "/usr/share/fonts/truetype/unifont/unifont.ttf"); + + vkvg_set_font_size(ctx, 12); + vkvg_select_font_face(ctx, "droid"); + vkvg_font_extents_t fe; + vkvg_font_extents(ctx, &fe); + vkvg_move_to(ctx, penX, penY); + vkvg_set_source_rgba(ctx, fg.r, fg.g, fg.b, fg.a); + vkvg_text_extents_t te; + vkvg_text_extents(ctx, "abcdefghijk", &te); + vkvg_show_text(ctx, "abcdefghijk"); + penX += te.x_advance; + vkvg_move_to(ctx, penX, penY); + vkvg_show_text(ctx, "*abcdefghijk2"); + penY += 2.f * size; + + vkvg_select_font_face(ctx, "times"); + vkvg_move_to(ctx, penX, penY); + vkvg_show_text(ctx, "abcdefghijklmnopqrstuvwxyz"); + penY += size; + + vkvg_select_font_face(ctx, "droid"); + vkvg_move_to(ctx, penX, penY); + vkvg_show_text(ctx, "lmnopqrstuvwxyz123456789"); + penY += size; + + vkvg_select_font_face(ctx, "times:bold"); + vkvg_move_to(ctx, penX, penY); + vkvg_show_text(ctx, "abcdefghijklmnopqrstuvwxyz"); + penY += size; + + vkvg_select_font_face(ctx, "droid"); + vkvg_move_to(ctx, penX, penY); + vkvg_show_text(ctx, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + penY += size; + + vkvg_select_font_face(ctx, "arial:italic"); + vkvg_move_to(ctx, penX, penY); + vkvg_show_text(ctx, "abcdefghijklmnopqrstuvwxyz"); + penY += size; + + vkvg_select_font_face(ctx, "arial"); + vkvg_move_to(ctx, penX, penY); + vkvg_show_text(ctx, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + penY += size; + vkvg_move_to(ctx, penX, penY); + vkvg_show_text(ctx, "this is a test"); + penY += size; + vkvg_move_to(ctx, penX, penY); + vkvg_show_text(ctx, "this is another test to see if label is working"); + penY += size; + + vkvg_select_font_face(ctx, "mono"); + vkvg_move_to(ctx, penX, penY); + vkvg_show_text(ctx, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + penY += size; + + vkvg_move_to(ctx, 80, 400); + vkvg_show_text(ctx, "Ленивый рыжий кот"); + + vkvg_move_to(ctx, 150, 250); + vkvg_show_text(ctx, "test string é€"); + vkvg_move_to(ctx, 150, 300); + vkvg_show_text(ctx, "كسول الزنجبيل القط"); + vkvg_move_to(ctx, 150, 350); + vkvg_show_text(ctx, "懶惰的姜貓"); + + // vkvg_show_text (ctx,"ABCDABCD"); + // vkvg_show_text (ctx,"j"); + + vkvg_destroy(ctx); +} +TEST(text_single_font_and_size) { + VkvgContext ctx = vkvg_create(test->surf); + vkvg_clear(ctx); + + float w = (float)test->app->width; + float h = (float)test->app->height; + + for (uint32_t i = 0; i < test->app->testSize; i++) { + randomize_color(ctx); + float x = rndf() * w; + float y = rndf() * h; + vkvg_select_font_face(ctx, "mono"); + vkvg_set_font_size(ctx, 20); + vkvg_move_to(ctx, x, y); + vkvg_show_text(ctx, "This is a test string!"); + } + vkvg_destroy(ctx); +} +TEST(text_simple) { + VkvgContext ctx = vkvg_create(test->surf); + vkvg_clear(ctx); + + vkvg_set_source_rgb(ctx, 0, 0, 0); + vkvg_paint(ctx); + vkvg_set_source_rgb(ctx, 1, 1, 1); + + vkvg_load_font_from_path(ctx, "data/DancingScript-Regular.ttf", "dancing"); + print_boxed(ctx, "abcdefghijklmnopqrstuvwxyz", 20, 60, 20); + print_boxed(ctx, "ABC", 20, 160, 60); + vkvg_select_font_face(ctx, "mono"); + print_boxed(ctx, "This is a test string!", 20, 250, 20); + print_boxed(ctx, "ANOTHER ONE TO CHECK..", 20, 350, 20); + + vkvg_destroy(ctx); +} +TEST(text_font_file_path) { + VkvgContext ctx = vkvg_create(test->surf); + vkvg_clear(ctx); + + vkvg_set_source_rgb(ctx, 0, 0, 0); + vkvg_paint(ctx); + vkvg_set_source_rgb(ctx, 1, 1, 1); + vkvg_load_font_from_path(ctx, "data/DancingScript-Regular.ttf", "droid"); + print_boxed(ctx, "This is a test string!", 50, 20, 12); + print_boxed(ctx, "This is a test string!", 50, 50, 20); + print_boxed(ctx, "ANOTHER ONE TO CHECK..", 50, 80, 20); + print_boxed(ctx, "this is another string to check if ligature are well set", 10, 120, 20); + vkvg_destroy(ctx); +} + +TEST(text_random_size) { + VkvgContext ctx = vkvg_create(test->surf); + vkvg_clear(ctx); + + float w = (float)test->app->width; + float h = (float)test->app->height; + + vkvg_select_font_face(ctx, "mono"); + for (uint32_t i = 0; i < test->app->testSize; i++) { + randomize_color(ctx); + float x = rndf() * w; + float y = rndf() * h; + uint32_t c = (uint32_t)(rndf() * 120) + 1; + + vkvg_set_font_size(ctx, c); + vkvg_move_to(ctx, x, y); + vkvg_show_text(ctx, "This is a test string!"); + } + vkvg_destroy(ctx); +} + +const char *const fonts[] = {"mono", "droid", "times", "arial", "times:bold"}; + +TEST(text_random_font_and_size) { + VkvgContext ctx = vkvg_create(test->surf); + vkvg_clear(ctx); + + float w = (float)test->app->width; + float h = (float)test->app->height; + + for (uint32_t i = 0; i < test->app->testSize; i++) { + randomize_color(ctx); + float x = rndf() * w; + float y = rndf() * h; + uint32_t c = (uint32_t)(rndf() * 80) + 1; + uint32_t f = (uint32_t)(rndf() * 4); + + vkvg_set_font_size(ctx, c); + vkvg_select_font_face(ctx, fonts[f]); + vkvg_move_to(ctx, x, y); + vkvg_show_text(ctx, "This is a test string!"); + } + vkvg_destroy(ctx); +} +TEST(text_proto_sinaitic) { + VkvgContext ctx = vkvg_create(test->surf); + vkvg_clear(ctx); + + vkvg_set_source_rgb(ctx, 0, 0, 0); + vkvg_paint(ctx); + vkvg_set_source_rgb(ctx, 1, 1, 1); + + vkvg_load_font_from_path(ctx, "data/Proto-Sinaitic15.ttf", "sinaitic"); + print_boxed(ctx, "hwhy", 100, 150, 60); + + vkvg_destroy(ctx); +} |