This commit is contained in:
Insality 2025-03-20 09:46:13 +02:00
parent 10556ba31a
commit 330dabda09
8 changed files with 45 additions and 41 deletions

View File

@ -77,7 +77,7 @@ end
function M:on_style_change(style) function M:on_style_change(style)
self.style = { self.style = {
TRIM_POSTFIX = style.TRIM_POSTFIX or "...", TRIM_POSTFIX = style.TRIM_POSTFIX or "...",
DEFAULT_ADJUST = style.DEFAULT_ADJUST or const.TEXT_ADJUST.DOWNSCALE, DEFAULT_ADJUST = style.DEFAULT_ADJUST or "downscale",
ADJUST_STEPS = style.ADJUST_STEPS or 20, ADJUST_STEPS = style.ADJUST_STEPS or 20,
ADJUST_SCALE_DELTA = style.ADJUST_SCALE_DELTA or 0.02 ADJUST_SCALE_DELTA = style.ADJUST_SCALE_DELTA or 0.02
} }
@ -256,9 +256,7 @@ end
---Set text adjust, refresh the current text visuals, if needed ---Set text adjust, refresh the current text visuals, if needed
---Values are: "downscale", "trim", "no_adjust", "downscale_limited", ---@param adjust_type druid.text.adjust_type|nil The adjust type to set, values: "downscale", "trim", "no_adjust", "downscale_limited", "scroll", "scale_then_scroll", "trim_left", "scale_then_trim", "scale_then_trim_left"
---"scroll", "scale_then_scroll", "trim_left", "scale_then_trim", "scale_then_trim_left"
---@param adjust_type string|nil See const.TEXT_ADJUST. If pass nil - use current adjust type
---@param minimal_scale number|nil To remove minimal scale, use `text:set_minimal_scale(nil)`, if pass nil - not change minimal scale ---@param minimal_scale number|nil To remove minimal scale, use `text:set_minimal_scale(nil)`, if pass nil - not change minimal scale
---@return druid.text self Current text instance ---@return druid.text self Current text instance
function M:set_text_adjust(adjust_type, minimal_scale) function M:set_text_adjust(adjust_type, minimal_scale)
@ -270,7 +268,7 @@ function M:set_text_adjust(adjust_type, minimal_scale)
end end
---Set minimal scale for DOWNSCALE_LIMITED or SCALE_THEN_SCROLL adjust types ---Set minimal scale for "downscale_limited" or "scale_then_scroll" adjust types
---@param minimal_scale number If pass nil - not use minimal scale ---@param minimal_scale number If pass nil - not use minimal scale
---@return druid.text self Current text instance ---@return druid.text self Current text instance
function M:set_minimal_scale(minimal_scale) function M:set_minimal_scale(minimal_scale)
@ -466,42 +464,42 @@ end
---@private ---@private
function M:_update_adjust() function M:_update_adjust()
if not self.adjust_type or self.adjust_type == const.TEXT_ADJUST.NO_ADJUST then if not self.adjust_type or self.adjust_type == "no_adjust" then
self:_reset_default_scale() self:_reset_default_scale()
return return
end end
if self.adjust_type == const.TEXT_ADJUST.DOWNSCALE then if self.adjust_type == "downscale" then
self:_update_text_area_size() self:_update_text_area_size()
end end
if self.adjust_type == const.TEXT_ADJUST.TRIM then if self.adjust_type == "trim" then
self:_update_text_with_trim(self.style.TRIM_POSTFIX) self:_update_text_with_trim(self.style.TRIM_POSTFIX)
end end
if self.adjust_type == const.TEXT_ADJUST.TRIM_LEFT then if self.adjust_type == "trim_left" then
self:_update_text_with_trim_left(self.style.TRIM_POSTFIX) self:_update_text_with_trim_left(self.style.TRIM_POSTFIX)
end end
if self.adjust_type == const.TEXT_ADJUST.DOWNSCALE_LIMITED then if self.adjust_type == "downscale_limited" then
self:_update_text_area_size() self:_update_text_area_size()
end end
if self.adjust_type == const.TEXT_ADJUST.SCROLL then if self.adjust_type == "scroll" then
self:_update_text_with_anchor_shift() self:_update_text_with_anchor_shift()
end end
if self.adjust_type == const.TEXT_ADJUST.SCALE_THEN_SCROLL then if self.adjust_type == "scale_then_scroll" then
self:_update_text_area_size() self:_update_text_area_size()
self:_update_text_with_anchor_shift() self:_update_text_with_anchor_shift()
end end
if self.adjust_type == const.TEXT_ADJUST.SCALE_THEN_TRIM then if self.adjust_type == "scale_then_trim" then
self:_update_text_area_size() self:_update_text_area_size()
self:_update_text_with_trim(self.style.TRIM_POSTFIX) self:_update_text_with_trim(self.style.TRIM_POSTFIX)
end end
if self.adjust_type == const.TEXT_ADJUST.SCALE_THEN_TRIM_LEFT then if self.adjust_type == "scale_then_trim_left" then
self:_update_text_area_size() self:_update_text_area_size()
self:_update_text_with_trim_left(self.style.TRIM_POSTFIX) self:_update_text_with_trim_left(self.style.TRIM_POSTFIX)
end end

