Custom components
Add your custom components via druid.register
local druid = require("druid.druid") local my_component = require("my.amazing.component") local function init(self) druid.register("my_component", my_component) end
Basic custom component template looks like this:
local const = require("druid.const") local M = {} M.interest = { const.ON_INPUT } function M.init(self, ...) -- Component constructor end -- Call only if exist interest: const.ON_UPDATE function M.update(self, dt) end -- Call only if exist interest: const.ON_INPUT or const.ON_SWIPE function M.on_input(self, action_id, action) end -- Call only if exist interest: const.ON_MESSAGE function M.on_message(self, message_id, message, sender) end -- Call only if swipe was started on another component (ex. scroll) function M.on_swipe(self) end return M
Best practice on custom components
On each component recomended describe component schema in next way:
-- Component module local helper = require("druid.helper") local M = {} local SCHEME = { ROOT = "/root", ITEM = "/item", TITLE = "/title" } -- TODO: Rework self.template/self.nodes -- Make self._inner_data? { component_name, template, nodes } function M.init(self, template_name, node_table) -- If component use template, setup it: self.template = template_name -- If component was cloned with gui.clone_tree, pass his nodes self.nodes = node_table -- helper can get node from gui/template/table local root = helper.node(self, SCHEME.ROOT) -- This component can spawn another druid components: local druid = helper.get_druid(self) -- Button self on callback is self of _this_ component local button = druid:new_button(...) -- helper can return you the component style local my_style = helper.get_style(self, "component_name") end