Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
Insality committed Nov 27, 2024
1 parent 06f682e commit 434dce5
Show file tree
Hide file tree
Showing 16 changed files with 238 additions and 143 deletions.
6 changes: 5 additions & 1 deletion druid/base/drag.lua
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,18 @@ local const = require("druid.const")
local helper = require("druid.helper")
local component = require("druid.component")

---@class druid.drag.style
---@field DRAG_DEADZONE number Distance in pixels to start dragging. Default: 10
---@field NO_USE_SCREEN_KOEF boolean If screen aspect ratio affects on drag values. Default: false

---@class druid.drag: druid.base_component
---@field node node
---@field on_touch_start event
---@field on_touch_end event
---@field on_drag_start event
---@field on_drag event
---@field on_drag_end event
---@field style table
---@field style druid.drag.style
---@field click_zone node|nil
---@field is_touch boolean
---@field is_drag boolean
Expand Down
2 changes: 1 addition & 1 deletion druid/bindings.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ local M = {}
local WRAPPED_WIDGETS = {}

---Set a widget to the current game object. The game object can acquire the widget by calling `bindings.get_widget`
---It wraps only top level functions, so no access to nested widgets
---It wraps with events only top level functions cross-context, so no access to nested widgets functions
---@param widget druid.widget
function M.set_widget(widget)
local object = msg.url()
Expand Down
11 changes: 8 additions & 3 deletions druid/component.lua
Original file line number Diff line number Diff line change
Expand Up @@ -81,15 +81,20 @@ function M:set_template(template)
local parent = self:get_parent_component()
if parent then
local parent_template = parent:get_template()
if #parent_template > 0 then
if parent_template and #parent_template > 0 then
if #template > 0 then
template = "/" .. template
end
template = parent_template .. template
end
end

self._meta.template = template
if template ~= "" then
self._meta.template = template
else
self._meta.template = nil
end

return self
end

Expand Down Expand Up @@ -127,7 +132,7 @@ end

---Get Druid instance for inner component creation.
---@param template string|nil
---@param nodes table<hash, node>|nil
---@param nodes table<string|hash, node>|nil
---@return druid_instance
function M:get_druid(template, nodes)
local context = { _context = self }
Expand Down
38 changes: 37 additions & 1 deletion druid/custom/rich_text/rich_text.lua
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,42 @@
local component = require("druid.component")
local rich_text = require("druid.custom.rich_text.module.rt")

---@class druid.rich_text.word
---@field node node
---@field relative_scale number
---@field color vector4
---@field position vector3
---@field offset vector3
---@field scale vector3
---@field size vector3
---@field metrics druid.rich_text.metrics
---@field pivot userdata
---@field text string
---@field shadow vector4
---@field outline vector4
---@field font string
---@field image druid.rich_text.word.image
---@field br boolean
---@field nobr boolean

---@class druid.rich_text.word.image
---@field texture string
---@field anim string
---@field width number
---@field height number

---@class druid.rich_text.lines_metrics
---@field text_width number
---@field text_height number
---@field lines table<number, druid.rich_text.metrics>

---@class druid.rich_text.metrics
---@field width number
---@field height number
---@field offset_x number|nil
---@field offset_y number|nil
---@field node_size vector3|nil

---@class druid.rich_text: druid.base_component
---@field root node
---@field text_prefab node
Expand Down Expand Up @@ -231,7 +267,7 @@ end


--- Get all current words.
---@return table druid.rich_text.word[]
---@return druid.rich_text.word[]
function M:get_words()
return self._words
end
Expand Down
2 changes: 1 addition & 1 deletion druid/extended/input.lua
Original file line number Diff line number Diff line change
Expand Up @@ -373,7 +373,7 @@ function M:set_text(input_text)
self.is_empty = #value == 0 and #marked_value == 0

local final_text = value .. marked_value
self.text:set_to(final_text)
self.text:set_text(final_text)

-- measure it
self.text_width = self.text:get_text_size(value)
Expand Down
14 changes: 11 additions & 3 deletions druid/extended/lang_text.lua
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,21 @@ end
---@return druid.lang_text Current instance
function M:set_to(text)
self.last_locale = false
self.text:set_to(text)
self.text:set_text(text)
self.on_change:trigger()

