2026-06-10 02:57:28 +03:00

115 lines
3.5 KiB
Lua

local Rect = require "lib.simple_ui.core.rect"
local ScreenArea = require "lib.simple_ui.elements.screen_area"
local Placeholder = require "lib.simple_ui.elements.placeholder"
local Padding = require "lib.simple_ui.elements.padding"
local Builder = require "lib.simple_ui.core.builder"
local Flex = require "lib.simple_ui.elements.flex"
local Scale = require "lib.simple_ui.elements.scale"
local SizedBox = require "lib.simple_ui.elements.sized_box"
local StatefulElement = require "lib.simple_ui.core.stateful_element"
local MyWidget = setmetatable({}, StatefulElement)
MyWidget.__index = MyWidget
MyWidget.type = "MyWidget"
local Canary = setmetatable({}, StatefulElement)
Canary.__index = Canary
Canary.type = "Canary"
function Canary:initState()
return { i = self.key == "canary1" and 0 or 100 }
end
function Canary:build()
self.state.i = self.state.i and self.state.i + 1 or 0
return Placeholder:new {}
end
--- comment
--- @return Flex
function MyWidget:build()
return Flex:new {
key = "test",
direction = "vertical",
mainAxisSize = "max",
children = {
Padding:new {
top = 8,
child = Flex:new {
mainAxisAlignment = "start",
mainAxisSize = "min",
children = {
SizedBox:new {
width = 100,
height = 100,
child = Placeholder:new {}
},
SizedBox:new {
width = 150,
height = 200,
child = Placeholder:new {}
},
SizedBox:new {
width = 100,
height = 100,
child = Canary:new {
key = "canary1",
}
},
SizedBox:new {
width = 100,
height = 100,
child = Canary:new {
key = "canary2",
}
},
},
}
},
Flex:new {
key = "inner_flex2",
mainAxisAlignment = "end",
children = {
SizedBox:new {
width = 100,
height = 100,
child = Placeholder:new {}
},
SizedBox:new {
width = 100,
height = 100,
child = Placeholder:new {}
},
SizedBox:new {
width = 100,
height = 100,
child = Placeholder:new {},
},
},
},
}
}
end
return Builder {
-- debugDraw = true,
builder = function()
return Scale:new {
sx = 2,
sy = 2,
child = ScreenArea:new {
key = "screen",
dimensions = Rect {
width = love.graphics.getWidth() / 2,
height = love.graphics.getHeight() / 2
},
filter = "nearest",
child = MyWidget:new {}
}
}
end
}