1    type HistoryItem =
2        | Add position : TextPos
3        | AddStr from : TextPos
4                 to : TextPos
5    
6        | Remove position : TextPos
7                 cursor_pos : TextPos
8                 c : Char
9    
10       | RemoveStr position : TextPos
11                   cursor_pos : TextPos
12                   s : String
13   
14   begin@ multiline_text_box
15   
16   type MultilineTextBox @mut =
17       inherit TextEditControl
18   
19       let get_font : String -> Font @auto
20       local mut offset : i32 = 0
21       local offset_controls = List<Control>.new
22   
23       var obs is_changed = false
24       var obs text = ""
25       var obs background = Vector3.color "FFFFFF"
26       var obs show_line_numbers = false
27       var is_readonly = false
28       val display_text = Text.new
29       val os_window : OsWindow @auto
30       val history = List<HistoryItem>.new
31       val font = get_font "jetbrains_mono/19"
32       var obs cursor_pos = TextPos.new
33       var obs selection : Option<(TextPos, TextPos)> = None
34       var update_colors : Option<Text * u32 * u32 -> Unit> = None
35   
36       is_focusable = true
37