Update examples to widgets instead components

This commit is contained in:
Insality
2025-03-27 00:19:32 +02:00
parent dee77ab313
commit 7640e207a4
47 changed files with 183 additions and 422 deletions

View File

@@ -92,7 +92,7 @@ function M:add_example(examples, druid_example)
local instance
if example_data.widget_class then
instance = druid_example.druid:new_widget(example_data.widget_class, example_data.template)
else
elseif example_data.component_class then -- Keep for backward compatibility
instance = druid_example.druid:new(example_data.component_class, example_data.template)
end
---@cast instance druid.component|druid.widget

View File

@@ -1,14 +1,7 @@
local component = require("druid.component")
---@class examples.basic_back_handler: druid.widget
local M = {}
---@class examples.basic_back_handler: druid.component
---@field druid druid.instance
local M = component.create("basic_back_handler")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
function M:init()
self.druid:new_back_handler(self.on_back)
end

View File

@@ -1,17 +1,9 @@
local component = require("druid.component")
---@class examples.basic_blocker: druid.component
---@field druid druid.instance
---@class examples.basic_blocker: druid.widget
---@field root node
---@field blocker druid.blocker
local M = component.create("basic_blocker")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.root = self:get_node("root")
self.button_root = self.druid:new_button(self.root, self.on_root_click)
@@ -20,15 +12,12 @@ function M:init(template, nodes)
self.button = self.druid:new_button("button/root", self.on_button_click)
end
function M:on_root_click()
print("Root click")
end
function M:on_button_click()
print("Button click")
end
return M

View File

@@ -1,19 +1,11 @@
local component = require("druid.component")
---@class examples.basic_button: druid.component
---@field druid druid.instance
---@class examples.basic_button: druid.widget
---@field button druid.button
local M = component.create("basic_button")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.button = self.druid:new_button("button/root", function()
print("Button pressed")
end)
end
return M

View File

@@ -1,15 +1,8 @@
local component = require("druid.component")
---@class examples.basic_button_double_click: druid.component
---@field druid druid.instance
---@class examples.basic_button_double_click: druid.widget
---@field button druid.button
local M = component.create("basic_button_double_click")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.button = self.druid:new_button("button/root", function()
print("Click")
end)
@@ -19,5 +12,4 @@ function M:init(template, nodes)
end)
end
return M

View File

@@ -1,19 +1,13 @@
local component = require("druid.component")
local panthera = require("panthera.panthera")
local animation = require("example.examples.basic.button.basic_button_hold_panthera")
---@class examples.basic_button_hold: druid.component
---@field druid druid.instance
---@class examples.basic_button_hold: druid.widget
---@field button druid.button
local M = component.create("basic_button_hold")
local M = {}
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
self.animation = panthera.create_gui(animation, self:get_template(), nodes)
function M:init()
self.animation = panthera.create_gui(animation, self:get_template(), self:get_nodes())
self.button = self.druid:new_button("button", function()
print("Click")
@@ -45,5 +39,4 @@ function M:init(template, nodes)
end)
end
return M

View File

@@ -1,17 +1,12 @@
local component = require("druid.component")
local event = require("event.event")
---@class examples.checkbox: druid.component
---@field druid druid.instance
---@class examples.checkbox: druid.widget
---@field button druid.button
local M = component.create("checkbox")
---@field is_enabled boolean
local M = {}
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
function M:init()
self.button = self.druid:new_button("root", self.on_checkbox_click) -- Button to handle checkbox
self.icon = self:get_node("icon") -- Checkbox icon to hide/show
self.selected = self:get_node("selected") -- Selected effect to show when checkbox is changed

View File

@@ -1,20 +1,16 @@
local event = require("event.event")
local component = require("druid.component")
-- Require checkbox component from checkbox example
local checkbox = require("example.examples.basic.checkbox.checkbox")
---@class examples.checkbox_group: druid.component
---@field druid druid.instance
---@field button druid.button
local M = component.create("checkbox_group")
---@class examples.checkbox_group: druid.widget
---@field checkbox_1 examples.checkbox
---@field checkbox_2 examples.checkbox
---@field checkbox_3 examples.checkbox
local M = {}
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
function M:init()
self.checkbox_1 = self.druid:new(checkbox, "checkbox_1")
self.checkbox_2 = self.druid:new(checkbox, "checkbox_2")
self.checkbox_3 = self.druid:new(checkbox, "checkbox_3")

View File

@@ -1,15 +1,7 @@
local component = require("druid.component")
---@class examples.drag: druid.component
---@field druid druid.instance
local M = component.create("drag")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
---@class examples.drag: druid.widget
local M = {}
function M:init()
-- Init drag and move the drag node on drag callback
self.drag = self.druid:new_drag("drag/root", function(_, dx, dy)
local position_x = gui.get(self.drag.node, "position.x")
@@ -25,5 +17,4 @@ function M:init(template, nodes)
end)
end
return M

View File

@@ -1,14 +1,7 @@
local component = require("druid.component")
---@class examples.drag_to_node: druid.widget
local M = {}
---@class examples.drag_to_node: druid.component
---@field druid druid.instance
local M = component.create("drag_to_node")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
function M:init()
self.zone = self:get_node("zone")
self.counter = 0
self.text_counter = self:get_node("text_counter")

