/
d.vision
/
division_engine_cpp
Обзор
Документация
Войти
/
d.vision
/
division_engine_cpp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
resources/scripts/views/view_builder.lua
80 строк
2 KB
den163
Improved annotations
27 ноя 2024, 11:06
27 ноя 2024, 11:06
0828538
Код
Авторство
О чём код?
local view = require "views.view" ---@alias view_builder.init_callback fun(state: view_builder.state) ---@alias view_builder.rebuild_callback fun(state: view_builder.state): view ---@class view_builder.options ---@field init view_builder.init_callback? ---@field builder view_builder.rebuild_callback ---@field destroy fun()? ---@class view_builder: view, view_builder.options ---@overload fun(options: view_builder.options): view_builder ---@diagnostic disable-next-line: assign-type-mismatch local view_builder = view:inherit 'view_builder' ---@class view_builder.state: view.state ---@field package _view view_builder ---@field package _render_rect rect ---@field package _builder_result_view view ---@field package _builder_result_view_state view.state view_builder.state = view.state:inherit 'view_builder.state' ---@param options view_builder.options function view_builder:__call(options) assert(options.builder) return view_builder:new(options) end function view_builder:create_state() ---@type view_builder.state local state = view_builder.state:new { _view = self } if self.init then self.init(state) end local result_view = state._view.builder(state) state._builder_result_view = result_view state._builder_result_view_state = result_view:create_state() return state end ---@package ---@param constraints constraints ---@param view view_builder function view_builder.state:layout(constraints, view) return self._builder_result_view_state:layout( constraints, self._builder_result_view ) end ---@package ---@param render_rect rect ---@param view view_builder function view_builder.state:render(render_rect, view) self._render_rect = render_rect self._view = view self._builder_result_view_state:render(self._render_rect, self._builder_result_view) end function view_builder.state:rebuild() local view_result = self._view.builder(self) if not view_result:is_same_view_type(self._builder_result_view) then self._builder_result_view_state:destroy() self._builder_result_view_state = self._builder_result_view:create_state() end self._builder_result_view = view_result self._builder_result_view_state:render(self._render_rect, self._builder_result_view) end ---@package function view_builder.state:destroy() if self._view.destroy then self._view.destroy() end self._builder_result_view_state:destroy() end return view_builder