return self
end


--- Setup raw text to lang_text component
---@param text string Text for text node
---@return druid.lang_text Current instance
function M:set_text(text)
return self:set_to(text)
end


--- Translate the text by locale_id
---@param locale_id string Locale id
---@param a string|nil Optional param to string.format
Expand All @@ -92,7 +100,7 @@ end
function M:translate(locale_id, a, b, c, d, e, f, g)
self.last_locale_args = { a, b, c, d, e, f, g }
self.last_locale = locale_id or self.last_locale
self.text:set_to(settings.get_text(self.last_locale, a, b, c, d, e, f, g) or "")
self.text:set_text(settings.get_text(self.last_locale, a, b, c, d, e, f, g) or "")

return self
end
Expand All @@ -109,7 +117,7 @@ end
---@return druid.lang_text Current instance
function M:format(a, b, c, d, e, f, g)
self.last_locale_args = { a, b, c, d, e, f, g }
self.text:set_to(settings.get_text(self.last_locale, a, b, c, d, e, f, g) or "")
self.text:set_text(settings.get_text(self.last_locale, a, b, c, d, e, f, g) or "")

return self
end
Expand Down
9 changes: 6 additions & 3 deletions druid/extended/layout.lua
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,9 @@ function M:init(node_or_node_id, layout_type)
self.size = gui.get_size(self.node)

self.padding = gui.get_slice9(self.node)
-- Grab default margins from slice9 z/w values
self.margin = { x = self.padding.z, y = self.padding.w }
-- Use symmetrical padding from x/z
self.padding.z = self.padding.x
self.padding.w = self.padding.y

Expand Down Expand Up @@ -199,10 +201,11 @@ function M:get_size()
end


---@return vector3
---@return number, number
function M:get_content_size()
local rows_data = self:calculate_rows_data()
return vmath.vector3(rows_data.total_width, rows_data.total_height, 0)
local width = self.size.x - self.padding.x - self.padding.z
local height = self.size.y - self.padding.y - self.padding.w
return width, height
end


Expand Down
3 changes: 1 addition & 2 deletions druid/system/druid_instance.lua
Original file line number Diff line number Diff line change
Expand Up @@ -476,14 +476,13 @@ end
---@generic T: druid.base_component
---@param widget T
---@param template string|nil The template name used by widget
---@param nodes table|node|nil The nodes table from gui.clone_tree or prefab node to use for clone
---@param nodes table<string|hash, node>|node|nil The nodes table from gui.clone_tree or prefab node to use for clone
---@vararg any
---@return T
function M:new_widget(widget, template, nodes, ...)
local instance = create_widget(self, widget)

if type(nodes) == "userdata" then
-- It's a node, we will use it as a root node to make nodes
nodes = gui.clone_tree(nodes)
end

Expand Down
10 changes: 9 additions & 1 deletion druid/widget/properties_panel/properties/property_button.lua
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ local M = {}
function M:init()
self.root = self:get_node("root")
self.text_name = self.druid:new_text("text_name")
:set_text_adjust("scale_then_trim_left", 0.3)
:set_text_adjust("scale_then_trim", 0.3)

self.selected = self:get_node("selected")
gui.set_alpha(self.selected, 0)
Expand All @@ -34,6 +34,14 @@ function M:on_click()
end


---@param text string
---@return widget.property_button
function M:set_text_property(text)
self.text_name:set_text(text)
return self
end


---@param text string
---@return widget.property_button
function M:set_text_button(text)
Expand Down
21 changes: 20 additions & 1 deletion druid/widget/properties_panel/properties/property_checkbox.lua
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
local event = require("event.event")

---@class widget.property_checkbox: druid.widget
---@field root node
---@field druid druid_instance
Expand All @@ -17,13 +19,15 @@ function M:init()
gui.set_alpha(self.selected, 0)

self.text_name = self.druid:new_text("text_name")
:set_text_adjust("scale_then_trim_left", 0.3)
:set_text_adjust("scale_then_trim", 0.3)

