-
Notifications
You must be signed in to change notification settings - Fork 7
/
textBox.lua
45 lines (44 loc) · 1.73 KB
/
textBox.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
local PrimeUI = require "util" -- DO NOT COPY THIS LINE
local expect = require "cc.expect".expect -- DO NOT COPY THIS LINE
-- Start copying below this line. --
--- Creates a text box that wraps text and can have its text modified later.
---@param win window The parent window of the text box
---@param x number The X position of the box
---@param y number The Y position of the box
---@param width number The width of the box
---@param height number The height of the box
---@param text string The initial text to draw
---@param fgColor color|nil The color of the text (defaults to white)
---@param bgColor color|nil The color of the background (defaults to black)
---@return function redraw A function to redraw the window with new contents
function PrimeUI.textBox(win, x, y, width, height, text, fgColor, bgColor)
expect(1, win, "table")
expect(2, x, "number")
expect(3, y, "number")
expect(4, width, "number")
expect(5, height, "number")
expect(6, text, "string")
fgColor = expect(7, fgColor, "number", "nil") or colors.white
bgColor = expect(8, bgColor, "number", "nil") or colors.black
-- Create the box window.
local box = window.create(win, x, y, width, height)
-- Override box.getSize to make print not scroll.
function box.getSize()
return width, math.huge
end
-- Define a function to redraw with.
local function redraw(_text)
expect(1, _text, "string")
-- Set window parameters.
box.setBackgroundColor(bgColor)
box.setTextColor(fgColor)
box.clear()
box.setCursorPos(1, 1)
-- Redirect and draw with `print`.
local old = term.redirect(box)
print(_text)
term.redirect(old)
end
redraw(text)
return redraw
end