code wiki / (root) / nx_browser_demo_multiline.nx

nx_browser_demo_multiline.nx source

↩ module page · 53 lines · 1821 B

1// nx_browser_demo_multiline.nx -- visible demo proving newline-aware 2// text rendering. Paints "HELLO\nWORLD" via the extended 3// nx_paint_text (which now interprets byte 10 / '\n' as a line 4// break, resetting x to base and advancing y by the cell height). 5 6import "nx_syscalls.nx" 7import "nx_css_color_decode.nx" 8import "nx_paint_solid_rect.nx" 9import "nx_paint_text.nx" 10import "nx_paint_fb_ascii_dump.nx" 11const K_MAGIC_1024: i64 = 1024 12 13func _put_byte(buf: *u8, i: i64, v: i64) -> i64 { 14 buf[i] = v as u8 15 return 0 16} 17 18func main() -> i64 { 19 let w: i64 = 36 20 let h: i64 = 18 21 let pixels: *u8 = (sys_mmap((w * h * 4) as nx_size)) as *u8 22 let fb: *Framebuffer = (sys_mmap(NX_FRAMEBUFFER_BYTES as nx_size)) as *Framebuffer 23 nx_framebuffer_init(fb, pixels, w, h) 24 nx_framebuffer_clear(fb) 25 26 let white: *CssColor = (sys_mmap(NX_CSS_COLOR_BYTES as nx_size)) as *CssColor 27 white.r = 255 28 white.g = 255 29 white.b = 255 30 white.a = 255 31 32 // "HELLO\nWORLD" (11 bytes) 33 let text: *u8 = (sys_mmap(16)) as *u8 34 _put_byte(text, 0, 72) // 'H' 35 _put_byte(text, 1, 69) // 'E' 36 _put_byte(text, 2, 76) // 'L' 37 _put_byte(text, 3, 76) // 'L' 38 _put_byte(text, 4, 79) // 'O' 39 _put_byte(text, 5, 10) // '\n' 40 _put_byte(text, 6, 87) // 'W' 41 _put_byte(text, 7, 79) // 'O' 42 _put_byte(text, 8, 82) // 'R' 43 _put_byte(text, 9, 76) // 'L' 44 _put_byte(text, 10, 68) // 'D' 45 46 nx_paint_text(fb, 2, 2, text, 11, white) 47 48 let out_buf: *u8 = (sys_mmap(K_MAGIC_1024)) as *u8 49 let n: i64 = nx_paint_fb_ascii_dump(fb, out_buf, K_MAGIC_1024) 50 if n < 0 { return 1 } 51 sys_write(1, out_buf, n) 52 return 0 53}