57 lines
2.0 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local Constraints = require "lib.simple_ui.core.constraints"
local Vec3 = require "lib.utils.vec3"
--- @class UIElement
--- @field key? any Must be convertible to string
--- @field type string
--- @field _parent_? UIElement
--- @field _constraints_ Constraints
--- @field _offset_ Vec3 Положение левого верхнего угла элемента в локальных координатах {x, y}. Устанавливается родительским элементом.
--- @field _size_ Vec3 Размеры элемента {x, y}
local element = {}
element.__index = element
element.type = "Element"
element._constraints_ = Constraints {}
element._offset_ = Vec3 {}
element._size_ = Vec3 {}
--- "Constraints go down. Sizes go up. Parent sets position."
---
--- Karl Marx, probably.
function element:layout() end
function element:update(dt) end
function element:draw() end
function element:debugDraw()
love.graphics.setColor(1, 0, 0)
love.graphics.line(0, 0, self._size_.x, 0)
love.graphics.line(0, 0, 0, self._size_.y)
love.graphics.line(self._size_.x, 0, self._size_.x,
self._size_.y)
love.graphics.line(0, self._size_.y, self._size_.x,
self._size_.y)
love.graphics.setColor(1, 1, 1)
end
--- Рекурсивно обходит дерево элементов вверх, начиная с первого родителя.
---
--- К каждому посещенному элементу применяет функцию visitor.
---
--- Обход заканчивается, если visitor возвращает false, или если родители кончились.
--- @param visitor fun(element: UIElement): boolean
function element:traverseUp(visitor)
if not self._parent_ then return end
if not visitor(self._parent_) then return end
return self._parent_:traverseUp(visitor)
end
--- @param values {[string]: any}
--- @return UIElement
function element:new(values)
return setmetatable(values, self)
end
return element