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}