View File

@@ -11,7 +11,7 @@ function M.get_examples()
template = "basic_button",
root = "basic_button/root",
code_url = "example/examples/basic/button/basic_button.lua",
component_class = require("example.examples.basic.button.basic_button"),
widget_class = require("example.examples.basic.button.basic_button"),
properties_control = function(instance, properties_panel)
---@cast instance examples.basic_button
@@ -33,7 +33,7 @@ function M.get_examples()
template = "basic_button_double_click",
root = "basic_button_double_click/root",
code_url = "example/examples/basic/button/basic_button_double_click.lua",
component_class = require("example.examples.basic.button.basic_button_double_click"),
widget_class = require("example.examples.basic.button.basic_button_double_click"),
on_create = function(instance, output_log)
---@cast instance examples.basic_button_double_click
instance.button.on_click:subscribe(function()
@@ -50,7 +50,7 @@ function M.get_examples()
template = "basic_button_hold",
root = "basic_button_hold/root",
code_url = "example/examples/basic/button/basic_button_hold.lua",
component_class = require("example.examples.basic.button.basic_button_hold"),
widget_class = require("example.examples.basic.button.basic_button_hold"),
on_create = function(instance, output_log)
---@cast instance examples.basic_button_hold
instance.button.on_click:subscribe(function()
@@ -67,7 +67,7 @@ function M.get_examples()
template = "basic_text",
root = "basic_text/root",
code_url = "example/examples/basic/text/basic_text.lua",
component_class = require("example.examples.basic.text.basic_text"),
widget_class = require("example.examples.basic.text.basic_text"),
properties_control = function(instance, properties_panel)
---@cast instance examples.basic_text
@@ -125,7 +125,7 @@ function M.get_examples()
template = "multiline_text",
root = "multiline_text/root",
code_url = "example/examples/basic/text/multiline_text.lua",
component_class = require("example.examples.basic.text.multiline_text"),
widget_class = require("example.examples.basic.text.multiline_text"),
properties_control = function(instance, properties_panel)
---@cast instance examples.multiline_text
@@ -182,7 +182,7 @@ function M.get_examples()
template = "hover",
root = "hover/root",
code_url = "example/examples/basic/hover/hover.lua",
component_class = require("example.examples.basic.hover.hover"),
widget_class = require("example.examples.basic.hover.hover"),
},
{
name_id = "ui_example_basic_drag",
@@ -190,7 +190,7 @@ function M.get_examples()
template = "drag",
root = "drag/root",
code_url = "example/examples/basic/drag/drag.lua",
component_class = require("example.examples.basic.drag.drag"),
widget_class = require("example.examples.basic.drag.drag"),
},
{
name_id = "ui_example_basic_drag_to_node",
@@ -198,7 +198,7 @@ function M.get_examples()
template = "drag_to_node",
root = "drag_to_node/root",
code_url = "example/examples/basic/drag/drag_to_node.lua",
component_class = require("example.examples.basic.drag.drag_to_node"),
widget_class = require("example.examples.basic.drag.drag_to_node"),
},
{
name_id = "ui_example_basic_slider",
@@ -206,7 +206,7 @@ function M.get_examples()
template = "basic_slider",
root = "basic_slider/root",
code_url = "example/examples/basic/slider/basic_slider.lua",
component_class = require("example.examples.basic.slider.basic_slider"),
widget_class = require("example.examples.basic.slider.basic_slider"),
on_create = function(instance, output_log)
---@cast instance examples.basic_slider
instance.slider.on_change_value:subscribe(function(_, value)
@@ -221,7 +221,7 @@ function M.get_examples()
template = "basic_slider_vertical",
root = "basic_slider_vertical/root",
code_url = "example/examples/basic/slider/basic_slider_vertical.lua",
component_class = require("example.examples.basic.slider.basic_slider_vertical"),
widget_class = require("example.examples.basic.slider.basic_slider_vertical"),
on_create = function(instance, output_log)
---@cast instance examples.basic_slider_vertical
instance.slider.on_change_value:subscribe(function(_, value)
@@ -236,7 +236,7 @@ function M.get_examples()
template = "basic_slider_stepped",
root = "basic_slider_stepped/root",
code_url = "example/examples/basic/slider/basic_slider_stepped.lua",
component_class = require("example.examples.basic.slider.basic_slider_stepped"),
widget_class = require("example.examples.basic.slider.basic_slider_stepped"),
on_create = function(instance, output_log)
---@cast instance examples.basic_slider_stepped
instance.slider.on_change_value:subscribe(function(_, value)
@@ -251,7 +251,7 @@ function M.get_examples()
template = "basic_progress_bar",
root = "basic_progress_bar/root",
code_url = "example/examples/basic/progress_bar/basic_progress_bar.lua",
component_class = require("example.examples.basic.progress_bar.basic_progress_bar"),
widget_class = require("example.examples.basic.progress_bar.basic_progress_bar"),
properties_control = function(instance, properties_panel)
---@cast instance examples.basic_progress_bar
properties_panel:add_slider("ui_value", 1, function(value)
@@ -265,7 +265,7 @@ function M.get_examples()
template = "basic_progress_bar_slice9",
root = "basic_progress_bar_slice9/root",
code_url = "example/examples/basic/progress_bar/basic_progress_bar_slice9.lua",
component_class = require("example.examples.basic.progress_bar.basic_progress_bar_slice9"),
widget_class = require("example.examples.basic.progress_bar.basic_progress_bar_slice9"),
properties_control = function(instance, properties_panel)
---@cast instance examples.basic_progress_bar_slice9
properties_panel:add_slider("ui_value", 1, function(value)
@@ -279,7 +279,7 @@ function M.get_examples()
template = "basic_blocker",
root = "basic_blocker/root",
code_url = "example/examples/basic/blocker/basic_blocker.lua",
component_class = require("example.examples.basic.blocker.basic_blocker"),
widget_class = require("example.examples.basic.blocker.basic_blocker"),
on_create = function(instance, output_log)
---@cast instance examples.basic_blocker
instance.button_root.on_click:subscribe(function()
@@ -296,7 +296,7 @@ function M.get_examples()
template = "basic_back_handler",
root = "basic_back_handler/root",
code_url = "example/examples/basic/back_handler/basic_back_handler.lua",
component_class = require("example.examples.basic.back_handler.basic_back_handler"),
widget_class = require("example.examples.basic.back_handler.basic_back_handler"),
},
{
name_id = "ui_example_basic_timer",
@@ -304,7 +304,7 @@ function M.get_examples()
template = "basic_timer",
root = "basic_timer/root",
code_url = "example/examples/basic/timer/basic_timer.lua",
component_class = require("example.examples.basic.timer.basic_timer"),
widget_class = require("example.examples.basic.timer.basic_timer"),
on_create = function(instance, output_log)
---@cast instance examples.basic_timer
instance.on_cycle_end:subscribe(function()
@@ -318,7 +318,7 @@ function M.get_examples()
template = "basic_hotkey",
root = "basic_hotkey/root",
code_url = "example/examples/basic/hotkey/basic_hotkey.lua",
component_class = require("example.examples.basic.hotkey.basic_hotkey"),
widget_class = require("example.examples.basic.hotkey.basic_hotkey"),
on_create = function(instance, output_log)
---@cast instance examples.basic_hotkey
instance.hotkey.on_hotkey_released:subscribe(function()
@@ -332,7 +332,7 @@ function M.get_examples()
template = "scroll",
root = "scroll/root",
code_url = "example/examples/basic/scroll/scroll.lua",
component_class = require("example.examples.basic.scroll.scroll"),
widget_class = require("example.examples.basic.scroll.scroll"),
on_create = function(instance, output_log)
---@cast instance examples.scroll
instance.button_tutorial.on_click:subscribe(function()
@@ -404,7 +404,7 @@ function M.get_examples()
template = "scroll_slider",
root = "scroll_slider/root",
code_url = "example/examples/basic/scroll_slider/scroll_slider.lua",
component_class = require("example.examples.basic.scroll_slider.scroll_slider"),
widget_class = require("example.examples.basic.scroll_slider.scroll_slider"),
get_debug_info = function(instance)
---@cast instance examples.scroll_slider
local info = ""
@@ -424,7 +424,7 @@ function M.get_examples()
template = "grid",
root = "grid/root",
code_url = "example/examples/basic/grid/grid.lua",
component_class = require("example.examples.basic.grid.grid"),
widget_class = require("example.examples.basic.grid.grid"),
properties_control = function(instance, properties_panel)
---@cast instance examples.grid
@@ -512,7 +512,7 @@ function M.get_examples()
template = "scroll_bind_grid",
root = "scroll_bind_grid/root",
code_url = "example/examples/basic/scroll_bind_grid/scroll_bind_grid.lua",
component_class = require("example.examples.basic.scroll_bind_grid.scroll_bind_grid"),
widget_class = require("example.examples.basic.scroll_bind_grid.scroll_bind_grid"),
properties_control = function(instance, properties_panel)
---@cast instance examples.scroll_bind_grid
@@ -565,7 +565,7 @@ function M.get_examples()
template = "scroll_bind_grid_horizontal",
root = "scroll_bind_grid_horizontal/root",
code_url = "example/examples/basic/scroll_bind_grid/scroll_bind_grid_horizontal.lua",
component_class = require("example.examples.basic.scroll_bind_grid.scroll_bind_grid_horizontal"),
widget_class = require("example.examples.basic.scroll_bind_grid.scroll_bind_grid_horizontal"),
properties_control = function(instance, properties_panel)
---@cast instance examples.scroll_bind_grid_horizontal
@@ -619,7 +619,7 @@ function M.get_examples()
template = "scroll_bind_grid_points",
root = "scroll_bind_grid_points/root",
code_url = "example/examples/basic/scroll_bind_grid/scroll_bind_grid_points.lua",
component_class = require("example.examples.basic.scroll_bind_grid.scroll_bind_grid_points"),
widget_class = require("example.examples.basic.scroll_bind_grid.scroll_bind_grid_points"),
properties_control = function(instance, properties_panel)
---@cast instance examples.scroll_bind_grid_points
@@ -672,7 +672,7 @@ function M.get_examples()
template = "basic_input",
root = "basic_input/root",
code_url = "example/examples/basic/input/basic_input.lua",
component_class = require("example.examples.basic.input.basic_input"),
widget_class = require("example.examples.basic.input.basic_input"),
on_create = function(instance, output_log)
---@cast instance examples.basic_input
instance.input.on_input_select:subscribe(function()
@@ -695,7 +695,7 @@ function M.get_examples()
template = "input_password",
root = "input_password/root",
code_url = "example/examples/basic/input/input_password.lua",
component_class = require("example.examples.basic.input.input_password"),
widget_class = require("example.examples.basic.input.input_password"),
on_create = function(instance, output_log)
---@cast instance examples.input_password
instance.input.on_input_unselect:subscribe(function(_, text)
@@ -709,7 +709,7 @@ function M.get_examples()
template = "basic_rich_input",
root = "basic_rich_input/root",
code_url = "example/examples/basic/input/rich_input.lua",
component_class = require("example.examples.basic.input.rich_input"),
widget_class = require("example.examples.basic.input.rich_input"),
on_create = function(instance, output_log)
---@cast instance examples.rich_input
instance.rich_input.input.on_input_unselect:subscribe(function(_, text)
@@ -726,7 +726,7 @@ function M.get_examples()
template = "basic_rich_text",
root = "basic_rich_text/root",
code_url = "example/examples/basic/rich_text/basic_rich_text.lua",
component_class = require("example.examples.basic.rich_text.basic_rich_text"),
widget_class = require("example.examples.basic.rich_text.basic_rich_text"),
},
{
name_id = "ui_example_rich_text_tags",
@@ -734,7 +734,7 @@ function M.get_examples()
template = "rich_text_tags",
root = "rich_text_tags/root",
code_url = "example/examples/basic/rich_text/rich_text_tags.lua",
component_class = require("example.examples.basic.rich_text.rich_text_tags"),
widget_class = require("example.examples.basic.rich_text.rich_text_tags"),
properties_control = function(instance, properties_panel)
local pivot_index = 1
local pivot_list = {
@@ -803,7 +803,7 @@ function M.get_examples()
template = "basic_swipe",
root = "basic_swipe/root",
code_url = "example/examples/basic/swipe/basic_swipe.lua",
component_class = require("example.examples.basic.swipe.basic_swipe"),
widget_class = require("example.examples.basic.swipe.basic_swipe"),
on_create = function(instance, output_log)
---@cast instance examples.basic_swipe
instance.swipe.on_swipe:subscribe(function(_, side, dist, delta_time)
@@ -817,7 +817,7 @@ function M.get_examples()
template = "checkbox",
root = "checkbox/root",
code_url = "example/examples/basic/checkbox/checkbox.lua",
component_class = require("example.examples.basic.checkbox.checkbox"),
widget_class = require("example.examples.basic.checkbox.checkbox"),
on_create = function(instance, output_log)
---@cast instance examples.checkbox
instance.button.on_click:subscribe(function()
@@ -831,7 +831,7 @@ function M.get_examples()
template = "checkbox_group",
root = "checkbox_group/root",
code_url = "example/examples/basic/checkbox_group/checkbox_group.lua",
component_class = require("example.examples.basic.checkbox_group.checkbox_group"),
widget_class = require("example.examples.basic.checkbox_group.checkbox_group"),
on_create = function(instance, output_log)
---@cast instance examples.checkbox_group
instance.on_state_changed:subscribe(function(state1, state2, state3)
@@ -845,7 +845,7 @@ function M.get_examples()
template = "radio_group",
root = "radio_group/root",
code_url = "example/examples/basic/radio_group/radio_group.lua",
component_class = require("example.examples.basic.radio_group.radio_group"),
widget_class = require("example.examples.basic.radio_group.radio_group"),
on_create = function(instance, output_log)
---@cast instance examples.radio_group
instance.on_state_changed:subscribe(function(selected)

View File

@@ -1,17 +1,9 @@
local component = require("druid.component")
---@class examples.grid: druid.component
---@class examples.grid: druid.widget
---@field grid druid.grid
---@field text druid.text
---@field druid druid.instance
local M = component.create("grid")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.created_nodes = {}
self.prefab = self:get_node("prefab")

View File

@@ -1,17 +1,9 @@
local component = require("druid.component")
---@class examples.basic_hotkey: druid.component
---@field druid druid.instance
---@class examples.basic_hotkey: druid.widget
---@field root node
---@field text druid.text
local M = component.create("basic_hotkey")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.root = self:get_node("root")
self.hotkey = self.druid:new_hotkey({ "key_lshift", "key_x" }, self.on_hotkey)
end

View File

@@ -1,19 +1,12 @@
local component = require("druid.component")
---@class examples.hover: druid.component
---@field druid druid.instance
---@class examples.hover: druid.widget
---@field hover druid.hover
---@field hover_pressed druid.hover
local M = component.create("hover")
local M = {}
---Color: #E6DF9F
local HOVERED_COLOR = vmath.vector4(230/255, 223/255, 159/255, 1.0)
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
function M:init()
-- Default hover callback is `on_hover`, designed for mobile devices
-- It's only hover if touch action is above the node
self.hover_default = self.druid:new_hover("button_mobile_hover/root", self.on_hover)

View File

@@ -1,16 +1,8 @@
local component = require("druid.component")
---@class examples.basic_input: druid.component
---@field druid druid.instance
---@class examples.basic_input: druid.widget
---@field input druid.input
local M = component.create("basic_input")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.input = self.druid:new_input("input/root", "input/text")
self.input_2 = self.druid:new_input("input_2/root", "input_2/text") --[[@as druid.input]]

View File

@@ -1,16 +1,10 @@
local component = require("druid.component")
---@class examples.input_password: druid.component
---@field druid druid.instance
---@class examples.input_password: druid.widget
---@field root node
local M = component.create("input_password")
---@field input druid.input
local M = {}
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
function M:init()
self.root = self:get_node("root")
self.input = self.druid:new_input("input/root", "input/text", gui.KEYBOARD_TYPE_PASSWORD)
self.input:set_text("")

View File

@@ -1,15 +1,10 @@
local component = require("druid.component")
---@class examples.rich_input: druid.component
---@field druid druid.instance
---@class examples.rich_input: druid.widget
---@field rich_input druid.rich_input
local M = component.create("rich_input")
---@field rich_input_2 druid.rich_input
local M = {}
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
function M:init()
self.rich_input = self.druid:new_rich_input("rich_input") --[[@as druid.rich_input]]
self.rich_input:set_placeholder("Enter text")

View File

@@ -1,16 +1,8 @@
local component = require("druid.component")
---@class examples.basic_progress_bar: druid.component
---@field druid druid.instance
---@class examples.basic_progress_bar: druid.widget
---@field progress druid.progress
local M = component.create("basic_progress_bar")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.progress = self.druid:new_progress("progress_bar_fill", "x")
self.text_value = self:get_node("progress_value")

View File

@@ -1,16 +1,8 @@
local component = require("druid.component")
---@class examples.basic_progress_bar_slice9: druid.component
---@field druid druid.instance
---@class examples.basic_progress_bar_slice9: druid.widget
---@field progress druid.progress
local M = component.create("basic_progress_bar_slice9")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.progress = self.druid:new_progress("progress_bar_fill", "x")
self.text_value = self:get_node("progress_value")

View File

@@ -1,20 +1,15 @@
local component = require("druid.component")
local event = require("event.event")
-- Require checkbox component from checkbox example
local checkbox = require("example.examples.basic.checkbox.checkbox")
---@class examples.radio_group: druid.component
---@field druid druid.instance
---@field button druid.button
local M = component.create("radio_group")
---@class examples.radio_group: druid.widget
---@field checkboxes examples.checkbox[]
---@field state boolean[]
local M = {}
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
function M:init()
self.state = {}
self.checkboxes = {
self.druid:new(checkbox, "checkbox_1"),

View File

@@ -1,15 +1,9 @@
local component = require("druid.component")
---@class examples.basic_rich_text: druid.component
---@field druid druid.instance
---@class examples.basic_rich_text: druid.widget
---@field rich_text druid.rich_text
local M = component.create("basic_rich_text")
local M = {}
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
function M:init()
self.druid:new_rich_text("text", "Hello, I'm a <font=text_bold><color=E48155>Rich Text</font></color>!")
end

View File

@@ -1,17 +1,16 @@
local component = require("druid.component")
local helper = require("druid.helper")
---@class examples.rich_text_tags: druid.component
---@field druid druid.instance
---@field rich_text druid.rich_text
local M = component.create("rich_text_tags")
---@class examples.rich_text_tags: druid.widget
---@field rich_text_color druid.rich_text
---@field rich_text_font druid.rich_text
---@field rich_text_size druid.rich_text
---@field rich_text_breaks druid.rich_text
---@field rich_text_image druid.rich_text
---@field position table
local M = {}
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
function M:init()
self.rich_text_color = self.druid:new_rich_text("rich_text_color") --[[@as druid.rich_text]]
self.rich_text_color:set_text("Hello, I'm a <color=E48155>Rich Text</color> and it's <color=8ED59E>nested <color=A1D7F5>color</color> tag</color>")

View File

@@ -1,16 +1,11 @@
local component = require("druid.component")
---@class examples.scroll: druid.component
---@class examples.scroll: druid.widget
---@field root node
---@field scroll druid.scroll
---@field druid druid.instance
local M = component.create("scroll")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.scroll = self.druid:new_scroll("scroll_view", "scroll_content")
self.button_tutorial = self.druid:new_button("button_tutorial/root")

View File

@@ -1,18 +1,10 @@
local component = require("druid.component")
---@class examples.scroll_bind_grid: druid.component
---@class examples.scroll_bind_grid: druid.widget
---@field scroll druid.scroll
---@field grid druid.grid
---@field text druid.text
---@field druid druid.instance
local M = component.create("scroll_bind_grid")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.created_nodes = {}
self.prefab = self:get_node("prefab")

View File

@@ -1,18 +1,10 @@
local component = require("druid.component")
---@class examples.scroll_bind_grid_horizontal: druid.component
---@class examples.scroll_bind_grid_horizontal: druid.widget
---@field scroll druid.scroll
---@field grid druid.grid
---@field text druid.text
---@field druid druid.instance
local M = component.create("scroll_bind_grid_horizontal")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.created_nodes = {}
self.prefab = self:get_node("prefab")

View File

@@ -1,18 +1,10 @@
local component = require("druid.component")
---@class examples.scroll_bind_grid_points: druid.component
---@class examples.scroll_bind_grid_points: druid.widget
---@field scroll druid.scroll
---@field grid druid.grid
---@field text druid.text
---@field druid druid.instance
local M = component.create("scroll_bind_grid_points")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.created_nodes = {}
self.prefab = self:get_node("prefab")

View File

@@ -1,17 +1,10 @@
local component = require("druid.component")
---@class examples.scroll_slider: druid.component
---@class examples.scroll_slider: druid.widget
---@field root node
---@field scroll druid.scroll
---@field slider druid.slider
---@field druid druid.instance
local M = component.create("scroll_slider")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.scroll = self.druid:new_scroll("scroll_view", "scroll_content")
self.scroll.on_scroll:subscribe(self.on_scroll)

View File

@@ -1,17 +1,9 @@
local component = require("druid.component")
---@class examples.basic_slider: druid.component
---@field druid druid.instance
---@class examples.basic_slider: druid.widget
---@field root node
---@field slider druid.slider
local M = component.create("basic_slider")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.slider = self.druid:new_slider("slider/slider_pin", vmath.vector3(118, 0, 0), self.on_slider_change) --[[@as druid.slider]]
-- To add input across all slider widget add a root node to acquire additional input

View File

@@ -1,17 +1,9 @@
local component = require("druid.component")
---@class examples.basic_slider_stepped: druid.component
---@field druid druid.instance
---@class examples.basic_slider_stepped: druid.widget
---@field root node
---@field slider druid.slider
local M = component.create("basic_slider_stepped")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.slider = self.druid:new_slider("slider/slider_pin", vmath.vector3(118, 0, 0), self.on_slider_change) --[[@as druid.slider]]
-- To add input across all slider widget add a root node to acquire additional input

View File

@@ -1,17 +1,9 @@
local component = require("druid.component")
---@class examples.basic_slider_vertical: druid.component
---@field druid druid.instance
---@class examples.basic_slider_vertical: druid.widget
---@field root node
---@field slider druid.slider
local M = component.create("basic_slider_vertical")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.slider = self.druid:new_slider("slider/slider_pin", vmath.vector3(0, -118, 0), self.on_slider_change) --[[@as druid.slider]]
-- To add input across all slider widget add a root node to acquire additional input

View File

@@ -1,14 +1,9 @@
local component = require("druid.component")
---@class examples.basic_swipe: druid.widget
---@field swipe druid.swipe
local M = {}
---@class examples.basic_swipe: druid.component
---@field druid druid.instance
local M = component.create("basic_swipe")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
function M:init()
self.swipe = self.druid:new_swipe("root", self.on_swipe) --[[@as druid.swipe]]
self.text_hint = self:get_node("swipe_hint")

View File

@@ -1,16 +1,10 @@
local helper = require("druid.helper")
local component = require("druid.component")
---@class examples.basic_text: druid.component
---@field druid druid.instance
---@class examples.basic_text: druid.widget
---@field text druid.text
local M = component.create("basic_text")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.text = self.druid:new_text("text")
-- This code is for adjustable text area with mouse

View File

@@ -1,16 +1,10 @@
local helper = require("druid.helper")
local component = require("druid.component")
---@class examples.multiline_text: druid.component
---@class examples.multiline_text: druid.widget
---@field root node
---@field druid druid.instance
local M = component.create("multiline_text")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.root = self:get_node("root")
self.text = self.druid:new_text("text")

View File

@@ -1,19 +1,11 @@
local event = require("event.event")
local component = require("druid.component")
---@class examples.basic_timer: druid.component
---@field druid druid.instance
---@class examples.basic_timer: druid.widget
---@field root node
---@field text druid.text
local M = component.create("basic_timer")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
local M = {}
function M:init()
self.root = self:get_node("root")
self.timer = self.druid:new_timer("text")

View File

@@ -9,7 +9,7 @@ function M.get_examples()
template = "data_list_basic",
root = "data_list_basic/root",
code_url = "example/examples/data_list/basic/data_list_basic.lua",
component_class = require("example.examples.data_list.basic.data_list_basic"),
widget_class = require("example.examples.data_list.basic.data_list_basic"),
on_create = function(instance, output_list)
---@cast instance examples.data_list_basic
instance.on_item_click:subscribe(function(index)
@@ -57,7 +57,7 @@ function M.get_examples()
template = "data_list_horizontal_basic",
root = "data_list_horizontal_basic/root",
code_url = "example/examples/data_list/basic/data_list_horizontal_basic.lua",
component_class = require("example.examples.data_list.basic.data_list_horizontal_basic"),
widget_class = require("example.examples.data_list.basic.data_list_horizontal_basic"),
properties_control = function(instance, properties_panel)
---@cast instance examples.data_list_horizontal_basic
@@ -95,7 +95,7 @@ function M.get_examples()
template = "data_list_add_remove_clear",
root = "data_list_add_remove_clear/root",
code_url = "example/examples/data_list/add_remove_clear/data_list_add_remove_clear.lua",
component_class = require("example.examples.data_list.add_remove_clear.data_list_add_remove_clear"),
widget_class = require("example.examples.data_list.add_remove_clear.data_list_add_remove_clear"),
on_create = function(instance, output_list)
---@cast instance examples.data_list_add_remove_clear
instance.on_item_click:subscribe(function(index)
@@ -156,7 +156,7 @@ function M.get_examples()
template = "data_list_cache_with_component",
root = "data_list_cache_with_component/root",
code_url = "example/examples/data_list/cache_with_component/cache_with_component.lua",
component_class = require("example.examples.data_list.cache_with_component.cache_with_component"),
widget_class = require("example.examples.data_list.cache_with_component.cache_with_component"),
on_create = function(instance, output_list)
---@cast instance examples.data_list_cache_with_component
instance.on_item_click:subscribe(function(index)

View File

@@ -10,7 +10,7 @@ function M.get_examples()
template = "gamepad_tester",
root = "gamepad_tester/root",
code_url = "example/examples/gamepad/gamepad_tester/gamepad_tester.lua",
component_class = require("example.examples.gamepad.gamepad_tester.gamepad_tester"),
widget_class = require("example.examples.gamepad.gamepad_tester.gamepad_tester"),
on_create = function(instance, output_list)
---@cast instance examples.gamepad_tester
instance.button_left.on_click:subscribe(function()
@@ -64,7 +64,7 @@ function M.get_examples()
template = "on_screen_control",
root = "on_screen_control/root",
code_url = "example/examples/gamepad/on_screen_control/on_screen_control.lua",
component_class = require("example.examples.gamepad.on_screen_control.on_screen_control"),
widget_class = require("example.examples.gamepad.on_screen_control.on_screen_control"),
}
}
end

View File

@@ -10,7 +10,7 @@ function M.get_examples()
template = "intro",
root = "intro/root",
code_url = "example/examples/intro/intro/intro.lua",
component_class = require("example.examples.intro.intro.intro"),
widget_class = require("example.examples.intro.intro.intro"),
},
--{
-- name_id = "ui_example_how_to_use_example",
@@ -18,9 +18,9 @@ function M.get_examples()
-- template = "how_to_use_example",
-- root = "how_to_use_example/root",
-- code_url = "example/examples/intro/how_to_use_example/how_to_use_example.lua",
-- component_class = require("example.examples.intro.how_to_use_example.how_to_use_example"),
-- widget_class = require("example.examples.intro.how_to_use_example.how_to_use_example"),
--}
}
end
return M
return M

View File

@@ -1,13 +1,9 @@
local component = require("druid.component")
---@class examples.how_to_use_example: druid.component
---@class examples.how_to_use_example: druid.widget
---@field root node
local M = component.create("how_to_use_example")
local M = {}
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
function M:init()
self.root = self:get_node("root")
self.druid:new_rich_text("text_hello", "He<color=#E48155>ll</color>o!")

View File

@@ -1,15 +1,13 @@
local component = require("druid.component")
local panthera = require("panthera.panthera")
local intro_panthera = require("example.examples.intro.intro.intro_panthera")
---@class examples.intro: druid.component
---@class examples.intro: druid.widget
---@field root node
local M = component.create("intro")
---@field animation panthera.instance
local M = {}
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
function M:init()
self.root = self:get_node("root")
self.druid:new_rich_text("text_hello", "He<color=#E48155>ll</color>o!")
@@ -24,7 +22,7 @@ function M:init(template, nodes)
:add("sponsor_kofi")
:set_margin(8, 0)
self.animation = panthera.create_gui(intro_panthera, self:get_template(), nodes)
self.animation = panthera.create_gui(intro_panthera, self:get_template(), self:get_nodes())
panthera.play(self.animation, "idle", { is_loop = true })
end

View File

@@ -10,7 +10,7 @@ function M.get_examples()
template = "basic_layout",
root = "basic_layout/root",
code_url = "example/examples/layout/basic/basic_layout.lua",
component_class = require("example.examples.layout.basic.basic_layout"),
widget_class = require("example.examples.layout.basic.basic_layout"),
properties_control = function(instance, properties_panel)
---@cast instance examples.basic_layout

View File

@@ -10,7 +10,7 @@ function M.get_examples()
template = "basic_animation",
root = "basic_animation/root",
code_url = "example/examples/panthera/basic_animation/basic_animation.lua",
component_class = require("example.examples.panthera.basic_animation.basic_animation"),
widget_class = require("example.examples.panthera.basic_animation.basic_animation"),
},
{
name_id = "ui_example_panthera_animation_blend",
@@ -18,7 +18,7 @@ function M.get_examples()
template = "animation_blend",
root = "animation_blend/root",
code_url = "example/examples/panthera/animation_blend/animation_blend.lua",
component_class = require("example.examples.panthera.animation_blend.animation_blend"),
widget_class = require("example.examples.panthera.animation_blend.animation_blend"),
properties_control = function(instance, properties_panel)
---@cast instance examples.animation_blend
local vertical_time = panthera.get_time(instance.animation_vertical)

View File

@@ -9,7 +9,7 @@ function M.get_examples()
template = "hover_hint_example",
root = "hover_hint_example/root",
code_url = "example/examples/widgets/hover_hint/hover_hint_example.lua",
component_class = require("example.examples.widgets.hover_hint.hover_hint_example"),
widget_class = require("example.examples.widgets.hover_hint.hover_hint_example"),
},
{
name_id = "ui_example_widget_properties_panel",
@@ -83,7 +83,7 @@ function M.get_examples()
template = "property_button",
root = "property_button/root",
code_url = "example/components/properties_panel/properties/property_button.lua",
component_class = require("example.components.properties_panel.properties.property_button"),
widget_class = require("example.components.properties_panel.properties.property_button"),
on_create = function(instance, output_list)
---@cast instance property_button
instance.button.on_click:subscribe(function()
@@ -105,7 +105,7 @@ function M.get_examples()
template = "property_slider",
root = "property_slider/root",
code_url = "example/components/properties_panel/properties/property_slider.lua",
component_class = require("example.components.properties_panel.properties.property_slider"),
widget_class = require("example.components.properties_panel.properties.property_slider"),
on_create = function(instance, output_list)
---@cast instance property_slider
instance.slider.on_change_value:subscribe(function(_, value)
@@ -119,7 +119,7 @@ function M.get_examples()
template = "property_checkbox",
root = "property_checkbox/root",
code_url = "example/components/properties_panel/properties/property_checkbox.lua",
component_class = require("example.components.properties_panel.properties.property_checkbox"),
widget_class = require("example.components.properties_panel.properties.property_checkbox"),
on_create = function(instance, output_list)
---@cast instance property_checkbox
instance.button.on_click:subscribe(function()

View File

@@ -1,9 +1,7 @@
local helper = require("druid.helper")
local druid_const = require("druid.const")
local component = require("druid.component")
---@class examples.hover_hint: druid.component
---@field druid druid.instance
---@class examples.hover_hint: druid.widget
---@field root node
---@field panel_hint node
---@field text_hint druid.text
@@ -11,7 +9,7 @@ local component = require("druid.component")
---@field is_shown boolean
---@field private _hint_text string
---@field private _hover_timer_id hash
local M = component.create("hover_hint")
local M = {}
local TIMER_DELAY = 0.5
local MIN_PANEL_WIDTH = 100
@@ -19,10 +17,7 @@ local MIN_PANEL_HEIGHT = 50
local PANEL_MARGIN = 40
local HINT_OFFSET = 20
---@param template string
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
function M:init()
self.root = self:get_node("root")
self.panel_hint = self:get_node("panel_hint")
self.text_hint = self.druid:new_text("text_hint")

View File

@@ -1,17 +1,10 @@
local hover_hint = require("example.examples.widgets.hover_hint.hover_hint")
local component = require("druid.component")
---@class examples.hover_hint_example: druid.widget
local M = {}
---@class examples.hover_hint_example: druid.component
---@field druid druid.instance
local M = component.create("hover_hint_example")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes)
self.hover_hint = self.druid:new(hover_hint, "hover_hint")
function M:init()
self.hover_hint = self.druid:new_widget(hover_hint, "hover_hint")
self.hover_hint:add_hover_hint(self:get_node("node_yellow"), "Yellow box", gui.PIVOT_N, gui.PIVOT_S)
self.hover_hint:add_hover_hint(self:get_node("node_green"), "Green box", gui.PIVOT_S, gui.PIVOT_N)

View File

@@ -10,7 +10,7 @@ function M.get_examples()
template = "window_language",
root = "window_language/root",
code_url = "example/examples/windows/window_language/window_language.lua",
component_class = require("example.examples.windows.window_language.window_language"),
widget_class = require("example.examples.windows.window_language.window_language"),
on_create = function(instance, output_list)
---@cast instance examples.window_language
instance.on_language_change:subscribe(function(language)
@@ -24,7 +24,7 @@ function M.get_examples()
root = "window_confirmation/root",
information_text_id = "ui_example_window_language_description",
code_url = "example/examples/windows/window_confirmation/window_confirmation.lua",
component_class = require("example.examples.windows.window_confirmation.window_confirmation"),
widget_class = require("example.examples.windows.window_confirmation.window_confirmation"),
on_create = function(instance, output_list)
---@cast instance examples.window_confirmation
instance.text_header:translate("ui_confirmation")
@@ -46,7 +46,7 @@ function M.get_examples()
root = "window_info/root",
information_text_id = "ui_example_window_information_description",
code_url = "example/examples/windows/window_info/window_info.lua",
component_class = require("example.examples.windows.window_info.window_info"),
widget_class = require("example.examples.windows.window_info.window_info"),
on_create = function(instance, output_list)
---@cast instance examples.window_info
instance.text_header:translate("ui_information")