diff options
Diffstat (limited to 'src/syslua/lx/gui.lua')
-rw-r--r-- | src/syslua/lx/gui.lua | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/syslua/lx/gui.lua b/src/syslua/lx/gui.lua new file mode 100644 index 0000000..beb382e --- /dev/null +++ b/src/syslua/lx/gui.lua @@ -0,0 +1,76 @@ +local sys = require 'lx.sys' +local sysdef= require 'lx.sysdef' +local ioctl = require 'lx.ioctl' +local draw = require 'lx.draw' + +local mainloop = require 'lx.mainloop' + +local gui = { + -- Keyboard info + -- TODO + -- Mouse info + mouse_x = 0, + mouse_y = 0, + mouse_lbtn = false, + mouse_rbtn = false, + mouse_midbtn = false, +} + +function gui.open() + if sys.stat('io:/display/vesa') and sys.stat('io:/input/pckbd') and sys.stat('io:/input/pcmouse') then + gui.open_io() + elseif sys.stat_open(sysdef.STD_FD_GIP) then + gui.open_gip() + else + error("Could not open GUI!") + end +end + +function gui.open_io() + -- Open display + gui.vesa_fd = sys.open("io:/display/vesa", sysdef.FM_IOCTL | sysdef.FM_READ | sysdef.FM_WRITE | sysdef.FM_MMAP) + assert(gui.vesa_fd ~= 0) + + gui.vesa_info = ioctl.fb_get_info(gui.vesa_fd) + gui.surface = draw.surface_from_fd(gui.vesa_fd, gui.vesa_info) + + -- Open keyboard + gui.pckbd_fd = sys.open("io:/input/pckbd", sysdef.FM_READ) + assert(gui.pckbd_fd ~= 0) + + gui.pckbd_mainloop_fd = mainloop.add_fd(gui.pckbd_fd, function() error('pckbd fd error') end) + local function pckbd_handler(ev) + local scancode, ty = string.unpack("HH", ev) + gui.on_keyboard(scancode, ty) + + gui.pckbd_mainloop_fd:expect(4, pckbd_handler) + end + gui.pckbd_mainloop_fd:expect(4, pckbd_handler) + + -- Open mouse + gui.pcmouse_fd = sys.open("io:/input/pcmouse", sysdef.FM_READ) + assert(gui.pcmouse_fd ~= 0) + + gui.pcmouse_mainloop_fd = mainloop.add_fd(gui.pcmouse_fd, function() error("pcmouse fd error") end) + local function pcmouse_handler(ev) + local dx, dy, dw, lb, rb, mb = string.unpack("hhbBBB", ev) + gui.on_mouse(dx, dy, dw, lb, rb, mb) + + gui.pcmouse_mainloop_fd:expect(8, pcmouse_handler) + end + gui.pcmouse_mainloop_fd:expect(8, pcmouse_handler) +end + +function gui.open_gip() + -- TODO +end + +function gui.on_keyboard(scancode, ty) + -- TODO +end + +function gui.on_mouse(dx, dy, dw, lb, rb, mb) + -- TODO +end + +return gui |