self.button = self.druid:new_button("button", self.on_click)

self.container = self.druid:new_container(self.root)
self.container:add_container("text_name")
self.container:add_container("E_Anchor")

self.on_change_value = event.create()
end


Expand All @@ -35,6 +39,7 @@ function M:set_value(value, is_instant)

self._value = value
gui.set_enabled(self.icon, value)
self.on_change_value:trigger(value)

if not is_instant then
gui.set_alpha(self.selected, 1)
Expand All @@ -54,4 +59,18 @@ function M:on_click()
end


--- Set the text property of the checkbox
---@param text string
function M:set_text_property(text)
self.text_name:set_text(text)
end


--- Set the callback function for when the checkbox value changes
---@param callback function
function M:on_change(callback)
self.on_change_value:subscribe(callback)
end


return M
21 changes: 16 additions & 5 deletions druid/widget/properties_panel/properties/property_input.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@
---@field container druid.container
---@field text_name druid.text
---@field button druid.button
---@field text_button druid.text
---@field druid druid_instance
local M = {}

function M:init()
self.root = self:get_node("root")
self.text_name = self.druid:new_text("text_name")
:set_text_adjust("scale_then_trim_left", 0.3)
:set_text_adjust("scale_then_trim", 0.3)

self.selected = self:get_node("selected")
gui.set_alpha(self.selected, 0)
Expand All @@ -30,11 +29,23 @@ end


---@param text string
---@return property_input
function M:set_text_button(text)
self.text_button:set_text(text)
---@return widget.property_input
function M:set_text_property(text)
self.text_name:set_text(text)
return self
end

---@param text string
---@return widget.property_input
function M:set_text_value(text)
self.rich_input:set_text(text)
return self
end


function M:on_change(callback, callback_context)
self.rich_input.input.on_input_unselect:subscribe(callback, callback_context)
end


return M
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ local event = require("event.event")
---@field button druid.button
---@field selected node
---@field value string|number
---@field on_change_value event fun(value: string|number)
local M = {}


Expand All @@ -16,7 +17,7 @@ function M:init()
gui.set_alpha(self.selected, 0)

self.text_name = self.druid:new_text("text_name")
:set_text_adjust("scale_then_trim_left", 0.3)
:set_text_adjust("scale_then_trim", 0.3)

self.text_value = self.druid:new_text("text_value")
self.button_left = self.druid:new_button("button_left", self.on_button_left)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ nodes {
z: 0.49
}
type: TYPE_BOX
texture: "druid/rect_round2_width1"
texture: "druid/rect_round2_width2"
id: "button"
pivot: PIVOT_E
parent: "E_Anchor"
Expand Down
16 changes: 15 additions & 1 deletion druid/widget/properties_panel/properties/property_slider.lua
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ function M:init()
self.max = 1

self.text_name = self.druid:new_text("text_name")
:set_text_adjust("scale_then_trim_left", 0.3)
:set_text_adjust("scale_then_trim", 0.3)

self.text_value = self.druid:new_text("text_value")
self.slider = self.druid:new_slider("slider_pin", vmath.vector3(55, 0, 0), self.update_value) --[[@as druid.slider]]
Expand All @@ -46,6 +46,20 @@ function M:set_text_function(callback)
end


--- Sets the text property of the slider
---@param text string
function M:set_text_property(text)
self.text_name:set_text(text)
end


--- Sets the callback function for when the slider value changes
---@param callback fun(value:number)
function M:on_change(callback)
self.on_change_value:subscribe(callback)
end


---@param value number
function M:set_value(value, is_instant)
local diff = math.abs(self.max - self.min)
Expand Down
4 changes: 2 additions & 2 deletions druid/widget/properties_panel/properties/property_text.lua
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ end

---@param text string
---@return widget.property_text
function M:set_text(text)
function M:set_text_property(text)
self.text_name:set_text(text)
return self
end


---@param text string|nil
---@return widget.property_text
function M:set_right_text(text)
function M:set_text_value(text)
self.text_right:set_text(text or "")
return self
end
Expand Down
Loading

0 comments on commit 434dce5

Please sign in to comment.