Update components interests link

This commit is contained in:
Insality 2024-11-21 22:38:40 +02:00
parent 5a1668a8af
commit af44d0d26e
4 changed files with 34 additions and 38 deletions

View File

@ -39,29 +39,6 @@ local M = {}
local INTERESTS = {} -- Cache interests per component class in runtime
-- Component Interests
M.ON_INPUT = const.ON_INPUT
M.ON_UPDATE = const.ON_UPDATE
M.ON_MESSAGE = const.ON_MESSAGE
M.ON_LATE_INIT = const.ON_LATE_INIT
M.ON_FOCUS_LOST = const.ON_FOCUS_LOST
M.ON_FOCUS_GAINED = const.ON_FOCUS_GAINED
M.ON_LAYOUT_CHANGE = const.ON_LAYOUT_CHANGE
M.ON_WINDOW_RESIZED = const.ON_WINDOW_RESIZED
M.ON_LANGUAGE_CHANGE = const.ON_LANGUAGE_CHANGE
M.ALL_INTERESTS = {
M.ON_INPUT,
M.ON_UPDATE,
M.ON_MESSAGE,
M.ON_LATE_INIT,
M.ON_FOCUS_LOST,
M.ON_FOCUS_GAINED,
M.ON_LAYOUT_CHANGE,
M.ON_WINDOW_RESIZED,
M.ON_LANGUAGE_CHANGE,
}
local uid = 0
function M.create_uid()
@ -310,8 +287,8 @@ function M:__get_interests()
end
local interests = {}
for index = 1, #M.ALL_INTERESTS do
local interest = M.ALL_INTERESTS[index]
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

View File

@ -27,6 +27,18 @@ M.ON_LAYOUT_CHANGE = "on_layout_change"
M.ON_WINDOW_RESIZED = "on_window_resized"
M.ON_LANGUAGE_CHANGE = "on_language_change"
M.ALL_INTERESTS = {
M.ON_INPUT,
M.ON_UPDATE,
M.ON_MESSAGE,
M.ON_LATE_INIT,
M.ON_FOCUS_LOST,
M.ON_FOCUS_GAINED,
M.ON_LAYOUT_CHANGE,
M.ON_WINDOW_RESIZED,
M.ON_LANGUAGE_CHANGE,
}
M.MSG_LAYOUT_CHANGED = hash("layout_changed")
-- Components with higher priority value processed first

View File

@ -49,7 +49,7 @@ end
local function sort_input_stack(self)
local input_components = self.components_interest[base_component.ON_INPUT]
local input_components = self.components_interest[const.ON_INPUT]
if not input_components then
return
end
@ -215,8 +215,8 @@ function M:initialize(context, style)
self.components_all = {}
self.components_interest = {}
for i = 1, #base_component.ALL_INTERESTS do
self.components_interest[base_component.ALL_INTERESTS[i]] = {}
for i = 1, #const.ALL_INTERESTS do
self.components_interest[const.ALL_INTERESTS[i]] = {}
end
events.subscribe("druid.window_event", self.on_window_event, self)
@ -319,13 +319,13 @@ end
-- An example use case is performing an auto stencil check in the GUI hierarchy for input components.
---@private
function M:late_init()
local late_init_components = self.components_interest[base_component.ON_LATE_INIT]
local late_init_components = self.components_interest[const.ON_LATE_INIT]
while late_init_components[1] do
late_init_components[1]:on_late_init()
table.remove(late_init_components, 1)
end
if not self.input_inited and #self.components_interest[base_component.ON_INPUT] > 0 then
if not self.input_inited and #self.components_interest[const.ON_INPUT] > 0 then
-- Input init on late init step, to be sure it goes after user go acquire input
set_input_state(self, true)
end
@ -337,7 +337,7 @@ end
function M:update(dt)
self._is_late_remove_enabled = true
local components = self.components_interest[base_component.ON_UPDATE]
local components = self.components_interest[const.ON_UPDATE]
for i = 1, #components do
components[i]:update(dt)
end
@ -354,7 +354,7 @@ end
function M:on_input(action_id, action)
self._is_late_remove_enabled = true
local components = self.components_interest[base_component.ON_INPUT]
local components = self.components_interest[const.ON_INPUT]
check_sort_input_stack(self, components)
local is_input_consumed = process_input(self, action_id, action, components)
@ -372,13 +372,13 @@ end
function M:on_message(message_id, message, sender)
if message_id == const.MSG_LAYOUT_CHANGED then
-- Resend special message to all components with the related interest
local components = self.components_interest[base_component.ON_LAYOUT_CHANGE]
local components = self.components_interest[const.ON_LAYOUT_CHANGE]
for i = 1, #components do
components[i]:on_layout_change()
end
else
-- Resend message to all components with on_message interest
local components = self.components_interest[base_component.ON_MESSAGE]
local components = self.components_interest[const.ON_MESSAGE]
for i = 1, #components do
components[i]:on_message(message_id, message, sender)
end
@ -388,17 +388,17 @@ end
function M:on_window_event(window_event)
if window_event == window.WINDOW_EVENT_FOCUS_LOST then
local components = self.components_interest[base_component.ON_FOCUS_LOST]
local components = self.components_interest[const.ON_FOCUS_LOST]
for i = 1, #components do
components[i]:on_focus_lost()
end
elseif window_event == window.WINDOW_EVENT_FOCUS_GAINED then
local components = self.components_interest[base_component.ON_FOCUS_GAINED]
local components = self.components_interest[const.ON_FOCUS_GAINED]
for i = 1, #components do
components[i]:on_focus_gained()
end
elseif window_event == window.WINDOW_EVENT_RESIZED then
local components = self.components_interest[base_component.ON_WINDOW_RESIZED]
local components = self.components_interest[const.ON_WINDOW_RESIZED]
for i = 1, #components do
components[i]:on_window_resized()
end
@ -411,7 +411,7 @@ end
-- call manualy to update all translations
---@private
function M:on_language_change()
local components = self.components_interest[base_component.ON_LANGUAGE_CHANGE]
local components = self.components_interest[const.ON_LANGUAGE_CHANGE]
for i = 1, #components do
components[i]:on_language_change()
end

View File

@ -212,6 +212,13 @@ function M:add_left_right_selector(text, value, on_change_callback)
end
---@param widget druid.widget
function M:add_widget(widget)
self:add_property(widget)
end
---@private
function M:create_from_prefab(widget_class, widget_name, prefab)
local instance = self.druid:new_widget(widget_class, widget_name, prefab)