diff options
| author | Alexander M Pickering <alex@cogarr.net> | 2025-01-09 18:11:46 -0600 |
|---|---|---|
| committer | Alexander M Pickering <alex@cogarr.net> | 2025-01-09 18:11:46 -0600 |
| commit | decb72f936060a65bff18e9cbf33642ea3a71cd0 (patch) | |
| tree | 3b07bb1bfc1e4f0e39ec4ff8e0c243cd4fab0d61 /src/ui/textbox.moon | |
| parent | 726876d42270f8974fd495be91127ea7585472ff (diff) | |
| download | ggj25-decb72f936060a65bff18e9cbf33642ea3a71cd0.tar.gz ggj25-decb72f936060a65bff18e9cbf33642ea3a71cd0.tar.bz2 ggj25-decb72f936060a65bff18e9cbf33642ea3a71cd0.zip | |
Work
Diffstat (limited to 'src/ui/textbox.moon')
| -rw-r--r-- | src/ui/textbox.moon | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/ui/textbox.moon b/src/ui/textbox.moon new file mode 100644 index 0000000..3c6151d --- /dev/null +++ b/src/ui/textbox.moon @@ -0,0 +1,119 @@ + +color = require("color") +Button = require("ui.button") + +valid_chars = "abcdefghijklmnopqrstuvwxyz" +shifted_nums = "!@#$%^&*()" +class Textbox extends Button + new: (x,y,w,h,value,placeholder) => + super(x,y,w,h,value) + if value == "" + @text.text = placeholder + @text.color = color.am_color.shadow + @cursor = am.group( + am.translate(@em,0)\append( + am.rect(0,0,@em/4,-@em,color.am_color.foreground) + )) + @cursor.hidden = true + @text\append(@cursor) + @cursor_pos = #@text.text + @update_cursor_pos! + @valid_chars = {} + @max_chars = math.huge + for i = 1, #valid_chars + char = valid_chars\sub(i,i) + @valid_chars[char] = char + @valid_chars[char\upper] = char\upper + for i = 0,9 + @valid_chars[tostring(i)] = tostring(i) + @valid_chars["kp_" .. tostring(i)] = tostring(i) + @valid_chars.kp_divide = "/" + @valid_chars.kp_multiply = "*" + @valid_chars.kp_minus = "-" + @valid_chars.kp_plus = "+" + @valid_chars.kp_period = "." + @valid_chars.space = " " + @valid_chars.minus = "-" + @valid_chars.MINUS = "_" + @valid_chars.equals = "=" + @valid_chars.EQUALS = "+" + @valid_chars.leftbracket = "[" + @valid_chars.LEFTBRACKET = "{" + @valid_chars.rightbracket = "]" + @valid_chars.RIGHTBRACKET = "}" + @valid_chars.semicolon = ";" + @valid_chars.SEMICOLON = ":" + @valid_chars.quote = "'" + @valid_chars.QUOTE = '"' + @valid_chars.backquote = "`" + @valid_chars.BACKQUOTE = "~" + @valid_chars.comma = "," + @valid_chars.COMMA = "<" + @valid_chars.period = "." + @valid_chars.PERIOD = ">" + @valid_chars.slash = "/" + @valid_chars.SLASH = "?" + @cursor + down: () => + super! + @cursor.hidden = false + @text.color = color.am_color.foreground + up: () => + super! + @cursor.hidden = true + @text.color = color.am_color.shadow + update_cursor_pos: () => + @.cursor("translate").x = @cursor_pos * 9 + fire: (e) => + print("cursor pos is", @cursor_pos) + if e.event == "mouse_down" + @down! + if @on + @on(e) + add_key = e.event == "keys_pressed" and @depressed + if add_key + t = @text.text + for key in *e.data + print("analyzing key:",key) + if key == "delete" or key == "backspace" + @cursor_pos -=1 + if @cursor_pos < 0 + @cursor_pos = 0 + t = t\sub(1,@cursor_pos) .. t\sub(@cursor_pos+2) + elseif key == "home" + @cursor_pos = 0 + elseif key == "end" + @cursor_pos = #t + elseif key == "right" + @cursor_pos += 1 + if @cursor_pos > #t + @cursor_pos = #t + elseif key == "left" + @cursor_pos -= 1 + if @cursor_pos < 0 + @cursor_pos = 0 + elseif tonumber(key) and tonumber(key) >= 0 and tonumber(key) <= 9 + kn = tonumber(key) + nd = key + if e.shift + nd = shifted_nums\sub(kn,kn) + @cursor_pos += 1 + t = t\sub(1,@cursor_pos) .. nd .. t\sub(@cursor_pos) + elseif key == "kp_enter" or key == "enter" + if @on + @on(e) + elseif key == "escape" + @up! + else + if e.shift and key\sub(1,3) ~= "kp_" + key = key\upper! + if @valid_chars[key] + @cursor_pos += 1 + t = t\sub(0,@cursor_pos) .. @valid_chars[key] .. t\sub(@cursor_pos) + if #t > @max_chars + t = t\sub(1,@max_chars) + @text.text = t + @update_cursor_pos! + add_key + +Textbox |
