code wiki / (root) / nx_text_render_test.nx

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}