Skip to content

Commit 038e9ee

Browse files
committed
Added key repeat to TextField
1 parent a113a97 commit 038e9ee

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

penguingui/TextField.lua

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ TextField.cursorRate = 1
2828
--- The filter pattern to restrict this TextField's text to, or nil if none.
2929
TextField.filter = nil
3030

31+
--- Delay before a key starts repeating.
32+
TextField.repeatDelay = 0.5
33+
--- Interval between key repeats.
34+
TextField.repeatInterval = 0.05
35+
3136
--- Constructor
3237
-- @section
3338

@@ -53,12 +58,25 @@ function TextField:_init(x, y, width, height, defaultText)
5358
self.textOffset = 0
5459
self.textClip = nil
5560
self.mouseOver = false
61+
self.keyTimes = {}
5662
end
5763

5864
--- @section end
5965

6066
function TextField:update(dt)
6167
if self.hasFocus then
68+
-- Key repeat
69+
local keyTimes = self.keyTimes
70+
for key,dur in pairs(keyTimes) do
71+
local time = dur + dt
72+
keyTimes[key] = time
73+
if time > self.repeatDelay + self.repeatInterval then
74+
self:keyEvent(key, true)
75+
keyTimes[key] = self.repeatDelay
76+
end
77+
end
78+
79+
-- Cursor blink
6280
local timer = self.cursorTimer
6381
local rate = self.cursorRate
6482
timer = timer - dt
@@ -206,6 +224,13 @@ function TextField:clickEvent(position, button, pressed)
206224
end
207225

208226
function TextField:keyEvent(keyCode, pressed)
227+
-- Update key timings
228+
if pressed then
229+
self.keyTimes[keyCode] = self.keyTimes[keyCode] or 0
230+
else
231+
self.keyTimes[keyCode] = nil
232+
end
233+
209234
-- Ignore key releases and any keys pressed while ctrl or alt is held
210235
local keyState = GUI.keyState
211236
if not pressed

0 commit comments

Comments
 (0)