nx_text_render_test.nx source
↩ module page · 58 lines · 2215 B
1// nx_text_render_test.nx -- smoke for nx_text_render.
2
3import "nx_syscalls.nx"
4import "nx_fb_1bpp.nx"
5import "nx_font_1bpp.nx"
6import "nx_text_render.nx"
7
8func main() -> i64 {
9 // 3-char 'A'/'B'/'C' font (same as font test fixture)
10 let data: *u8 = (sys_mmap(16)) as *u8
11 data[0] = 0x1E as u8; data[1] = 0x05 as u8; data[2] = 0x1E as u8 // A
12 data[3] = 0x1F as u8; data[4] = 0x15 as u8; data[5] = 0x0A as u8 // B
13 data[6] = 0x0E as u8; data[7] = 0x11 as u8; data[8] = 0x11 as u8 // C
14 let font: *NxFont = nx_font_new(data, 3, 5, 3, 65)
15
16 let fb: *NxFb1bpp = nx_fb_1bpp_new(32, 8)
17 nx_fb_1bpp_clear(fb)
18 if nx_fb_1bpp_count_on(fb) != 0 { return 1 }
19
20 // Render 'A' at (0,0). 'A' has 9 ON pixels (count the X's in pattern)
21 let adv_a: nx_size = nx_text_render_char(fb, font, 0, 0, 65)
22 if adv_a != 3 { return 2 }
23 let on_after_a: nx_int = nx_fb_1bpp_count_on(fb)
24 if on_after_a <= 0 { return 3 }
25
26 // Unknown char -> advances by glyph_width but draws nothing extra
27 let before: nx_int = nx_fb_1bpp_count_on(fb)
28 let adv_z: nx_size = nx_text_render_char(fb, font, 5, 0, 90) // 'Z'
29 if adv_z != 3 { return 4 }
30 let after: nx_int = nx_fb_1bpp_count_on(fb)
31 if after != before { return 5 } // unknown char doesn't draw
32
33 // Render string "ABC" -- 3 chars * 3 cols = 9 advance
34 nx_fb_1bpp_clear(fb)
35 let abc: *u8 = (sys_mmap(8)) as *u8
36 abc[0] = 65 as u8
37 abc[1] = 66 as u8
38 abc[2] = 67 as u8
39 let adv_str: nx_size = nx_text_render_string(fb, font, 0, 0, abc, 3)
40 if adv_str != 9 { return 6 }
41 // Should have lit some pixels
42 if nx_fb_1bpp_count_on(fb) <= 0 { return 7 }
43
44 // String width helper
45 if nx_text_string_width(font, 5) != 15 { return 8 }
46 if nx_text_string_width(font, 0) != 0 { return 9 }
47
48 // render_int -- "42" at start
49 nx_fb_1bpp_clear(fb)
50 let buf: *u8 = (sys_mmap(8)) as *u8
51 // Need digits in font for this. Skip — use chars in our range only.
52 // We can verify the helper doesn't crash on empty string:
53 let empty: *u8 = (sys_mmap(2)) as *u8
54 let adv_empty: nx_size = nx_text_render_string(fb, font, 0, 0, empty, 0)
55 if adv_empty != 0 { return 10 }
56
57 return 0
58}