From 27e0397e6b4e79e131c474522b28796a5bb2644a Mon Sep 17 00:00:00 2001 From: Insality Date: Thu, 26 Sep 2019 00:03:53 +0300 Subject: [PATCH] cherry-pick simple-checkbox component --- druid/base/checkbox.lua | 44 +++++++++++++++++++++++++++++++++++++++++ druid/druid.lua | 1 + 2 files changed, 45 insertions(+) create mode 100644 druid/base/checkbox.lua diff --git a/druid/base/checkbox.lua b/druid/base/checkbox.lua new file mode 100644 index 0000000..cf149ff --- /dev/null +++ b/druid/base/checkbox.lua @@ -0,0 +1,44 @@ +--- Druid checkbox component +-- @module base.checkbox + +local helper = require("druid.helper") + +local M = {} + + +local function state_animate(node, state) + local target = state and 1 or 0 + gui.animate(node, "color.w", target, gui.EASING_OUTSINE, 0.1) +end + + +function M.set_state(self, state, is_silence) + if self.state == state then + return + end + + self.state = state + state_animate(self.node, state) + + if not is_silence and self.callback then + self.callback(self.parent.parent, state) + end +end + + +-- TODO: pass self as first parameter +local function on_click(context, self) + M.set_state(self, not self.state) +end + + +function M.init(self, node, callback, click_node) + self.node = helper.get_node(node) + self.click_node = helper.get_node(click_node) + self.callback = callback + self.button = self.parent:new_button(self.click_node or self.node, on_click, self) + M.set_state(self, false, true) +end + + +return M diff --git a/druid/druid.lua b/druid/druid.lua index ad3618c..93c0100 100644 --- a/druid/druid.lua +++ b/druid/druid.lua @@ -15,6 +15,7 @@ M.comps = { progress = require("druid.base.progress"), grid = require("druid.base.grid"), scroll = require("druid.base.scroll"), + checkbox = require("druid.base.checkbox"), progress_rich = require("druid.rich.progress_rich"), }