/
d.vision
/
division_engine_cpp
Обзор
Документация
Войти
/
d.vision
/
division_engine_cpp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
resources/scripts/views/sized_box.lua
48 строк
2 KB
den163
Improved annotations
27 ноя 2024, 11:06
27 ноя 2024, 11:06
0828538
Код
Авторство
О чём код?
local constrained_size = require 'constrained_size' local single_child_view = require "views.single_child_view" local vec2 = require "vec2" local math_extended = require "math_extended" ---@class sized_box.options ---@field width number? ---@field height number? ---@field child view ---@class sized_box: single_child_view, sized_box.options ---@overload fun(options: sized_box.options): sized_box ---@diagnostic disable-next-line: assign-type-mismatch local sized_box = single_child_view:inherit 'sized_box' ---@class sized_box.state: single_child_view.state sized_box.state = single_child_view.state:inherit 'sized_box.state' ---@param options sized_box.options function sized_box:__call(options) assert(options.child) return sized_box:new(options) end ---@param constraints constraints ---@param v sized_box function sized_box.state:layout(constraints, v) return constrained_size( v.width ~= nil and math_extended.clamp(v.width, constraints.min_size.x, constraints.max_size.x) or nil, v.height ~= nil and math_extended.clamp(v.height, constraints.min_size.y, constraints.max_size.y) or nil ) end ---@param render_rect rect ---@param view sized_box function sized_box.state:render(render_rect, view) local render_rect = render_rect:copy() local size = constrained_size(view.width, view.height):to_vec2_or(render_rect:size()) render_rect.extents = render_rect.extents:clamp(vec2(0), size * 0.5) self.child_state:render(render_rect, view.child) end return sized_box