From be03a5bd50afcf2e4c96f4c31bd179df5cb548cf Mon Sep 17 00:00:00 2001 From: Insality Date: Fri, 7 Mar 2025 21:09:01 +0200 Subject: [PATCH] LLS refactor --- docs_md/components/base/button_manual.md | 2 + druid/component.lua | 73 ++++++--- druid/extended/container.lua | 4 +- druid/extended/progress.lua | 2 - druid/helper.lua | 2 +- druid/system/druid_annotations.lua | 1 - druid/system/druid_instance.lua | 145 ++++++++++-------- .../properties_panel/properties_panel.lua | 15 +- example/examples/basic/examples_list.lua | 86 ++++++----- .../basic/slider/basic_slider_vertical.gui | 31 ++++ .../cache_with_component.lua | 4 +- example/examples/data_list/examples_list.lua | 22 +-- example/examples/gamepad/examples_list.lua | 4 +- .../on_screen_control/on_screen_control.lua | 4 +- example/examples/layout/examples_list.lua | 4 +- example/examples/panthera/examples_list.lua | 4 +- example/examples/widgets/examples_list.lua | 2 +- example/examples/windows/examples_list.lua | 8 +- 18 files changed, 244 insertions(+), 169 deletions(-) diff --git a/docs_md/components/base/button_manual.md b/docs_md/components/base/button_manual.md index 5fc243a..4241287 100644 --- a/docs_md/components/base/button_manual.md +++ b/docs_md/components/base/button_manual.md @@ -4,6 +4,8 @@ Button component is a basic component that can be used to create a clickable button. It provides various interaction callbacks such as click, long click, double click, and more. The component makes any GUI node clickable and allows you to define different behaviors for various user interactions. +Button component is not support multitouch. In case of multitouch required (ex. on screen control) the custom component should be written with own input handling. + ## Features - Regular click handling diff --git a/druid/component.lua b/druid/component.lua index 7a1cd36..a52e38c 100644 --- a/druid/component.lua +++ b/druid/component.lua @@ -38,8 +38,6 @@ local helper = require("druid.helper") ---@field private _meta druid.component.meta local M = {} -local INTERESTS = {} -- Cache interests per component class in runtime - local uid = 0 ---@private @@ -234,6 +232,13 @@ function M:set_input_enabled(state) end +---Get component input state. By default it's enabled. Can be disabled by `set_input_enabled` function. +---@return boolean +function M:get_input_enabled() + return self._meta.input_enabled +end + + ---Get parent component ---@return druid.component|nil parent_component The parent component if exist or nil function M:get_parent_component() @@ -286,28 +291,6 @@ function M:_reset_input_priority_changed() end ----Get current component interests ----@return table List of component interests ----@private -function M:__get_interests() - local instance_class = self._meta.instance_class - if INTERESTS[instance_class] then - return INTERESTS[instance_class] - end - - local interests = {} - for index = 1, #const.ALL_INTERESTS do - local interest = const.ALL_INTERESTS[index] - if self[interest] and type(self[interest]) == "function" then - table.insert(interests, interest) - end - end - - INTERESTS[instance_class] = interests - return INTERESTS[instance_class] -end - - ---Get current component nodes ---@return table|nil function M:get_nodes() @@ -333,7 +316,6 @@ function M:__add_child(child) end - ---Remove child from component children list ---@generic T: druid.component ---@param child T The druid component instance @@ -394,4 +376,45 @@ function M.create(name, input_priority) end +local WIDGET_METATABLE = { __index = M } + +---Create the Druid component instance +---@param self druid.instance +---@param widget_class druid.widget +---@param context table +---@return druid.widget +function M.create_widget(self, widget_class, context) + local instance = setmetatable({}, { + __index = setmetatable(widget_class, WIDGET_METATABLE) + }) + + instance._component = { + _uid = M.create_uid(), + name = "Druid Widget", + input_priority = const.PRIORITY_INPUT, + default_input_priority = const.PRIORITY_INPUT, + _is_input_priority_changed = true, -- Default true for sort once time after GUI init + } + instance._meta = { + druid = self, + template = "", + nodes = nil, + context = context, + style = nil, + input_enabled = true, + children = {}, + parent = type(context) ~= "userdata" and context or nil, + instance_class = widget_class + } + + -- Register + if instance._meta.parent then + instance._meta.parent:__add_child(instance) + end + + ---@cast instance druid.widget + return instance +end + + return M diff --git a/druid/extended/container.lua b/druid/extended/container.lua index a9b78a4..6f7f852 100644 --- a/druid/extended/container.lua +++ b/druid/extended/container.lua @@ -44,7 +44,7 @@ local CORNER_PIVOTS = { ---@field fit_size vector3 ---@field min_size_x number|nil ---@field min_size_y number|nil ----@field on_size_changed event @function on_size_changed(size) +---@field on_size_changed event fun(self: druid.container, size: vector3) ---@field _parent_container druid.container ---@field _containers table ---@field _draggable_corners table @@ -244,7 +244,7 @@ function M:add_container(node_or_container, mode, on_resize_callback) local node = node_or_container -- Check it's a container components instead of node - if type(node_or_container) == "table" and node_or_container._component then + if type(node_or_container) == "table" and node_or_container.add_container then node = node_or_container.node container = node_or_container mode = mode or container.mode diff --git a/druid/extended/progress.lua b/druid/extended/progress.lua index d310291..6d21157 100644 --- a/druid/extended/progress.lua +++ b/druid/extended/progress.lua @@ -148,8 +148,6 @@ function M:set_max_size(max_size) end - - ---@private function M:_check_steps(from, to, exactly) if not self.steps then diff --git a/druid/helper.lua b/druid/helper.lua index a27af3b..0bb079c 100644 --- a/druid/helper.lua +++ b/druid/helper.lua @@ -298,7 +298,7 @@ end ---@param node node ---@param x number ---@param y number ----@param node_click_area node|nil +---@param node_click_area node|nil Additional node to check for click area. If nil, only node will be checked ---@local function M.pick_node(node, x, y, node_click_area) local is_pick = gui_pick_node(node, x, y) diff --git a/druid/system/druid_annotations.lua b/druid/system/druid_annotations.lua index 860c639..5ec36e0 100644 --- a/druid/system/druid_annotations.lua +++ b/druid/system/druid_annotations.lua @@ -1,6 +1,5 @@ ---@class druid.widget: druid.component ---@field druid druid.instance Ready to use druid instance ----@field root node Is it really needed? ---@class GUITextMetrics ---@field width number diff --git a/druid/system/druid_instance.lua b/druid/system/druid_instance.lua index 6a99601..86e6ccb 100755 --- a/druid/system/druid_instance.lua +++ b/druid/system/druid_instance.lua @@ -1,18 +1,16 @@ --- Hello! Wish you a good day! +-- Hello, Defolder! Wish you a good day! local events = require("event.events") local const = require("druid.const") local helper = require("druid.helper") local settings = require("druid.system.settings") -local base_component = require("druid.component") +local druid_component = require("druid.component") ---@class druid.instance ---@field components_all druid.component[] All created components ---@field components_interest table All components sorted by interest ----@field url url ----@field private _context table Druid context +---@field private _context table Druid context, usually a self of gui script ---@field private _style table Druid style table ----@field private _deleted boolean ---@field private _is_late_remove_enabled boolean ---@field private _late_remove druid.component[] ---@field private _input_blacklist druid.component[]|nil @@ -25,6 +23,7 @@ local M = {} local MSG_ADD_FOCUS = hash("acquire_input_focus") local MSG_REMOVE_FOCUS = hash("release_input_focus") local IS_NO_AUTO_INPUT = sys.get_config_int("druid.no_auto_input", 0) == 1 +local INTERESTS_CACHE = {} -- Cache interests per component class in runtime local function set_input_state(self, is_input_inited) if IS_NO_AUTO_INPUT or (self.input_inited == is_input_inited) then @@ -36,17 +35,19 @@ local function set_input_state(self, is_input_inited) end --- The a and b - two Druid components ---@private -local function sort_input_comparator(a, b) - local a_priority = a:get_input_priority() - local b_priority = b:get_input_priority() +---@param component_a druid.component +---@param component_b druid.component +---@return boolean +local function sort_input_comparator(component_a, component_b) + local a_priority = component_a:get_input_priority() + local b_priority = component_b:get_input_priority() if a_priority ~= b_priority then return a_priority < b_priority end - return a:get_uid() < b:get_uid() + return component_a:get_uid() < component_b:get_uid() end @@ -60,64 +61,62 @@ local function sort_input_stack(self) end --- Create the Druid component instance -local function create(self, instance_class) - local instance = instance_class() - instance:setup_component(self, self._context, self._style, instance_class) +---Get current component interests +---@param instance druid.component +---@return table interest_list List of component interests +local function get_component_interests(instance) + ---@diagnostic disable-next-line: invisible + local instance_class = instance._meta.instance_class + if INTERESTS_CACHE[instance_class] then + return INTERESTS_CACHE[instance_class] + end + local interests = {} + for index = 1, #const.ALL_INTERESTS do + local interest = const.ALL_INTERESTS[index] + if instance[interest] and type(instance[interest]) == "function" then + table.insert(interests, interest) + end + end + + INTERESTS_CACHE[instance_class] = interests + return INTERESTS_CACHE[instance_class] +end + + +---@private +---@param self druid.instance +---@param instance druid.component +local function register_interests(self, instance) table.insert(self.components_all, instance) - - local register_to = instance:__get_interests() - for i = 1, #register_to do - local interest = register_to[i] + local interest_list = get_component_interests(instance) + for i = 1, #interest_list do + local interest = interest_list[i] table.insert(self.components_interest[interest], instance) end +end + + +-- Create the Druid component instance +---@param self druid.instance +---@param instance_class druid.component +---@return druid.component +local function create(self, instance_class) + local instance = instance_class() + instance:setup_component(self, self:get_context(), self:get_style(), instance_class) + register_interests(self, instance) return instance end -local WIDGET_METATABLE = { __index = base_component } - ----Create the Druid component instance +---@private ---@param self druid.instance ----@param widget_class druid.component +---@param widget_class druid.widget +---@return druid.widget local function create_widget(self, widget_class) - local instance = setmetatable({}, { - __index = setmetatable(widget_class, WIDGET_METATABLE) - }) - - instance._component = { - _uid = base_component.create_uid(), - name = "Druid Widget", - input_priority = const.PRIORITY_INPUT, - default_input_priority = const.PRIORITY_INPUT, - _is_input_priority_changed = true, -- Default true for sort once time after GUI init - } - instance._meta = { - druid = self, - template = "", - nodes = nil, - context = self._context, - style = nil, - input_enabled = true, - children = {}, - parent = type(self._context) ~= "userdata" and self._context, - instance_class = widget_class - } - - -- Register - if instance._meta.parent then - instance._meta.parent:__add_child(instance) - end - - table.insert(self.components_all, instance) - - local register_to = instance:__get_interests() - for i = 1, #register_to do - local interest = register_to[i] - table.insert(self.components_interest[interest], instance) - end + local instance = druid_component.create_widget(self, widget_class, self:get_context()) + register_interests(self, instance) return instance end @@ -176,8 +175,9 @@ function M:_process_input(action_id, action, components) for i = #components, 1, -1 do local component = components[i] - local meta = component._meta - if meta.input_enabled and self:_can_use_input_component(component) then + local input_enabled = component:get_input_enabled() + + if input_enabled and self:_can_use_input_component(component) then if not is_input_consumed then is_input_consumed = component:on_input(action_id, action) or false else @@ -210,7 +210,6 @@ end function M:initialize(context, style) self._context = context self._style = style or settings.default_style - self._deleted = false self._is_late_remove_enabled = false self._late_remove = {} @@ -257,8 +256,6 @@ function M:final() end end - self._deleted = true - set_input_state(self, false) events.unsubscribe("druid.window_event", self.on_window_event, self) @@ -303,9 +300,9 @@ function M:remove(component) end end - local interests = component:__get_interests() - for i = 1, #interests do - local interest = interests[i] + local interest_list = get_component_interests(component) + for i = 1, #interest_list do + local interest = interest_list[i] local components = self.components_interest[interest] for j = #components, 1, -1 do if components[j] == component then @@ -318,6 +315,22 @@ function M:remove(component) end +---Get a context of Druid instance (usually a self of gui script) +---@package +---@return any +function M:get_context() + return self._context +end + + +---Get a style of Druid instance +---@package +---@return table +function M:get_style() + return self._style +end + + ---Druid late update function called after initialization and before the regular update step. ---This function is used to check the GUI state and perform actions after all components and nodes have been created. ---An example use case is performing an auto stencil check in the GUI hierarchy for input components. @@ -506,7 +519,7 @@ end local button = require("druid.base.button") ---Create Button component ---@param node string|node The node_id or gui.get_node(node_id) ----@param callback function|nil Button callback +---@param callback function|event|nil Button callback ---@param params any|nil Button callback params ---@param anim_node node|string|nil Button anim node (node, if not provided) ---@return druid.button Button component diff --git a/druid/widget/properties_panel/properties_panel.lua b/druid/widget/properties_panel/properties_panel.lua index 03b05c1..6ca799a 100644 --- a/druid/widget/properties_panel/properties_panel.lua +++ b/druid/widget/properties_panel/properties_panel.lua @@ -102,13 +102,16 @@ end function M:clear_created_properties() for index = 1, #self.properties do local property = self.properties[index] + local root = property.root --[[@as node]] - -- If prefab used clone nodes we can remove it - if property:get_nodes() then - gui.delete_node(property.root) - else - -- Probably we have component placed on scene directly - gui.set_enabled(property.root, false) + if root then + -- If prefab used clone nodes we can remove it + if property:get_nodes() then + gui.delete_node(root) + else + -- Probably we have component placed on scene directly + gui.set_enabled(root, false) + end end self.druid:remove(self.properties[index]) diff --git a/example/examples/basic/examples_list.lua b/example/examples/basic/examples_list.lua index e130afb..f9482d6 100644 --- a/example/examples/basic/examples_list.lua +++ b/example/examples/basic/examples_list.lua @@ -13,7 +13,7 @@ function M.get_examples() code_url = "example/examples/basic/button/basic_button.lua", component_class = require("example.examples.basic.button.basic_button"), properties_control = function(instance, properties_panel) - ---@cast instance basic_button + ---@cast instance examples.basic_button local checkbox = properties_panel:add_checkbox("ui_enabled", false, function(value) instance.button:set_enabled(value) @@ -21,7 +21,7 @@ function M.get_examples() checkbox:set_value(true) end, on_create = function(instance, output_log) - ---@cast instance basic_button + ---@cast instance examples.basic_button instance.button.on_click:subscribe(function() output_log:add_log_text("Button Clicked") end) @@ -35,7 +35,7 @@ function M.get_examples() code_url = "example/examples/basic/button/basic_button_double_click.lua", component_class = require("example.examples.basic.button.basic_button_double_click"), on_create = function(instance, output_log) - ---@cast instance basic_button_double_click + ---@cast instance examples.basic_button_double_click instance.button.on_click:subscribe(function() output_log:add_log_text("Clicked") end) @@ -52,7 +52,7 @@ function M.get_examples() code_url = "example/examples/basic/button/basic_button_hold.lua", component_class = require("example.examples.basic.button.basic_button_hold"), on_create = function(instance, output_log) - ---@cast instance basic_button_hold + ---@cast instance examples.basic_button_hold instance.button.on_click:subscribe(function() output_log:add_log_text("Clicked") end) @@ -69,7 +69,7 @@ function M.get_examples() code_url = "example/examples/basic/text/basic_text.lua", component_class = require("example.examples.basic.text.basic_text"), properties_control = function(instance, properties_panel) - ---@cast instance basic_text + ---@cast instance examples.basic_text local adjust_index = 1 local adjust_types = { @@ -100,7 +100,7 @@ function M.get_examples() gui.PIVOT_NW, } - ---@cast instance rich_text_tags + ---@cast instance examples.rich_text_tags properties_panel:add_button("ui_pivot_next", function() pivot_index = pivot_index + 1 if pivot_index > #pivot_list then @@ -110,7 +110,7 @@ function M.get_examples() end) end, get_debug_info = function(instance) - ---@cast instance multiline_text + ---@cast instance examples.multiline_text local info = "" info = info .. "Text Adjust: " .. instance.text.adjust_type .. "\n" @@ -127,7 +127,7 @@ function M.get_examples() code_url = "example/examples/basic/text/multiline_text.lua", component_class = require("example.examples.basic.text.multiline_text"), properties_control = function(instance, properties_panel) - ---@cast instance multiline_text + ---@cast instance examples.multiline_text local adjust_index = 1 local adjust_types = { @@ -167,7 +167,7 @@ function M.get_examples() end) end, get_debug_info = function(instance) - ---@cast instance multiline_text + ---@cast instance examples.multiline_text local info = "" info = info .. "Text Adjust: " .. instance.text.adjust_type .. "\n" @@ -208,7 +208,7 @@ function M.get_examples() code_url = "example/examples/basic/slider/basic_slider.lua", component_class = require("example.examples.basic.slider.basic_slider"), on_create = function(instance, output_log) - ---@cast instance basic_slider + ---@cast instance examples.basic_slider instance.slider.on_change_value:subscribe(function(_, value) local value = helper.round(value, 2) output_log:add_log_text("Slider Value: " .. value) @@ -223,7 +223,7 @@ function M.get_examples() code_url = "example/examples/basic/slider/basic_slider_vertical.lua", component_class = require("example.examples.basic.slider.basic_slider_vertical"), on_create = function(instance, output_log) - ---@cast instance basic_slider_vertical + ---@cast instance examples.basic_slider_vertical instance.slider.on_change_value:subscribe(function(_, value) local value = helper.round(value, 2) output_log:add_log_text("Slider Value: " .. value) @@ -238,7 +238,7 @@ function M.get_examples() code_url = "example/examples/basic/slider/basic_slider_stepped.lua", component_class = require("example.examples.basic.slider.basic_slider_stepped"), on_create = function(instance, output_log) - ---@cast instance basic_slider + ---@cast instance examples.basic_slider_stepped instance.slider.on_change_value:subscribe(function(_, value) local value = helper.round(value, 2) output_log:add_log_text("Slider Value: " .. value) @@ -253,7 +253,7 @@ function M.get_examples() code_url = "example/examples/basic/progress_bar/basic_progress_bar.lua", component_class = require("example.examples.basic.progress_bar.basic_progress_bar"), properties_control = function(instance, properties_panel) - ---@cast instance basic_progress_bar + ---@cast instance examples.basic_progress_bar properties_panel:add_slider("ui_value", 1, function(value) instance:set_value(value) end) @@ -267,7 +267,7 @@ function M.get_examples() code_url = "example/examples/basic/progress_bar/basic_progress_bar_slice9.lua", component_class = require("example.examples.basic.progress_bar.basic_progress_bar_slice9"), properties_control = function(instance, properties_panel) - ---@cast instance basic_progress_bar_slice9 + ---@cast instance examples.basic_progress_bar_slice9 properties_panel:add_slider("ui_value", 1, function(value) instance:set_value(value) end) @@ -281,7 +281,7 @@ function M.get_examples() code_url = "example/examples/basic/blocker/basic_blocker.lua", component_class = require("example.examples.basic.blocker.basic_blocker"), on_create = function(instance, output_log) - ---@cast instance basic_blocker + ---@cast instance examples.basic_blocker instance.button_root.on_click:subscribe(function() output_log:add_log_text("Root Clicked") end) @@ -306,7 +306,7 @@ function M.get_examples() code_url = "example/examples/basic/timer/basic_timer.lua", component_class = require("example.examples.basic.timer.basic_timer"), on_create = function(instance, output_log) - ---@cast instance basic_timer + ---@cast instance examples.basic_timer instance.on_cycle_end:subscribe(function() output_log:add_log_text("Timer Cycle End") end) @@ -320,7 +320,7 @@ function M.get_examples() code_url = "example/examples/basic/hotkey/basic_hotkey.lua", component_class = require("example.examples.basic.hotkey.basic_hotkey"), on_create = function(instance, output_log) - ---@cast instance basic_hotkey + ---@cast instance examples.basic_hotkey instance.hotkey.on_hotkey_released:subscribe(function() output_log:add_log_text("Hotkey Released") end) @@ -334,7 +334,7 @@ function M.get_examples() code_url = "example/examples/basic/scroll/scroll.lua", component_class = require("example.examples.basic.scroll.scroll"), on_create = function(instance, output_log) - ---@cast instance scroll + ---@cast instance examples.scroll instance.button_tutorial.on_click:subscribe(function() output_log:add_log_text("Button Tutorial Clicked") end) @@ -343,7 +343,7 @@ function M.get_examples() end) end, properties_control = function(instance, properties_panel) - ---@cast instance scroll + ---@cast instance examples.scroll local scroll = instance.scroll local is_stretch = instance.scroll.style.EXTRA_STRETCH_SIZE > 0 properties_panel:add_checkbox("ui_elastic_scroll", is_stretch, function(value) @@ -386,7 +386,7 @@ function M.get_examples() wheel_by_inertion:set_value(scroll.style.WHEEL_SCROLL_BY_INERTION) end, get_debug_info = function(instance) - ---@cast instance scroll + ---@cast instance examples.scroll local info = "" local s = instance.scroll @@ -406,7 +406,7 @@ function M.get_examples() code_url = "example/examples/basic/scroll_slider/scroll_slider.lua", component_class = require("example.examples.basic.scroll_slider.scroll_slider"), get_debug_info = function(instance) - ---@cast instance scroll_slider + ---@cast instance examples.scroll_slider local info = "" local s = instance.scroll @@ -426,7 +426,7 @@ function M.get_examples() code_url = "example/examples/basic/grid/grid.lua", component_class = require("example.examples.basic.grid.grid"), properties_control = function(instance, properties_panel) - ---@cast instance grid + ---@cast instance examples.grid local grid = instance.grid @@ -495,7 +495,7 @@ function M.get_examples() slider_size:set_value(0.5) end, get_debug_info = function(instance) - ---@cast instance grid + ---@cast instance examples.grid local info = "" local grid = instance.grid @@ -514,7 +514,7 @@ function M.get_examples() code_url = "example/examples/basic/scroll_bind_grid/scroll_bind_grid.lua", component_class = require("example.examples.basic.scroll_bind_grid.scroll_bind_grid"), properties_control = function(instance, properties_panel) - ---@cast instance scroll_bind_grid + ---@cast instance examples.scroll_bind_grid local view_node = instance.scroll.view_node local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL @@ -538,7 +538,7 @@ function M.get_examples() end) end, get_debug_info = function(instance) - ---@cast instance scroll_bind_grid + ---@cast instance examples.scroll_bind_grid local info = "" local s = instance.scroll @@ -567,7 +567,7 @@ function M.get_examples() 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"), properties_control = function(instance, properties_panel) - ---@cast instance scroll_bind_grid_horizontal + ---@cast instance examples.scroll_bind_grid_horizontal local view_node = instance.scroll.view_node local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL @@ -593,7 +593,7 @@ function M.get_examples() end) end, get_debug_info = function(instance) - ---@cast instance scroll_bind_grid_horizontal + ---@cast instance examples.scroll_bind_grid_horizontal local info = "" local s = instance.scroll @@ -621,7 +621,7 @@ function M.get_examples() 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"), properties_control = function(instance, properties_panel) - ---@cast instance scroll_bind_grid_points + ---@cast instance examples.scroll_bind_grid_points local view_node = instance.scroll.view_node local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL @@ -645,7 +645,7 @@ function M.get_examples() end) end, get_debug_info = function(instance) - ---@cast instance scroll_bind_grid_points + ---@cast instance examples.scroll_bind_grid_points local info = "" local s = instance.scroll @@ -674,12 +674,18 @@ function M.get_examples() code_url = "example/examples/basic/input/basic_input.lua", component_class = require("example.examples.basic.input.basic_input"), on_create = function(instance, output_log) - ---@cast instance basic_input + ---@cast instance examples.basic_input + instance.input.on_input_select:subscribe(function() + output_log:add_log_text("Input Selected") + end) + instance.input_2.on_input_select:subscribe(function() + output_log:add_log_text("Input 2 Selected") + end) instance.input.on_input_unselect:subscribe(function(_, text) - output_log:add_log_text("Input: " .. text) + output_log:add_log_text("Input Deselected. Text: " .. text) end) instance.input_2.on_input_unselect:subscribe(function(_, text) - output_log:add_log_text("Input 2: " .. text) + output_log:add_log_text("Input Deselected. Text: " .. text) end) end, }, @@ -691,7 +697,7 @@ function M.get_examples() code_url = "example/examples/basic/input/input_password.lua", component_class = require("example.examples.basic.input.input_password"), on_create = function(instance, output_log) - ---@cast instance input_password + ---@cast instance examples.input_password instance.input.on_input_unselect:subscribe(function(_, text) output_log:add_log_text("Input: " .. text) end) @@ -705,7 +711,7 @@ function M.get_examples() code_url = "example/examples/basic/input/rich_input.lua", component_class = require("example.examples.basic.input.rich_input"), on_create = function(instance, output_log) - ---@cast instance rich_input + ---@cast instance examples.rich_input instance.rich_input.input.on_input_unselect:subscribe(function(_, text) output_log:add_log_text("Input: " .. text) end) @@ -743,7 +749,7 @@ function M.get_examples() gui.PIVOT_NW, } - ---@cast instance rich_text_tags + ---@cast instance examples.rich_text_tags properties_panel:add_button("ui_pivot_next", function() pivot_index = pivot_index + 1 if pivot_index > #pivot_list then @@ -799,7 +805,7 @@ function M.get_examples() code_url = "example/examples/basic/swipe/basic_swipe.lua", component_class = require("example.examples.basic.swipe.basic_swipe"), on_create = function(instance, output_log) - ---@cast instance basic_swipe + ---@cast instance examples.basic_swipe instance.swipe.on_swipe:subscribe(function(_, side, dist, delta_time) output_log:add_log_text("Swipe Side: " .. side) end) @@ -813,7 +819,7 @@ function M.get_examples() code_url = "example/examples/basic/checkbox/checkbox.lua", component_class = require("example.examples.basic.checkbox.checkbox"), on_create = function(instance, output_log) - ---@cast instance checkbox + ---@cast instance examples.checkbox instance.button.on_click:subscribe(function() output_log:add_log_text("Checkbox Clicked: " .. tostring(instance.is_enabled)) end) @@ -827,7 +833,7 @@ function M.get_examples() code_url = "example/examples/basic/checkbox_group/checkbox_group.lua", component_class = require("example.examples.basic.checkbox_group.checkbox_group"), on_create = function(instance, output_log) - ---@cast instance checkbox_group + ---@cast instance examples.checkbox_group instance.on_state_changed:subscribe(function(state1, state2, state3) output_log:add_log_text("State: " .. tostring(state1) .. " " .. tostring(state2) .. " " .. tostring(state3)) end) @@ -841,7 +847,7 @@ function M.get_examples() code_url = "example/examples/basic/radio_group/radio_group.lua", component_class = require("example.examples.basic.radio_group.radio_group"), on_create = function(instance, output_log) - ---@cast instance radio_group + ---@cast instance examples.radio_group instance.on_state_changed:subscribe(function(selected) output_log:add_log_text("Selected: " .. selected) end) @@ -850,4 +856,4 @@ function M.get_examples() } end -return M \ No newline at end of file +return M diff --git a/example/examples/basic/slider/basic_slider_vertical.gui b/example/examples/basic/slider/basic_slider_vertical.gui index b59f960..7e615dd 100644 --- a/example/examples/basic/slider/basic_slider_vertical.gui +++ b/example/examples/basic/slider/basic_slider_vertical.gui @@ -34,6 +34,37 @@ nodes { inherit_alpha: true template: "/example/templates/slider.gui" } +nodes { + size { + x: 40.0 + y: 260.0 + } + type: TYPE_BOX + id: "slider/root" + parent: "slider" + overridden_fields: 4 + template_node_child: true +} +nodes { + rotation { + z: 90.0 + } + type: TYPE_BOX + id: "slider/slider_back" + parent: "slider/root" + overridden_fields: 2 + template_node_child: true +} +nodes { + position { + y: 118.0 + } + type: TYPE_BOX + id: "slider/slider_pin" + parent: "slider/root" + overridden_fields: 1 + template_node_child: true +} nodes { position { y: 170.0 diff --git a/example/examples/data_list/cache_with_component/cache_with_component.lua b/example/examples/data_list/cache_with_component/cache_with_component.lua index 06b0e77..a87104b 100644 --- a/example/examples/data_list/cache_with_component/cache_with_component.lua +++ b/example/examples/data_list/cache_with_component/cache_with_component.lua @@ -48,7 +48,7 @@ end ---@param index number ---@param node node ----@param instance button_component +---@param instance examples.button_component ---@param data table function M:on_element_add(index, node, instance, data) instance.text:set_text("Data Item " .. index) @@ -62,7 +62,7 @@ function M:on_element_remove(index, node, instance, data) end ----@param instance button_component +---@param instance examples.button_component function M:on_button_click(instance) local data = instance:get_data() self.on_item_click:trigger(data) diff --git a/example/examples/data_list/examples_list.lua b/example/examples/data_list/examples_list.lua index 22329f5..59aea64 100644 --- a/example/examples/data_list/examples_list.lua +++ b/example/examples/data_list/examples_list.lua @@ -11,13 +11,13 @@ function M.get_examples() code_url = "example/examples/data_list/basic/data_list_basic.lua", component_class = require("example.examples.data_list.basic.data_list_basic"), on_create = function(instance, output_list) - ---@cast instance data_list_basic + ---@cast instance examples.data_list_basic instance.on_item_click:subscribe(function(index) output_list:add_log_text("Item clicked: " .. index) end) end, properties_control = function(instance, properties_panel) - ---@cast instance data_list_basic + ---@cast instance examples.data_list_basic local view_node = instance.scroll.view_node local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL @@ -31,7 +31,7 @@ function M.get_examples() end) end, get_debug_info = function(instance) - ---@cast instance data_list_basic + ---@cast instance examples.data_list_basic local data_list = instance.data_list local data = data_list:get_data() @@ -59,7 +59,7 @@ function M.get_examples() code_url = "example/examples/data_list/basic/data_list_horizontal_basic.lua", component_class = require("example.examples.data_list.basic.data_list_horizontal_basic"), properties_control = function(instance, properties_panel) - ---@cast instance data_list_horizontal_basic + ---@cast instance examples.data_list_horizontal_basic local view_node = instance.scroll.view_node local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL @@ -69,7 +69,7 @@ function M.get_examples() end) end, get_debug_info = function(instance) - ---@cast instance data_list_horizontal_basic + ---@cast instance examples.data_list_horizontal_basic local data_list = instance.data_list local data = data_list:get_data() @@ -97,14 +97,14 @@ function M.get_examples() 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"), on_create = function(instance, output_list) - ---@cast instance data_list_add_remove_clear + ---@cast instance examples.data_list_add_remove_clear instance.on_item_click:subscribe(function(index) instance:remove_item(index) output_list:add_log_text("Item removed: " .. index) end) end, properties_control = function(instance, properties_panel) - ---@cast instance data_list_add_remove_clear + ---@cast instance examples.data_list_add_remove_clear local view_node = instance.scroll.view_node local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL @@ -130,7 +130,7 @@ function M.get_examples() end) end, get_debug_info = function(instance) - ---@cast instance data_list_add_remove_clear + ---@cast instance examples.data_list_add_remove_clear local data_list = instance.data_list local data = data_list:get_data() @@ -158,13 +158,13 @@ function M.get_examples() 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"), on_create = function(instance, output_list) - ---@cast instance data_list_cache_with_component + ---@cast instance examples.data_list_cache_with_component instance.on_item_click:subscribe(function(index) output_list:add_log_text("Item clicked: " .. index) end) end, properties_control = function(instance, properties_panel) - ---@cast instance data_list_cache_with_component + ---@cast instance examples.data_list_cache_with_component local view_node = instance.scroll.view_node local is_stencil = gui.get_clipping_mode(view_node) == gui.CLIPPING_MODE_STENCIL @@ -178,7 +178,7 @@ function M.get_examples() end) end, get_debug_info = function(instance) - ---@cast instance data_list_cache_with_component + ---@cast instance examples.data_list_cache_with_component local data_list = instance.data_list local data = data_list:get_data() diff --git a/example/examples/gamepad/examples_list.lua b/example/examples/gamepad/examples_list.lua index aba51c0..e66a53a 100644 --- a/example/examples/gamepad/examples_list.lua +++ b/example/examples/gamepad/examples_list.lua @@ -12,7 +12,7 @@ function M.get_examples() code_url = "example/examples/gamepad/gamepad_tester/gamepad_tester.lua", component_class = require("example.examples.gamepad.gamepad_tester.gamepad_tester"), on_create = function(instance, output_list) - ---@cast instance gamepad_tester + ---@cast instance examples.gamepad_tester instance.button_left.on_click:subscribe(function() output_list:add_log_text("Button Left Clicked") end) @@ -69,4 +69,4 @@ function M.get_examples() } end -return M \ No newline at end of file +return M diff --git a/example/examples/gamepad/on_screen_control/on_screen_control.lua b/example/examples/gamepad/on_screen_control/on_screen_control.lua index 271351a..5e7bbd8 100644 --- a/example/examples/gamepad/on_screen_control/on_screen_control.lua +++ b/example/examples/gamepad/on_screen_control/on_screen_control.lua @@ -3,7 +3,7 @@ local on_screen_input = require("example.examples.gamepad.on_screen_control.on_s ---@class examples.on_screen_control: druid.component ---@field druid druid.instance ----@field on_screen_input on_screen_input +---@field on_screen_input examples.on_screen_input local M = component.create("on_screen_control") local CHARACTER_SPEED = 700 @@ -19,7 +19,7 @@ function M:init(template, nodes) self.character_eye_left = self:get_node("eye_left") self.character_eye_right = self:get_node("eye_right") - self.on_screen_input = self.druid:new(on_screen_input, "on_screen_input") --[[@as on_screen_input]] + self.on_screen_input = self.druid:new(on_screen_input, "on_screen_input") self.on_screen_input.on_action:subscribe(self.on_action_button, self) self.on_screen_input.on_movement:subscribe(self.on_movement, self) diff --git a/example/examples/layout/examples_list.lua b/example/examples/layout/examples_list.lua index d056968..1499c1b 100644 --- a/example/examples/layout/examples_list.lua +++ b/example/examples/layout/examples_list.lua @@ -12,7 +12,7 @@ function M.get_examples() code_url = "example/examples/layout/basic/basic_layout.lua", component_class = require("example.examples.layout.basic.basic_layout"), properties_control = function(instance, properties_panel) - ---@cast instance basic_layout + ---@cast instance examples.basic_layout properties_panel:add_slider("ui_padding", 0, function(value) local padding = math.floor((value * 64) * 100) / 100 @@ -71,7 +71,7 @@ function M.get_examples() end) end, get_debug_info = function(instance) - ---@cast instance basic_layout + ---@cast instance examples.basic_layout local layout = instance.layout local p = layout.padding local info = "" diff --git a/example/examples/panthera/examples_list.lua b/example/examples/panthera/examples_list.lua index 7f401ee..bc4b20c 100644 --- a/example/examples/panthera/examples_list.lua +++ b/example/examples/panthera/examples_list.lua @@ -20,7 +20,7 @@ function M.get_examples() code_url = "example/examples/panthera/animation_blend/animation_blend.lua", component_class = require("example.examples.panthera.animation_blend.animation_blend"), properties_control = function(instance, properties_panel) - ---@cast instance animation_blend + ---@cast instance examples.animation_blend local vertical_time = panthera.get_time(instance.animation_vertical) local vertical_slider = properties_panel:add_slider("ui_animation_vertical", vertical_time, function(value) @@ -42,4 +42,4 @@ function M.get_examples() } end -return M \ No newline at end of file +return M diff --git a/example/examples/widgets/examples_list.lua b/example/examples/widgets/examples_list.lua index d127fb0..ceb80a1 100644 --- a/example/examples/widgets/examples_list.lua +++ b/example/examples/widgets/examples_list.lua @@ -181,4 +181,4 @@ function M.get_examples() } end -return M \ No newline at end of file +return M diff --git a/example/examples/windows/examples_list.lua b/example/examples/windows/examples_list.lua index da826a3..dbd6210 100644 --- a/example/examples/windows/examples_list.lua +++ b/example/examples/windows/examples_list.lua @@ -12,7 +12,7 @@ function M.get_examples() code_url = "example/examples/windows/window_language/window_language.lua", component_class = require("example.examples.windows.window_language.window_language"), on_create = function(instance, output_list) - ---@cast instance window_language + ---@cast instance examples.window_language instance.on_language_change:subscribe(function(language) output_list:add_log_text("Language changed to " .. language) end) @@ -26,7 +26,7 @@ function M.get_examples() code_url = "example/examples/windows/window_confirmation/window_confirmation.lua", component_class = require("example.examples.windows.window_confirmation.window_confirmation"), on_create = function(instance, output_list) - ---@cast instance window_confirmation + ---@cast instance examples.window_confirmation instance.text_header:translate("ui_confirmation") instance.text_button_accept:translate("ui_confirm") instance.text_button_decline:translate("ui_cancel") @@ -48,7 +48,7 @@ function M.get_examples() code_url = "example/examples/windows/window_info/window_info.lua", component_class = require("example.examples.windows.window_info.window_info"), on_create = function(instance, output_list) - ---@cast instance window_info + ---@cast instance examples.window_info instance.text_header:translate("ui_information") instance.text_button_accept:translate("ui_confirm") instance.text_description:translate("ui_example_window_information_text") @@ -61,4 +61,4 @@ function M.get_examples() } end -return M \ No newline at end of file +return M