summaryrefslogtreecommitdiffstatsci
path: root/samples/tests/text.cpp
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2025-06-22 12:06:15 +0200
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2026-09-04 11:03:52 +0200
commitdb328d2a861f5aedec900e44fbe1fd542b307afb (patch)
tree2997dcaad33d99b9cd79b6681ca0c679f2c34a1b /samples/tests/text.cpp
parent0199cfcb86b384e888ddf01642b63f4a32e15894 (diff)
unified samples app in c++, unit testing wip
Diffstat (limited to 'samples/tests/text.cpp')
-rw-r--r--samples/tests/text.cpp284
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);
+}