72 lines
1.6 KiB
Lua
72 lines
1.6 KiB
Lua
-- Keyboard driver
|
|
|
|
Modifiers = {'lctrl', 'rctrl', 'lalt', 'ralt', 'lshift', 'rshift', 'lgui', 'rgui'}
|
|
|
|
function App.keypressed(key, scancode, isrepeat)
|
|
if array.find(Modifiers, key) then
|
|
-- do nothing when the modifier is pressed
|
|
end
|
|
-- include the modifier(s) when the non-modifer is pressed
|
|
App.keychord_pressed(App.combine_modifiers(key))
|
|
end
|
|
|
|
function App.combine_modifiers(key)
|
|
local result = ''
|
|
local down = love.keyboard.isDown
|
|
if down('lctrl') or down('rctrl') then
|
|
result = result..'C-'
|
|
end
|
|
if down('lalt') or down('ralt') then
|
|
result = result..'M-'
|
|
end
|
|
if down('lshift') or down('rshift') then
|
|
result = result..'S-' -- don't try to use this with letters/digits
|
|
end
|
|
if down('lgui') or down('rgui') then
|
|
result = result..'s-'
|
|
end
|
|
result = result..key
|
|
return result
|
|
end
|
|
|
|
function App.modifier_down()
|
|
return array.any(Modifiers, love.keyboard.isDown)
|
|
end
|
|
|
|
function App.ctrl_down()
|
|
return love.keyboard.isDown('lctrl') or love.keyboard.isDown('rctrl')
|
|
end
|
|
|
|
function App.alt_down()
|
|
return love.keyboard.isDown('lalt') or love.keyboard.isDown('ralt')
|
|
end
|
|
|
|
function App.shift_down()
|
|
return love.keyboard.isDown('lshift') or love.keyboard.isDown('rshift')
|
|
end
|
|
|
|
function App.gui_down()
|
|
return love.keyboard.isDown('lgui') or love.keyboard.isDown('rgui')
|
|
end
|
|
|
|
array = {}
|
|
|
|
function array.find(arr, elem)
|
|
for i,x in ipairs(arr) do
|
|
if x == elem then
|
|
return i
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function array.any(arr, f)
|
|
for i,x in ipairs(arr) do
|
|
local result = f(x)
|
|
if result then
|
|
return result
|
|
end
|
|
end
|
|
return false
|
|
end
|