View File

@ -79,8 +79,7 @@ M.LAYOUT_MODE = {
STRETCH = gui.ADJUST_STRETCH, STRETCH = gui.ADJUST_STRETCH,
} }
M.SYS_INFO = sys.get_sys_info() M.CURRENT_SYSTEM_NAME = sys.get_sys_info().system_name
M.CURRENT_SYSTEM_NAME = M.SYS_INFO.system_name
M.OS = { M.OS = {
ANDROID = "Android", ANDROID = "Android",

View File

@ -14,11 +14,6 @@ local POSITION_X = hash("position.x")
local SCALE_X = hash("scale.x") local SCALE_X = hash("scale.x")
local SIZE_X = hash("size.x") local SIZE_X = hash("size.x")
M.PROP_SIZE_X = hash("size.x")
M.PROP_SIZE_Y = hash("size.y")
M.PROP_SCALE_X = hash("scale.x")
M.PROP_SCALE_Y = hash("scale.y")
local function get_text_width(text_node) local function get_text_width(text_node)
if text_node then if text_node then
local text_metrics = M.get_text_metrics_from_node(text_node) local text_metrics = M.get_text_metrics_from_node(text_node)

View File

@ -130,7 +130,7 @@ M["input"] = {
M["text"] = { M["text"] = {
TRIM_POSTFIX = "...", TRIM_POSTFIX = "...",
DEFAULT_ADJUST = const.TEXT_ADJUST.DOWNSCALE DEFAULT_ADJUST = "downscale"
} }

View File

@ -491,12 +491,15 @@ end
---@generic T: druid.component ---@generic T: druid.component
---@param widget T The widget class to create ---@param widget T The widget class to create
---@param template string|nil The template name used by widget ---@param template string|nil The template name used by widget
---@param nodes table<hash, node>|node|nil The nodes table from gui.clone_tree or prefab node to use for clone ---@param nodes table<hash, node>|node|string|nil The nodes table from gui.clone_tree or prefab node to use for clone or node id to clone
---@vararg any Additional arguments to pass to the widget's init function ---@vararg any Additional arguments to pass to the widget's init function
---@return T widget The new ready to use widget ---@return T widget The new ready to use widget
function M:new_widget(widget, template, nodes, ...) function M:new_widget(widget, template, nodes, ...)
local instance = create_widget(self, widget) local instance = create_widget(self, widget)
if type(nodes) == "string" then
nodes = gui.get_node(nodes)
end
if type(nodes) == "userdata" then if type(nodes) == "userdata" then
nodes = gui.clone_tree(nodes) --[[@as table<hash, node>]] nodes = gui.clone_tree(nodes) --[[@as table<hash, node>]]
end end
@ -612,7 +615,7 @@ local lang_text = require("druid.extended.lang_text")
---Create LangText component ---Create LangText component
---@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 node. Default: const.TEXT_ADJUST.DOWNSCALE ---@param adjust_type string|nil Adjust type for text node. Default: "downscale"
---@return druid.lang_text lang_text The new lang text component ---@return druid.lang_text lang_text The new lang text component
function M:new_lang_text(node, locale_id, adjust_type) function M:new_lang_text(node, locale_id, adjust_type)
return self:new(lang_text, node, locale_id, adjust_type) return self:new(lang_text, node, locale_id, adjust_type)

View File

@ -8,6 +8,11 @@ local event_queue = require("druid.event_queue")
---@field time number ---@field time number
local M = {} local M = {}
M.PROP_SIZE_X = hash("size.x")
M.PROP_SIZE_Y = hash("size.y")
M.PROP_SCALE_X = hash("scale.x")
M.PROP_SCALE_Y = hash("scale.y")
function M:init(node) function M:init(node)
self.node = self:get_node(node) self.node = self:get_node(node)
self.animation = nil self.animation = nil
@ -42,10 +47,10 @@ function M:get_repeat()
if not self.is_inited then if not self.is_inited then
return 1, 1 return 1, 1
end end
local size_x = gui.get(self.node, helper.PROP_SIZE_X) local size_x = gui.get(self.node, M.PROP_SIZE_X)
local size_y = gui.get(self.node, helper.PROP_SIZE_Y) local size_y = gui.get(self.node, M.PROP_SIZE_Y)
local scale_x = gui.get(self.node, helper.PROP_SCALE_X) local scale_x = gui.get(self.node, M.PROP_SCALE_X)
local scale_y = gui.get(self.node, helper.PROP_SCALE_Y) local scale_y = gui.get(self.node, M.PROP_SCALE_Y)
local repeat_x = (size_x / self.animation.width) / scale_x local repeat_x = (size_x / self.animation.width) / scale_x
local repeat_y = (size_y / self.animation.height) / scale_y local repeat_y = (size_y / self.animation.height) / scale_y

View File

@ -73,11 +73,11 @@ function M.get_examples()
local adjust_index = 1 local adjust_index = 1
local adjust_types = { local adjust_types = {
const.TEXT_ADJUST.DOWNSCALE, "downscale",
const.TEXT_ADJUST.DOWNSCALE_LIMITED, "downscale_limited",
--const.TEXT_ADJUST.SCALE_THEN_SCROLL, -- works bad with container for some reason --"scale_then_scroll", -- works bad with container for some reason
--const.TEXT_ADJUST.SCROLL, -- works bad with container for some reason --"scroll", -- works bad with container for some reason
const.TEXT_ADJUST.TRIM, "trim",
} }
properties_panel:add_button("ui_adjust_next", function() properties_panel:add_button("ui_adjust_next", function()
adjust_index = adjust_index + 1 adjust_index = adjust_index + 1
@ -131,11 +131,11 @@ function M.get_examples()
local adjust_index = 1 local adjust_index = 1
local adjust_types = { local adjust_types = {
const.TEXT_ADJUST.DOWNSCALE, "downscale",
const.TEXT_ADJUST.DOWNSCALE_LIMITED, "downscale_limited",
--const.TEXT_ADJUST.SCALE_THEN_SCROLL, -- works bad with container for some reason --"scale_then_scroll", -- works bad with container for some reason
--const.TEXT_ADJUST.SCROLL, -- works bad with container for some reason --"scroll", -- works bad with container for some reason
const.TEXT_ADJUST.TRIM, "trim",
} }
properties_panel:add_button("ui_adjust_next", function() properties_panel:add_button("ui_adjust_next", function()
adjust_index = adjust_index + 1 adjust_index = adjust_index + 1

View File

@ -11,6 +11,7 @@ Let's see a basic custom component template:
```lua ```lua
local component = require("druid.component") local component = require("druid.component")
---@class my_component: druid.component
local M = component.create("my_component") local M = component.create("my_component")
function M:init(template, nodes, output_string) function M:init(template, nodes, output_string)
@ -25,6 +26,9 @@ end
Basic components are created with the `druid:new()` function: Basic components are created with the `druid:new()` function:
```lua ```lua
local template = "my_component" -- The template name on GUI scene, if nil will take nodes directly by gui.get_node()
local nodes = gui.clone_tree(gui.get_node("my_component/root")) -- We can clone component nodes and init over cloned nodes
local my_component = druid:new("my_component", template, nodes, "Hello world!") local my_component = druid:new("my_component", template, nodes, "Hello world!")
``` ```
@ -64,7 +68,7 @@ Let's start from the beginning. Widgets usually consist of 2 parts:
1. GUI scene 1. GUI scene
2. Widget Lua module 2. Widget Lua module
Make a GUI scene of your widget (user portrait avatar panel, shop window, game panel menu, etc). Design it as you wish, but it's recommended to add one `root` node with the name `root` and make all your other nodes children of this node. This makes working with the widget much easier. Make a GUI scene of your widget (user portrait avatar panel, shop window, game panel menu, etc). Design it as you wish, but it's recommended to add one `root` node with the id `root` and make all your other nodes children of this node. This makes working with the widget much easier. Also ofter this root will represent the widget size, so it's recommended to set it's size to the desired size of the widget.
Let's create a new widget by creating a new file next to our GUI scene file: Let's create a new widget by creating a new file next to our GUI scene file:
@ -101,8 +105,8 @@ function init(self)
-- In case we want to clone it and use several times we can pass the nodes table -- In case we want to clone it and use several times we can pass the nodes table
local array_of_widgets = {} local array_of_widgets = {}
for index = 1, 10 do for index = 1, 10 do
local nodes = gui.clone_tree(self.my_widget.root) -- For widgets now we can use a root node directly instead of manually cloning the nodes
local widget = self.druid:new_widget(my_widget, "my_widget", nodes) local widget = self.druid:new_widget(my_widget, "my_widget", "my_widget/root")
table.insert(array_of_widgets, widget) table.insert(array_of_widgets, widget)
end end
end end