implement UIElement.debugDraw
This commit is contained in:
parent
cfe8f83087
commit
1febc65922
@ -1,18 +1,20 @@
|
|||||||
local Element = require "lib.simple_ui.core.element"
|
|
||||||
|
|
||||||
--- Объект, который отвечает за работу с элементами интерфейса одного экрана
|
--- Объект, который отвечает за работу с элементами интерфейса одного экрана
|
||||||
--- @class UIBuilder
|
--- @class UIBuilder
|
||||||
--- @field builder fun(): UIElement
|
--- @field builder fun(): UIElement
|
||||||
|
--- @field debugDraw boolean
|
||||||
--- @field private states {string: table}
|
--- @field private states {string: table}
|
||||||
--- @field private elementTree UIElement
|
--- @field private elementTree UIElement
|
||||||
local builder = {}
|
local builder = {}
|
||||||
builder.__index = builder
|
builder.__index = builder
|
||||||
|
|
||||||
|
--- @param cfg {debugDraw: boolean?, builder: (fun(): UIElement)}
|
||||||
--- @return UIBuilder
|
--- @return UIBuilder
|
||||||
local function new(from)
|
function builder.new(cfg)
|
||||||
from.states = {}
|
local t = setmetatable(cfg, builder)
|
||||||
setmetatable(from, builder)
|
t.states = {}
|
||||||
return from
|
t.builder = cfg.builder
|
||||||
|
t.debugDraw = cfg.debugDraw or false
|
||||||
|
return cfg
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @param newNode UIElement?
|
--- @param newNode UIElement?
|
||||||
@ -103,6 +105,9 @@ end
|
|||||||
|
|
||||||
function builder:draw()
|
function builder:draw()
|
||||||
self.elementTree:draw()
|
self.elementTree:draw()
|
||||||
|
if self.debugDraw then
|
||||||
|
self.elementTree:debugDraw()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return new
|
return builder.new
|
||||||
|
|||||||
@ -24,6 +24,17 @@ function element:update(dt) end
|
|||||||
|
|
||||||
function element:draw() 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.
|
||||||
|
|||||||
@ -24,17 +24,18 @@ function element:draw()
|
|||||||
for _, child in ipairs(self._children_) do
|
for _, child in ipairs(self._children_) do
|
||||||
child:draw()
|
child:draw()
|
||||||
end
|
end
|
||||||
|
love.graphics.pop()
|
||||||
|
end
|
||||||
|
|
||||||
|
function element:debugDraw()
|
||||||
|
love.graphics.push("transform")
|
||||||
|
love.graphics.translate(self._offset_.x, self._offset_.y)
|
||||||
|
|
||||||
--- @TODO: сделать дебажный метод для отрисовки границ
|
for _, child in ipairs(self._children_) do
|
||||||
love.graphics.setColor(1, 0, 0)
|
child:debugDraw()
|
||||||
love.graphics.line(0, 0, self._size_.x, 0)
|
end
|
||||||
love.graphics.line(0, 0, 0, self._size_.y)
|
|
||||||
love.graphics.line(self._size_.x, 0, self._size_.x,
|
Element.debugDraw(self)
|
||||||
self._size_.y)
|
|
||||||
love.graphics.line(0, self._size_.y, self._size_.x,
|
|
||||||
self._size_.y)
|
|
||||||
love.graphics.setColor(1, 1, 1)
|
|
||||||
|
|
||||||
love.graphics.pop()
|
love.graphics.pop()
|
||||||
end
|
end
|
||||||
|
|||||||
@ -33,6 +33,17 @@ function element:draw()
|
|||||||
love.graphics.pop()
|
love.graphics.pop()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function element:debugDraw()
|
||||||
|
love.graphics.push("transform")
|
||||||
|
love.graphics.translate(self._offset_.x, self._offset_.y)
|
||||||
|
|
||||||
|
if self._child_ then self._child_:debugDraw() end
|
||||||
|
|
||||||
|
Element.debugDraw(self)
|
||||||
|
|
||||||
|
love.graphics.pop()
|
||||||
|
end
|
||||||
|
|
||||||
--- @generic T : SingleChildElement
|
--- @generic T : SingleChildElement
|
||||||
--- @param self T
|
--- @param self T
|
||||||
--- @param values {child: UIElement?, [string]: any}
|
--- @param values {child: UIElement?, [string]: any}
|
||||||
|
|||||||
@ -22,7 +22,6 @@ end
|
|||||||
|
|
||||||
function Canary:build()
|
function Canary:build()
|
||||||
self.state.i = self.state.i and self.state.i + 1 or 0
|
self.state.i = self.state.i and self.state.i + 1 or 0
|
||||||
print(self.state.i)
|
|
||||||
|
|
||||||
return Placeholder:new {}
|
return Placeholder:new {}
|
||||||
end
|
end
|
||||||
@ -97,6 +96,7 @@ function MyWidget:build()
|
|||||||
end
|
end
|
||||||
|
|
||||||
return Builder {
|
return Builder {
|
||||||
|
debugDraw = true,
|
||||||
builder = function()
|
builder = function()
|
||||||
return ScreenArea:new {
|
return ScreenArea:new {
|
||||||
child = MyWidget:new {}
|
child = MyWidget:new {}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user