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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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")