2024-11-06 11:43:40 -06:00
|
|
|
stn := @use("../../../libraries/stn/src/lib.hb");
|
|
|
|
.{string, log} := stn;
|
|
|
|
.{Vec2} := stn.math
|
|
|
|
|
|
|
|
render := @use("../../../libraries/render/src/lib.hb");
|
|
|
|
.{Surface} := render;
|
|
|
|
.{Font} := render.text
|
|
|
|
|
2024-11-08 10:16:24 -06:00
|
|
|
UI := struct {raw: ^u8, raw_length: uint, is_dirty: bool, surface: Surface, // Each child has their WidgetType as their first byte
|
|
|
|
// children: ^^u8,
|
2024-11-06 11:43:40 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
render_ui := fn(surface: Surface, ui: UI): void {
|
|
|
|
if ui.is_dirty {
|
|
|
|
render.clear(ui.surface, render.black)
|
|
|
|
ui.is_dirty = false
|
|
|
|
}
|
|
|
|
pos := Vec2(uint).(0, 0)
|
|
|
|
render.put_surface(surface, ui.surface, pos, false)
|
|
|
|
}
|
|
|
|
|
|
|
|
sexpr_parser := fn(sexpr: ^u8): UI {
|
|
|
|
cursor := sexpr
|
|
|
|
paren_balance := 0
|
|
|
|
loop {
|
|
|
|
if *cursor == 0 {
|
|
|
|
if paren_balance != 0 {
|
|
|
|
log.error("Unbalanced Parens\0")
|
|
|
|
}
|
|
|
|
break
|
|
|
|
} else if *cursor == 40 {
|
|
|
|
log.info("Open paren\0")
|
|
|
|
paren_balance += 1
|
|
|
|
} else if *cursor == 41 {
|
|
|
|
log.info("Closed paren\0")
|
|
|
|
paren_balance -= 1
|
|
|
|
}
|
|
|
|
|
|
|
|
cursor += 1
|
|
|
|
}
|
|
|
|
|
|
|
|
length := string.length(sexpr)
|
|
|
|
|
|
|
|
ui_surface := render.new_surface(100, 100)
|
|
|
|
|
|
|
|
return UI.(sexpr, length, true, ui_surface)
|
|
|
|
}
|