mirror of
https://github.com/ctruLua/ctruLua.git
synced 2025-10-27 16:39:29 +00:00
106 lines
No EOL
3.4 KiB
Lua
106 lines
No EOL
3.4 KiB
Lua
local hid = require("ctr.hid")
|
|
local gfx = require("ctr.gfx")
|
|
|
|
-- Options
|
|
local keyWidth, keyHeight = 25, 25
|
|
local layout = {
|
|
["default"] = {
|
|
{ "&", "é", "\"", "'", "(", "-", "è", "_", "ç", "à", ")", "=", "Back" },
|
|
{ "a", "z", "e", "r", "t", "y", "u", "i", "o", "p", "^", "$", "Enter" },
|
|
{ "q", "s", "d", "f", "g", "h", "j", "k", "l", "m", "ù", "*", "Enter" },
|
|
{ "Shift", "<", "w", "x", "c", "v", "b", "n", ",", ";", ":", "!", "Tab" },
|
|
{ "CpLck", ">", "+", "/", " ", " ", " ", " ", " ", "{", "}", ".", "AltGr" }
|
|
},
|
|
["Shift"] = {
|
|
{ "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "°", "+", "Back" },
|
|
{ "A", "Z", "E", "R", "T", "Y", "U", "I", "O", "P", "¨", "£", "Enter" },
|
|
{ "Q", "S", "D", "F", "G", "H", "J", "K", "L", "M", "%", "µ", "Enter" },
|
|
{ "Shift", ">", "W", "X", "C", "V", "B", "N", "?", ".", "/", "§", "Tab" },
|
|
{ "CpLck", "~", "#", "[", " ", " ", " ", " ", " ", "]", "|", "@", "AltGr" }
|
|
},
|
|
["AltGr"] = {
|
|
{ "²", "~", "#", "{", "[", "|", "`", "\\", "^", "@", "]", "}", "Back" },
|
|
{ "a", "z", "€", "r", "t", "y", "u", "i", "o", "p", "", "¤", "Enter" },
|
|
{ "q", "s", "d", "f", "g", "h", "j", "k", "l", "m", "", "", "Enter" },
|
|
{ "Shift", "", "w", "x", "c", "v", "b", "n", "", "", "", "", "Tab" },
|
|
{ "CpLck", "", "", "", " ", " ", " ", " ", " ", "", "", "", "AltGr" }
|
|
},
|
|
}
|
|
local alias = {
|
|
["Tab"] = "\t",
|
|
["Enter"] = "\n",
|
|
["Back"] = "BACK"
|
|
}
|
|
local sticky = {
|
|
["CpLck"] = "Shift"
|
|
}
|
|
local keys = {
|
|
["l"] = "Shift",
|
|
["r"] = "Shift"
|
|
}
|
|
|
|
-- Variables
|
|
local currentModifier = { "default", "sticky" }
|
|
local buffer = ""
|
|
|
|
return {
|
|
draw = function(x, y)
|
|
local hidKeys = hid.keys()
|
|
|
|
local xTouch, yTouch
|
|
if hidKeys.down.touch then xTouch, yTouch = hid.touch() end
|
|
|
|
for key, modifier in pairs(keys) do
|
|
if hidKeys.down[key] then
|
|
currentModifier = { modifier, "key" }
|
|
elseif hidKeys.up[key] and currentModifier[2] == "key" and currentModifier[1] == modifier then
|
|
currentModifier = { "default", "sticky" }
|
|
end
|
|
end
|
|
|
|
for row, rowKeys in pairs(layout[currentModifier[1]]) do
|
|
for column, key in pairs(rowKeys) do
|
|
local xKey, yKey = x + (column-1)*(keyWidth-1), y + (row-1)*(keyHeight-1)
|
|
|
|
gfx.rectangle(xKey, yKey, keyWidth, keyHeight, 0, 0xFFFFFFFF)
|
|
gfx.rectangle(xKey + 1, yKey + 1, keyWidth - 2, keyHeight - 2, 0, 0x000000FF)
|
|
gfx.text(xKey + 2, yKey + 2, key)
|
|
|
|
if xTouch then
|
|
if xTouch > xKey and xTouch < xKey + keyWidth then
|
|
if yTouch > yKey and yTouch < yKey + keyHeight then
|
|
gfx.rectangle(xKey, yKey, keyWidth, keyHeight, 0, 0xFFFFFFDD)
|
|
|
|
local k = alias[key] or key
|
|
if sticky[k] and layout[sticky[k]] then
|
|
if currentModifier[1] == sticky[k] and currentModifier[2] == "sticky" then
|
|
currentModifier = { "default", "sticky" }
|
|
else
|
|
currentModifier = { sticky[k], "sticky" }
|
|
end
|
|
elseif layout[k] then
|
|
if currentModifier[1] == k and currentModifier[2] == "normal" then
|
|
currentModifier = { "default", "sticky" }
|
|
else
|
|
currentModifier = { k, "normal" }
|
|
end
|
|
else
|
|
buffer = buffer .. k
|
|
if currentModifier[1] ~= "default" and currentModifier[2] == "normal" then
|
|
currentModifier = { "default", "sticky" }
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end,
|
|
|
|
read = function()
|
|
local ret = buffer
|
|
buffer = ""
|
|
|
|
return ret ~= "" and ret or nil
|
|
end
|
|
} |