1 type TextEditControl @abstract = 2 inherit Wrapper 3 4 def process_key (key : Key 5 action : KeyAction 6 mods : KeyModifiers) 7 def process_char (char : Char) 8 9 begin@ text_box 10 11 type TextBox @mut = 12 inherit TextEditControl 13 14 var offset : i32 @[mut local] = 0 15 var obs cursor_index : u32 = 0 16 var obs background = Vector3.color "C8C8C8" 17 var obs text = "" 18 val display_text @[mut local] = obs/String.new 19 var obs selection : Option<(u32, u32)> = None 20 val os_window : OsWindow @auto 21 local offset_controls = List<Control>.new 22 23 var on_enter : Option<String -> Unit> = None 24 var on_escape : Option<Unit -> Unit> = None 25 26 is_focusable = true 27 align_v = AlignV/Up 28 29 text@atom.subscribe { _ s -> 30 if not is_focused then 31 display_text.set s } |> push_token 32 33 def clear = 34 display_text.clear 35 cursor_index = 0 36