This commit is contained in:
Insality 2025-03-05 21:52:18 +02:00
parent c3b132187a
commit d6bec60ba9
12 changed files with 48 additions and 270 deletions

View File

@ -183,8 +183,6 @@ end
---Start scroll to target point. ---Start scroll to target point.
---@param point vector3 Target point ---@param point vector3 Target point
---@param is_instant boolean|nil Instant scroll flag ---@param is_instant boolean|nil Instant scroll flag
-- @usage scroll:scroll_to(vmath.vector3(0, 50, 0))
-- @usage scroll:scroll_to(vmath.vector3(0), true)
function M:scroll_to(point, is_instant) function M:scroll_to(point, is_instant)
local b = self.available_pos local b = self.available_pos
local target = vmath.vector3( local target = vmath.vector3(
@ -238,7 +236,6 @@ end
---Start scroll to target scroll percent ---Start scroll to target scroll percent
---@param percent vector3 target percent ---@param percent vector3 target percent
---@param is_instant boolean|nil instant scroll flag ---@param is_instant boolean|nil instant scroll flag
-- @usage scroll:scroll_to_percent(vmath.vector3(0.5, 0, 0))
function M:scroll_to_percent(percent, is_instant) function M:scroll_to_percent(percent, is_instant)
local border = self.available_pos local border = self.available_pos

View File

@ -51,15 +51,6 @@ local utf8 = utf8 or utf8_lua
---@field cursor_position vector3 ---@field cursor_position vector3
local M = component.create("druid.rich_input") local M = component.create("druid.rich_input")
--local SCHEME = {
-- ROOT = "root",
-- BUTTON = "button",
-- PLACEHOLDER = "placeholder_text",
-- INPUT = "input_text",
-- CURSOR = "cursor_node",
-- CURSOR_TEXT = "cursor_text",
--}
local DOUBLE_CLICK_TIME = 0.35 local DOUBLE_CLICK_TIME = 0.35
local function animate_cursor(self) local function animate_cursor(self)

View File

@ -127,8 +127,6 @@ local rich_text = require("druid.custom.rich_text.module.rt")
---@field COLORS table<string, vector4> ---@field COLORS table<string, vector4>
---@field ADJUST_STEPS number ---@field ADJUST_STEPS number
---@field ADJUST_SCALE_DELTA number ---@field ADJUST_SCALE_DELTA number
---@field ADJUST_TYPE string
---@field ADJUST_SCALE number
---@class druid.rich_text.lines_metrics ---@class druid.rich_text.lines_metrics
---@field text_width number ---@field text_width number
@ -150,7 +148,6 @@ local rich_text = require("druid.custom.rich_text.module.rt")
local M = component.create("rich_text") local M = component.create("rich_text")
---The RichText constructor
---@param text_node node|string The text node to make Rich Text ---@param text_node node|string The text node to make Rich Text
---@param value string|nil The initial text value. Default will be gui.get_text(text_node) ---@param value string|nil The initial text value. Default will be gui.get_text(text_node)
function M:init(text_node, value) function M:init(text_node, value)
@ -175,18 +172,13 @@ function M:on_layout_change()
end end
---Component style params. ---@param style druid.rich_text.style
-- You can override this component styles params in Druid styles table
-- or create your own style
-- @table style
-- @tfield table|nil COLORS Rich Text color aliases. Default: {}
-- @tfield number|nil ADJUST_STEPS Amount steps of attemps text adjust by height. Default: 20
-- @tfield number|nil ADJUST_SCALE_DELTA Scale step on each height adjust step. Default: 0.02
function M:on_style_change(style) function M:on_style_change(style)
self.style = {} self.style = {
self.style.COLORS = style.COLORS or {} COLORS = style.COLORS or {},
self.style.ADJUST_STEPS = style.ADJUST_STEPS or 20 ADJUST_STEPS = style.ADJUST_STEPS or 20,
self.style.ADJUST_SCALE_DELTA = style.ADJUST_SCALE_DELTA or 0.02 ADJUST_SCALE_DELTA = style.ADJUST_SCALE_DELTA or 0.02,
}
end end

View File

@ -1,22 +0,0 @@
--- For component interest functions
--- see https://github.com/Insality/druid/blob/master/docs_md/02-creating_custom_components.md
--- Require this component in you gui file:
--- $ local {COMPONENT_NAME} = require("{COMPONENT_PATH}")
--- And create this component via:
--- $ self.{COMPONENT_TYPE} = self.druid:new({COMPONENT_NAME}, template, nodes)
local component = require("druid.component")
---@class {COMPONENT_TYPE}: druid.base_component
---@field druid druid_instance{COMPONENT_ANNOTATIONS}
local M = component.create("{COMPONENT_TYPE}")
---@param template string
---@param nodes table<hash, node>
function M:init(template, nodes)
self.druid = self:get_druid(template, nodes){COMPONENT_DEFINE}
end
{COMPONENT_FUNCTIONS}
return M

View File

@ -1,40 +1,3 @@
-- Copyright (c) 2021 Maksim Tuprikov <insality@gmail.com>. This code is licensed under MIT license
---Component to manage data for huge dataset in scroll.
-- It requires Druid Scroll and Druid Grid (Static or Dynamic) components
--
-- <a href="https://insality.github.io/druid/druid/index.html?example=general_data_list" target="_blank"><b>Example Link</b></a>
-- @module DataList
-- @within BaseComponent
-- @alias druid.data_list
---The Druid scroll component
-- @tfield Scroll scroll Scroll
---The Druid Grid component
-- @tfield StaticGrid grid StaticGrid}, @{DynamicGrid
---The current progress of scroll posititon
-- @tfield number scroll_progress
---The current top index of visual elements
-- @tfield number top_index
---The current last index of visual elements
-- @tfield number last_index
---Event triggered when scroll progress is changed; event(self, progress_value)
-- @tfield event on_scroll_progress_change event
---On DataList visual element created Event callback(self, index, node, instance)
-- @tfield event on_element_add event
---On DataList visual element created Event callback(self, index)
-- @tfield event on_element_remove event
---
local const = require("druid.const") local const = require("druid.const")
local helper = require("druid.helper") local helper = require("druid.helper")
local component = require("druid.component") local component = require("druid.component")
@ -46,16 +9,17 @@ local event = require("event.event")
---@field on_scroll_progress_change event ---@field on_scroll_progress_change event
---@field on_element_add event ---@field on_element_add event
---@field on_element_remove event ---@field on_element_remove event
---@field top_index number
---@field last_index number
---@field scroll_progress number
---@field private _create_function function ---@field private _create_function function
---@field private _is_use_cache boolean ---@field private _is_use_cache boolean
---@field private _cache table ---@field private _cache table
---@field private _data table ---@field private _data table
---@field private _data_visual table ---@field private _data_visual table
---@field top_index number
local M = component.create("data_list") local M = component.create("data_list")
---The DataList constructor
---@param scroll druid.scroll The Scroll instance for Data List component ---@param scroll druid.scroll The Scroll instance for Data List component
---@param grid druid.grid The StaticGrid} or @{DynamicGrid instance for Data List component ---@param grid druid.grid The StaticGrid} or @{DynamicGrid instance for Data List component
---@param create_function function The create function callback(self, data, index, data_list). Function should return (node, [component]) ---@param create_function function The create function callback(self, data, index, data_list). Function should return (node, [component])

View File

@ -1,37 +1,14 @@
-- Copyright (c) 2021 Maksim Tuprikov <insality@gmail.com>. This code is licensed under MIT license local event = require("event.event")
---Druid hotkey component
--
-- <a href="https://insality.github.io/druid/druid/index.html?example=general_hotkey" target="_blank"><b>Example Link</b></a>
-- @module Hotkey
-- @within BaseComponent
-- @alias druid.hotkey
---On hotkey released callback(self, argument)
-- @tfield event on_hotkey_pressed event
---On hotkey released callback(self, argument)
-- @tfield event on_hotkey_released event
---Visual node
-- @tfield node node
---Button trigger node
-- @tfield node|nil click_node
---Button component from click_node
-- @tfield Button button Button
---
local helper = require("druid.helper") local helper = require("druid.helper")
local component = require("druid.component") local component = require("druid.component")
local event = require("event.event")
---@class druid.hotkey.style
---@field MODIFICATORS string[]|hash[] The list of action_id as hotkey modificators
---@class druid.hotkey: druid.component ---@class druid.hotkey: druid.component
---@field on_hotkey_pressed event ---@field on_hotkey_pressed event
---@field on_hotkey_released event ---@field on_hotkey_released event
---@field style table ---@field style druid.hotkey.style
---@field private _hotkeys table ---@field private _hotkeys table
---@field private _modificators table ---@field private _modificators table
local M = component.create("hotkey") local M = component.create("hotkey")
@ -56,17 +33,17 @@ function M:init(keys, callback, callback_argument)
end end
---Component style params. ---@param style druid.hotkey.style
-- You can override this component styles params in druid styles table
-- or create your own style
-- @table style
-- @tfield string[] MODIFICATORS The list of action_id as hotkey modificators
function M:on_style_change(style) function M:on_style_change(style)
self.style = {} self.style = {
self.style.MODIFICATORS = style.MODIFICATORS or {} MODIFICATORS = style.MODIFICATORS or {},
}
for index = 1, #style.MODIFICATORS do for index = 1, #style.MODIFICATORS do
self.style.MODIFICATORS[index] = hash(self.style.MODIFICATORS[index]) local modificator = style.MODIFICATORS[index]
if type(modificator) == "string" then
self.style.MODIFICATORS[index] = hash(modificator)
end
end end
end end
@ -132,6 +109,9 @@ function M:on_focus_gained()
end end
---@param action_id hash|nil
---@param action action
---@return boolean
function M:on_input(action_id, action) function M:on_input(action_id, action)
if not action_id then if not action_id then
return false return false

View File

@ -1,36 +1,6 @@
-- Copyright (c) 2021 Maksim Tuprikov <insality@gmail.com>. This code is licensed under MIT license
---Component to wrap over GUI Text nodes with localization helpers
--
-- <b># Overview #</b>
--
-- • The initialization of druid.set_text_function is required to enable localization
-- using the localization ID.
--
-- • The LangText component supports up to 7 string format parameters.
-- This limitation exists due to certain issues with using ... arguments.
--
-- <b># Notes #</b>
--
-- <a href="https://insality.github.io/druid/druid/index.html?example=texts_lang_text" target="_blank"><b>Example Link</b></a>
-- @module LangText
-- @within BaseComponent
-- @alias druid.lang_text
---On change text callback
-- @tfield event on_change event
---The text component
-- @tfield Text text Text
---Text node
-- @tfield node node
---
local event = require("event.event") local event = require("event.event")
local settings = require("druid.system.settings")
local component = require("druid.component") local component = require("druid.component")
local settings = require("druid.system.settings")
---@class druid.lang_text: druid.component ---@class druid.lang_text: druid.component
---@field text druid.text ---@field text druid.text
@ -41,7 +11,6 @@ local component = require("druid.component")
local M = component.create("lang_text") local M = component.create("lang_text")
---The LangText constructor
---@param node string|node The node_id or gui.get_node(node_id) ---@param node string|node The node_id or gui.get_node(node_id)
---@param locale_id string|nil Default locale id or text from node as default ---@param locale_id string|nil Default locale id or text from node as default
---@param adjust_type string|nil Adjust type for text. By default is DOWNSCALE. Look const.TEXT_ADJUST for reference ---@param adjust_type string|nil Adjust type for text. By default is DOWNSCALE. Look const.TEXT_ADJUST for reference
@ -110,4 +79,5 @@ function M:format(...)
return self return self
end end
return M return M

View File

@ -33,8 +33,7 @@ local component = require("druid.component")
---@field on_size_changed event.on_size_changed ---@field on_size_changed event.on_size_changed
local M = component.create("layout") local M = component.create("layout")
---Layout component constructor
---@local
---@param node_or_node_id node|string ---@param node_or_node_id node|string
---@param layout_type druid.layout.mode ---@param layout_type druid.layout.mode
function M:init(node_or_node_id, layout_type) function M:init(node_or_node_id, layout_type)
@ -60,7 +59,6 @@ function M:init(node_or_node_id, layout_type)
end end
---@local
function M:update() function M:update()
if not self.is_dirty then if not self.is_dirty then
return return

View File

@ -1,58 +1,16 @@
-- Copyright (c) 2021 Maksim Tuprikov <insality@gmail.com>. This code is licensed under MIT license
---Druid component to handle the progress bars.
-- <b># Overview #</b>
--
-- <b># Notes #</b>
--
-- • Progress Node should be fully filled in your GUI scene node. It will be the progress maximum size
--
-- • Progress correct working with Slice9 nodes, it trying to set size by _set_size_ first, if it is not possible, it set up sizing via _set_scale_
--
-- • Progress bar can fill only by vertical or horizontal size. If you want make diagonal progress bar, just rotate node in GUI scene
--
-- • If you have glitchy or dark texture bug with progress bar, try to disable mipmaps in your texture profiles
--
--
-- <a href="https://insality.github.io/druid/druid/index.html?example=general_progress_bar" target="_blank"><b>Example Link</b></a>
-- @module Progress
-- @within BaseComponent
-- @alias druid.progress
---On progress bar change callback(self, new_value)
-- @tfield event on_change event
---Progress bar fill node
-- @tfield node node
---The progress bar direction.
--
-- The values are: "x" or "y". (const.SIDE.X or const.SIDE.Y)
-- @tfield string key
---Current progress bar scale
-- @tfield vector3 scale
---Current progress bar size
-- @tfield vector3 size
---Maximum size of progress bar
-- @tfield number max_size
---Progress bar slice9 settings
-- @tfield vector4 slice
---
local event = require("event.event") local event = require("event.event")
local const = require("druid.const") local const = require("druid.const")
local helper = require("druid.helper") local helper = require("druid.helper")
local component = require("druid.component") local component = require("druid.component")
---@class druid.progress.style
---@field SPEED number|nil Progress bas fill rate. More -> faster. Default: 5
---@field MIN_DELTA number|nil Minimum step to fill progress bar. Default: 0.005
---@class druid.progress: druid.component ---@class druid.progress: druid.component
---@field node node ---@field node node
---@field on_change event ---@field on_change event
---@field style table ---@field style druid.progress.style
---@field key string ---@field key string
---@field prop hash ---@field prop hash
local M = component.create("progress") local M = component.create("progress")
@ -117,16 +75,12 @@ local function set_bar_to(self, set_to, is_silent)
end end
---Component style params. ---@param style druid.progress.style
-- You can override this component styles params in druid styles table
-- or create your own style
-- @table style
-- @tfield number|nil SPEED Progress bas fill rate. More -> faster. Default: 5
-- @tfield number|nil MIN_DELTA Minimum step to fill progress bar. Default: 0.005
function M:on_style_change(style) function M:on_style_change(style)
self.style = {} self.style = {
self.style.SPEED = style.SPEED or 5 SPEED = style.SPEED or 5,
self.style.MIN_DELTA = style.MIN_DELTA or 0.005 MIN_DELTA = style.MIN_DELTA or 0.005,
}
end end
@ -166,7 +120,6 @@ end
function M:on_remove() function M:on_remove()
-- Return default size
gui.set_size(self.node, self.max_size) gui.set_size(self.node, self.max_size)
end end
@ -220,7 +173,6 @@ end
---Set points on progress bar to fire the callback ---Set points on progress bar to fire the callback
---@param steps number[] Array of progress bar values ---@param steps number[] Array of progress bar values
---@param callback function Callback on intersect step value ---@param callback function Callback on intersect step value
-- @usage progress:set_steps({0, 0.3, 0.6, 1}, function(self, step) end)
function M:set_steps(steps, callback) function M:set_steps(steps, callback)
self.steps = steps self.steps = steps
self.step_callback = callback self.step_callback = callback

View File

@ -1,42 +1,3 @@
-- Copyright (c) 2021 Maksim Tuprikov <insality@gmail.com>. This code is licensed under MIT license
---Druid slider component
--
-- <a href="https://insality.github.io/druid/druid/index.html?example=general_sliders" target="_blank"><b>Example Link</b></a>
-- @module Slider
-- @within BaseComponent
-- @alias druid.slider
---On change value callback(self, value)
-- @tfield event on_change_value event
---Slider pin node
-- @tfield node node
---Start pin node position
-- @tfield vector3 start_pos
---Current pin node position
-- @tfield vector3 pos
---Targer pin node position
-- @tfield vector3 target_pos
---End pin node position
-- @tfield vector3 end_pos
---Length between start and end position
-- @tfield vector3 dist
---Current drag state
-- @tfield boolean is_drag
---Current slider value
-- @tfield number value
---
local event = require("event.event") local event = require("event.event")
local helper = require("druid.helper") local helper = require("druid.helper")
local const = require("druid.const") local const = require("druid.const")
@ -209,9 +170,8 @@ end
---Set slider steps. Pin node will ---Set slider steps. Pin node will
-- apply closest step position ---apply closest step position
---@param steps number[] Array of steps ---@param steps number[] Array of steps
-- @usage slider:set_steps({0, 0.2, 0.6, 1})
---@return druid.slider Slider ---@return druid.slider Slider
function M:set_steps(steps) function M:set_steps(steps)
self.steps = steps self.steps = steps
@ -220,9 +180,9 @@ end
---Set input zone for slider. ---Set input zone for slider.
-- User can touch any place of node, pin instantly will ---User can touch any place of node, pin instantly will
-- move at this position and node drag will start. ---move at this position and node drag will start.
-- This function require the Defold version 1.3.0+ ---This function require the Defold version 1.3.0+
---@param input_node node|string|nil ---@param input_node node|string|nil
---@return druid.slider Slider ---@return druid.slider Slider
function M:set_input_node(input_node) function M:set_input_node(input_node)

View File

@ -3,9 +3,6 @@ local const = require("druid.const")
local helper = require("druid.helper") local helper = require("druid.helper")
local component = require("druid.component") local component = require("druid.component")
---Component style params.
---You can override this component styles params in druid styles table
---or create your own style
---@class druid.swipe.style ---@class druid.swipe.style
---@field SWIPE_TIME number|nil Maximum time for swipe trigger. Default: 0.4 ---@field SWIPE_TIME number|nil Maximum time for swipe trigger. Default: 0.4
---@field SWIPE_THRESHOLD number|nil Minimum distance for swipe trigger. Default: 50 ---@field SWIPE_THRESHOLD number|nil Minimum distance for swipe trigger. Default: 50
@ -26,14 +23,14 @@ local M = component.create("swipe")
---@param style druid.swipe.style ---@param style druid.swipe.style
function M:on_style_change(style) function M:on_style_change(style)
self.style = {} self.style = {
self.style.SWIPE_TIME = style.SWIPE_TIME or 0.4 SWIPE_TIME = style.SWIPE_TIME or 0.4,
self.style.SWIPE_THRESHOLD = style.SWIPE_THRESHOLD or 50 SWIPE_THRESHOLD = style.SWIPE_THRESHOLD or 50,
self.style.SWIPE_TRIGGER_ON_MOVE = style.SWIPE_TRIGGER_ON_MOVE or false SWIPE_TRIGGER_ON_MOVE = style.SWIPE_TRIGGER_ON_MOVE or false,
}
end end
---Swipe constructor
---@param node_or_node_id node|string ---@param node_or_node_id node|string
---@param on_swipe_callback function ---@param on_swipe_callback function
function M:init(node_or_node_id, on_swipe_callback) function M:init(node_or_node_id, on_swipe_callback)
@ -97,7 +94,7 @@ end
---Strict swipe click area. Useful for ---Strict swipe click area. Useful for
-- restrict events outside stencil node ---restrict events outside stencil node
---@param zone node|string|nil Gui node ---@param zone node|string|nil Gui node
function M:set_click_zone(zone) function M:set_click_zone(zone)
if not zone then if not zone then

View File

@ -6,7 +6,6 @@ local component = require("druid.component")
---@field on_tick event ---@field on_tick event
---@field on_set_enabled event ---@field on_set_enabled event
---@field on_timer_end event ---@field on_timer_end event
---@field style table
---@field node node ---@field node node
---@field from number ---@field from number
---@field target number ---@field target number