--@include utils.txt --@include render_devices/render_device.txt --@include elements/root.txt --@include skins/default.txt require("utils.txt") require("render_devices/render_device.txt") require("elements/root.txt") local defaultSkin = require("skins/default.txt") GUI = class("GUI") function GUI:initialize(renderDevice, skin) checkVarClass(renderDevice, RenderDevice) self.renderDevice = renderDevice self._root = ERoot:new("root") self._root:setSize(renderDevice:getSize()) self._root:_setSkin(skin or defaultSkin) hook.add("inputPressed", "gui_inputPressed", function(key) local keyName = input.getKeyName(key) if key >= 107 and key <= 111 then local x, y = input.getCursorPos() self._root:_postEvent("MOUSE_PRESSED", x, y, key, keyName) else self._root:_postEvent("BUTTON_PRESSED", x, y, key, keyName) end end) hook.add("inputReleased", "gui_inputReleased", function(key) local keyName = input.getKeyName(key) if key >= 107 and key <= 111 then local x, y = input.getCursorPos() self._root:_postEvent("MOUSE_RELEASED", x, y, key, keyName) else self._root:_postEvent("BUTTON_RELEASED", x, y, key, keyName) end end) self._lastMouseX = 0 self._lastMouseY = 0 hook.add("think", "gui_think", function() if input.getCursorVisible then local x, y = input.getCursorPos() if x ~= self._lastMouseX or y ~= self._lastMouseY then self._lastMouseX = x self._lastMouseY = y self._root:_postEvent("MOUSE_MOVED", x, y) end end self._root:_postEvent("THINK") end) renderDevice.render = function() self._root:_postEvent("PAINT") end end function GUI:getRoot() return self._root end function GUI:add(element) this._root:addChild(element) end function GUI:setVisible(state) self._root:setVisible(state) end function GUI:isVisible() self._root:isVisible() end