mirror of
https://github.com/TangentFoxy/Pop.Box.git
synced 2024-12-15 12:44:20 +00:00
attempted to make things work and failed
This commit is contained in:
parent
6cb3c23d09
commit
79130fe3d6
5
build.bat
Normal file
5
build.bat
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
cd src
|
||||||
|
"%cd%\..\moonc.exe" -t ../lib .
|
||||||
|
cd ..
|
||||||
|
xcopy /S /Y "%cd%\lib\pop\*" "%cd%\demo\pop\*"
|
@ -1,4 +1,4 @@
|
|||||||
local pop = require "pop"
|
local pop = require("pop")()
|
||||||
|
|
||||||
local lg = love.graphics
|
local lg = love.graphics
|
||||||
|
|
||||||
@ -7,35 +7,35 @@ local testsRun = false
|
|||||||
local debugDrawEnabled = false
|
local debugDrawEnabled = false
|
||||||
|
|
||||||
function love.load()
|
function love.load()
|
||||||
pop.text(nil, "Press \"s\" to show objects for visual testing/demo.\nPress \"t\" to run tests.\nPress \"d\" to toggle debug draw."):move(2, 2)
|
pop:text(nil, "Press \"s\" to show objects for visual testing/demo.\nPress \"t\" to run tests.\nPress \"d\" to toggle debug draw."):move(2, 2)
|
||||||
--TODO correct the fact that the size is wrong here! (height doesn't take into account \n)
|
--TODO correct the fact that the size is wrong here! (height doesn't take into account \n)
|
||||||
--NOTE width? Is width calculated correctly when \n's exist? TEST THIS (also test tabs)
|
--NOTE width? Is width calculated correctly when \n's exist? TEST THIS (also test tabs)
|
||||||
pop.text(nil, "This is a test\ncollection of strings to see how width is determined.\nLooks like it takes width of widest line!"):move(30, 120)
|
pop:text(nil, "This is a test\ncollection of strings to see how width is determined.\nLooks like it takes width of widest line!"):move(30, 120)
|
||||||
pop.element():align("right", "bottom"):setSize(25, 25):move(-5, -5)
|
pop:element():align("right", "bottom"):setSize(25, 25):move(-5, -5)
|
||||||
end
|
end
|
||||||
|
|
||||||
function love.update(dt)
|
function love.update(dt)
|
||||||
pop.update(dt)
|
pop:update(dt)
|
||||||
end
|
end
|
||||||
|
|
||||||
function love.draw()
|
function love.draw()
|
||||||
pop.draw()
|
pop:draw()
|
||||||
|
|
||||||
if debugDrawEnabled then
|
if debugDrawEnabled then
|
||||||
pop.debugDraw()
|
pop:debugDraw()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function love.textinput(text)
|
function love.textinput(text)
|
||||||
--pop.textinput(text)
|
--pop:textinput(text)
|
||||||
end
|
end
|
||||||
|
|
||||||
function love.mousepressed(button, x, y)
|
function love.mousepressed(button, x, y)
|
||||||
--pop.mousepressed(button, x, y)
|
--pop:mousepressed(button, x, y)
|
||||||
end
|
end
|
||||||
|
|
||||||
function love.mousereleased(button, x, y)
|
function love.mousereleased(button, x, y)
|
||||||
--pop.mousereleased(button, x, y)
|
--pop:mousereleased(button, x, y)
|
||||||
end
|
end
|
||||||
|
|
||||||
function love.keypressed(key)
|
function love.keypressed(key)
|
||||||
@ -44,19 +44,19 @@ function love.keypressed(key)
|
|||||||
else
|
else
|
||||||
if (key == "s") and (not visualTestsShown) then
|
if (key == "s") and (not visualTestsShown) then
|
||||||
-- old visual tests
|
-- old visual tests
|
||||||
local align = pop.box():align("center", "center"):setSize(200, 200)
|
local align = pop:box():align("center", "center"):setSize(200, 200)
|
||||||
pop.box(align):align("left", "top"):setSize(75, 10):setColor(255, 0, 255, 255)
|
pop:box(align):align("left", "top"):setSize(75, 10):setColor(255, 0, 255, 255)
|
||||||
pop.box(align):align("center", "top"):setColor(100, 100, 100)
|
pop:box(align):align("center", "top"):setColor(100, 100, 100)
|
||||||
pop.box(align, {0, 255, 0, 255}):setSize(20, 5):align("right", "top")
|
pop:box(align, {0, 255, 0, 255}):setSize(20, 5):align("right", "top")
|
||||||
pop.box(align):align("left", "center"):setColor(0, 0, 255)
|
pop:box(align):align("left", "center"):setColor(0, 0, 255)
|
||||||
pop.box(align):align("center", "center"):setSize(90, 90):setColor(255, 255, 255)
|
pop:box(align):align("center", "center"):setSize(90, 90):setColor(255, 255, 255)
|
||||||
pop.box(align):align("right", "center"):setColor(255, 0, 0)
|
pop:box(align):align("right", "center"):setColor(255, 0, 0)
|
||||||
pop.box(align):align("left", "bottom"):setColor(0, 255, 0):setSize(nil, 40)
|
pop:box(align):align("left", "bottom"):setColor(0, 255, 0):setSize(nil, 40)
|
||||||
pop.box(align):align("center", "bottom"):setColor(255, 255, 0)
|
pop:box(align):align("center", "bottom"):setColor(255, 255, 0)
|
||||||
pop.box(align):align("right", "bottom"):setColor(0, 255, 255):setSize(40, 40)
|
pop:box(align):align("right", "bottom"):setColor(0, 255, 255):setSize(40, 40)
|
||||||
--pop.box(nil, {255, 0, 0, 255}):align("left", "top"):setSize(50, 50) --TODO adjust z-height of elements
|
--pop:box(nil, {255, 0, 0, 255}):align("left", "top"):setSize(50, 50) --TODO adjust z-height of elements
|
||||||
pop.text(nil, "Hello World!"):align("center"):setText("Hey, I've been modified!")--:move(0, 18)
|
pop:text(nil, "Hello World!"):align("center"):setText("Hey, I've been modified!")--:move(0, 18)
|
||||||
pop.text(nil, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()-=_+[]{}\\|:;\"',./<>?`~"):align("center", "bottom")
|
pop:text(nil, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()-=_+[]{}\\|:;\"',./<>?`~"):align("center", "bottom")
|
||||||
|
|
||||||
visualTestsShown = true
|
visualTestsShown = true
|
||||||
elseif (key == "t") and (not testsRun) then
|
elseif (key == "t") and (not testsRun) then
|
||||||
@ -65,10 +65,10 @@ function love.keypressed(key)
|
|||||||
debugDrawEnabled = not debugDrawEnabled
|
debugDrawEnabled = not debugDrawEnabled
|
||||||
end
|
end
|
||||||
|
|
||||||
--pop.keypressed(key)
|
--pop:keypressed(key)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function love.keyreleased(key)
|
function love.keyreleased(key)
|
||||||
--pop.keyreleased(key)
|
--pop:keyreleased(key)
|
||||||
end
|
end
|
||||||
|
103
demo/pop/elements/box.lua
Normal file
103
demo/pop/elements/box.lua
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
local graphics
|
||||||
|
graphics = love.graphics
|
||||||
|
local sub, len
|
||||||
|
do
|
||||||
|
local _obj_0 = string
|
||||||
|
sub, len = _obj_0.sub, _obj_0.len
|
||||||
|
end
|
||||||
|
local path = sub(..., 1, len(...) - len("/box"))
|
||||||
|
local element = require(tostring(path) .. "/element")
|
||||||
|
local box
|
||||||
|
do
|
||||||
|
local _class_0
|
||||||
|
local _parent_0 = element
|
||||||
|
local _base_0 = {
|
||||||
|
draw = function(self)
|
||||||
|
if self.background then
|
||||||
|
if type(self.background) == "table" then
|
||||||
|
graphics.setColor(self.background)
|
||||||
|
else
|
||||||
|
graphics.setColor(self.background)
|
||||||
|
local w, h = self.background:getDimensions()
|
||||||
|
w = self.w / w
|
||||||
|
h = self.h / h
|
||||||
|
graphics.draw(self.background, self.x, self.y, 0, w, h)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
debugDraw = function(self)
|
||||||
|
graphics.setLineWidth(0.5)
|
||||||
|
graphics.setColor(0, 0, 0, 100)
|
||||||
|
graphics.rectangle("fill", self.x, self.y, self.w, self.h)
|
||||||
|
graphics.setColor(0, 0, 200, 200)
|
||||||
|
graphics.rectangle("line", self.x, self.y, self.w, self.h)
|
||||||
|
graphics.setColor(200, 200, 255, 255)
|
||||||
|
graphics.print("b", self.x, self.y)
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
setBackground = function(self, background)
|
||||||
|
self.background = background
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
getBackground = function(self)
|
||||||
|
return self.background
|
||||||
|
end,
|
||||||
|
setColor = function(self, r, g, b, a)
|
||||||
|
if a == nil then
|
||||||
|
a = 255
|
||||||
|
end
|
||||||
|
self.background = {
|
||||||
|
r,
|
||||||
|
g,
|
||||||
|
b,
|
||||||
|
a
|
||||||
|
}
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
getColor = function(self)
|
||||||
|
if type(self.background) == "table" then
|
||||||
|
return unpack(self.background)
|
||||||
|
else
|
||||||
|
return error("This box doesn't have a color.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
_base_0.__index = _base_0
|
||||||
|
setmetatable(_base_0, _parent_0.__base)
|
||||||
|
_class_0 = setmetatable({
|
||||||
|
__init = function(self, pop, parent, background)
|
||||||
|
if background == nil then
|
||||||
|
background = false
|
||||||
|
end
|
||||||
|
_class_0.__parent.__init(self, pop, parent)
|
||||||
|
self.background = background
|
||||||
|
end,
|
||||||
|
__base = _base_0,
|
||||||
|
__name = "box",
|
||||||
|
__parent = _parent_0
|
||||||
|
}, {
|
||||||
|
__index = function(cls, name)
|
||||||
|
local val = rawget(_base_0, name)
|
||||||
|
if val == nil then
|
||||||
|
local parent = rawget(cls, "__parent")
|
||||||
|
if parent then
|
||||||
|
return parent[name]
|
||||||
|
end
|
||||||
|
else
|
||||||
|
return val
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
__call = function(cls, ...)
|
||||||
|
local _self_0 = setmetatable({}, _base_0)
|
||||||
|
cls.__init(_self_0, ...)
|
||||||
|
return _self_0
|
||||||
|
end
|
||||||
|
})
|
||||||
|
_base_0.__class = _class_0
|
||||||
|
if _parent_0.__inherited then
|
||||||
|
_parent_0.__inherited(_parent_0, _class_0)
|
||||||
|
end
|
||||||
|
box = _class_0
|
||||||
|
return _class_0
|
||||||
|
end
|
170
demo/pop/elements/element.lua
Normal file
170
demo/pop/elements/element.lua
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
local graphics
|
||||||
|
graphics = love.graphics
|
||||||
|
local element
|
||||||
|
do
|
||||||
|
local _class_0
|
||||||
|
local _base_0 = {
|
||||||
|
debugDraw = function(self)
|
||||||
|
graphics.setLineWidth(0.5)
|
||||||
|
graphics.setColor(0, 0, 0, 100)
|
||||||
|
graphics.rectangle("fill", self.x, self.y, self.w, self.h)
|
||||||
|
graphics.setColor(0, 200, 0, 200)
|
||||||
|
graphics.rectangle("line", self.x, self.y, self.w, self.h)
|
||||||
|
graphics.setColor(200, 255, 200, 255)
|
||||||
|
graphics.print("e", self.x, self.y)
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
move = function(self, x, y)
|
||||||
|
self.x = self.x + x
|
||||||
|
self.y = self.y + y
|
||||||
|
for i = 1, #self.child do
|
||||||
|
if not self.child[i].excludeMovement then
|
||||||
|
self.child[i]:move(x, y)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
setPosition = function(self, x, y)
|
||||||
|
local oldX = self.x
|
||||||
|
local oldY = self.y
|
||||||
|
local _exp_0 = self.horizontal
|
||||||
|
if "left" == _exp_0 then
|
||||||
|
self.x = x
|
||||||
|
elseif "center" == _exp_0 then
|
||||||
|
self.x = x - self.w / 2
|
||||||
|
elseif "right" == _exp_0 then
|
||||||
|
self.x = x - self.w
|
||||||
|
end
|
||||||
|
local _exp_1 = self.vertical
|
||||||
|
if "top" == _exp_1 then
|
||||||
|
self.y = y
|
||||||
|
elseif "center" == _exp_1 then
|
||||||
|
self.y = y - self.h / 2
|
||||||
|
elseif "bottom" == _exp_1 then
|
||||||
|
self.y = y - self.h
|
||||||
|
end
|
||||||
|
for i = 1, #self.child do
|
||||||
|
if not self.child[i].excludeMovement then
|
||||||
|
self.child[i]:move(x - oldX, y - oldY)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
getPosition = function(self)
|
||||||
|
local resultX = self.x
|
||||||
|
local resultY = self.y
|
||||||
|
local _exp_0 = self.horizontal
|
||||||
|
if "center" == _exp_0 then
|
||||||
|
resultX = resultX + (self.w / 2)
|
||||||
|
elseif "right" == _exp_0 then
|
||||||
|
resultX = resultX + self.w
|
||||||
|
end
|
||||||
|
local _exp_1 = self.vertical
|
||||||
|
if "center" == _exp_1 then
|
||||||
|
resultY = resultY + (self.h / 2)
|
||||||
|
elseif "bottom" == _exp_1 then
|
||||||
|
resultY = resultY + self.h
|
||||||
|
end
|
||||||
|
return resultX, resultY
|
||||||
|
end,
|
||||||
|
setSize = function(self, w, h)
|
||||||
|
if w then
|
||||||
|
local _exp_0 = self.horizontal
|
||||||
|
if "center" == _exp_0 then
|
||||||
|
self.x = self.x - ((w - self.w) / 2)
|
||||||
|
elseif "right" == _exp_0 then
|
||||||
|
self.x = self.x - (w - self.w)
|
||||||
|
end
|
||||||
|
self.w = w
|
||||||
|
end
|
||||||
|
if h then
|
||||||
|
local _exp_0 = self.vertical
|
||||||
|
if "center" == _exp_0 then
|
||||||
|
self.y = self.y - ((h - self.h) / 2)
|
||||||
|
elseif "bottom" == _exp_0 then
|
||||||
|
self.y = self.y - (h - self.h)
|
||||||
|
end
|
||||||
|
self.h = h
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
getSize = function(self)
|
||||||
|
return self.w, self.h
|
||||||
|
end,
|
||||||
|
adjustSize = function(self, w, h)
|
||||||
|
local W, H = self:getSize()
|
||||||
|
if w then
|
||||||
|
W = W + w
|
||||||
|
end
|
||||||
|
if h then
|
||||||
|
H = H + h
|
||||||
|
end
|
||||||
|
self:setSize(W, H)
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
align = function(self, horizontal, vertical)
|
||||||
|
self:setAlignment(horizontal, vertical)
|
||||||
|
self.x = self.parent.x
|
||||||
|
self.y = self.parent.y
|
||||||
|
local _exp_0 = self.horizontal
|
||||||
|
if "left" == _exp_0 then
|
||||||
|
self.x = self.x + self.margin
|
||||||
|
elseif "center" == _exp_0 then
|
||||||
|
self.x = self.x + ((self.parent.w - self.w) / 2)
|
||||||
|
elseif "right" == _exp_0 then
|
||||||
|
self.x = self.x + (self.parent.w - self.w - self.margin)
|
||||||
|
end
|
||||||
|
local _exp_1 = self.vertical
|
||||||
|
if "top" == _exp_1 then
|
||||||
|
self.y = self.y + self.margin
|
||||||
|
elseif "center" == _exp_1 then
|
||||||
|
self.y = self.y + ((self.parent.h - self.h) / 2)
|
||||||
|
elseif "bottom" == _exp_1 then
|
||||||
|
self.y = self.y + (self.parent.h - self.h - self.margin)
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
alignTo = function(self, element, horizontal, vertical)
|
||||||
|
local realParent = self.parent
|
||||||
|
self.parent = element
|
||||||
|
self:align(horizontal, vertical)
|
||||||
|
self.parent = realParent
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
setAlignment = function(self, horizontal, vertical)
|
||||||
|
if horizontal then
|
||||||
|
self.horizontal = horizontal
|
||||||
|
end
|
||||||
|
if vertical then
|
||||||
|
self.vertical = vertical
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
}
|
||||||
|
_base_0.__index = _base_0
|
||||||
|
_class_0 = setmetatable({
|
||||||
|
__init = function(self, pop, parent)
|
||||||
|
self.parent = parent
|
||||||
|
self.child = { }
|
||||||
|
self.x = parent.x or 0
|
||||||
|
self.y = parent.y or 0
|
||||||
|
self.w = 10
|
||||||
|
self.h = 10
|
||||||
|
self.horizontal = "left"
|
||||||
|
self.vertical = "top"
|
||||||
|
self.margin = 0
|
||||||
|
end,
|
||||||
|
__base = _base_0,
|
||||||
|
__name = "element"
|
||||||
|
}, {
|
||||||
|
__index = _base_0,
|
||||||
|
__call = function(cls, ...)
|
||||||
|
local _self_0 = setmetatable({}, _base_0)
|
||||||
|
cls.__init(_self_0, ...)
|
||||||
|
return _self_0
|
||||||
|
end
|
||||||
|
})
|
||||||
|
_base_0.__class = _class_0
|
||||||
|
element = _class_0
|
||||||
|
return _class_0
|
||||||
|
end
|
132
demo/pop/elements/text.lua
Normal file
132
demo/pop/elements/text.lua
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
local graphics
|
||||||
|
graphics = love.graphics
|
||||||
|
local sub, len
|
||||||
|
do
|
||||||
|
local _obj_0 = string
|
||||||
|
sub, len = _obj_0.sub, _obj_0.len
|
||||||
|
end
|
||||||
|
local path = sub(..., 1, len(...) - len("/text"))
|
||||||
|
local element = require(tostring(path) .. "/element")
|
||||||
|
local text
|
||||||
|
do
|
||||||
|
local _class_0
|
||||||
|
local _parent_0 = element
|
||||||
|
local _base_0 = {
|
||||||
|
draw = function(self)
|
||||||
|
graphics.setColor(self.color)
|
||||||
|
graphics.setFont(self.font)
|
||||||
|
graphics.print(self.text, self.x, self.y)
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
debugDraw = function(self)
|
||||||
|
graphics.setLineWidth(0.5)
|
||||||
|
graphics.setColor(0, 0, 0, 100)
|
||||||
|
graphics.rectangle("fill", self.x, self.y, self.w, self.h)
|
||||||
|
graphics.setColor(200, 0, 0, 200)
|
||||||
|
graphics.rectangle("line", self.x, self.y, self.w, self.h)
|
||||||
|
graphics.setColor(255, 200, 200, 255)
|
||||||
|
graphics.print("t", self.x, self.y)
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
setSize = function(self)
|
||||||
|
local w = self.font:getWidth(self.text)
|
||||||
|
local h = self.font:getHeight() * (select(2, self.text:gsub("\n", "\n")) + 1)
|
||||||
|
local _exp_0 = self.horizontal
|
||||||
|
if "center" == _exp_0 then
|
||||||
|
self.x = self.x - ((w - self.w) / 2)
|
||||||
|
elseif "right" == _exp_0 then
|
||||||
|
self.x = self.x - (w - self.w - self.margin)
|
||||||
|
end
|
||||||
|
local _exp_1 = self.vertical
|
||||||
|
if "center" == _exp_1 then
|
||||||
|
self.y = self.y - ((h - self.h) / 2)
|
||||||
|
elseif "right" == _exp_1 then
|
||||||
|
self.y = self.y - (h - self.h - self.margin)
|
||||||
|
end
|
||||||
|
self.w = w
|
||||||
|
self.h = h
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
setText = function(self, text)
|
||||||
|
if text == nil then
|
||||||
|
text = ""
|
||||||
|
end
|
||||||
|
self.text = text
|
||||||
|
self:setSize()
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
getText = function(self)
|
||||||
|
return self.text
|
||||||
|
end,
|
||||||
|
setFont = function(self, font)
|
||||||
|
self.font = font
|
||||||
|
self:setSize()
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
getFont = function(self)
|
||||||
|
return self.font
|
||||||
|
end,
|
||||||
|
setColor = function(self, r, g, b, a)
|
||||||
|
if a == nil then
|
||||||
|
a = 255
|
||||||
|
end
|
||||||
|
self.color = {
|
||||||
|
r,
|
||||||
|
g,
|
||||||
|
b,
|
||||||
|
a
|
||||||
|
}
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
getColor = function(self)
|
||||||
|
return unpack(self.color)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
_base_0.__index = _base_0
|
||||||
|
setmetatable(_base_0, _parent_0.__base)
|
||||||
|
_class_0 = setmetatable({
|
||||||
|
__init = function(self, pop, parent, text, color)
|
||||||
|
if text == nil then
|
||||||
|
text = ""
|
||||||
|
end
|
||||||
|
if color == nil then
|
||||||
|
color = {
|
||||||
|
255,
|
||||||
|
255,
|
||||||
|
255,
|
||||||
|
255
|
||||||
|
}
|
||||||
|
end
|
||||||
|
_class_0.__parent.__init(self, pop, parent)
|
||||||
|
self.font = graphics.newFont(14)
|
||||||
|
self:setText(text)
|
||||||
|
self.color = color
|
||||||
|
end,
|
||||||
|
__base = _base_0,
|
||||||
|
__name = "text",
|
||||||
|
__parent = _parent_0
|
||||||
|
}, {
|
||||||
|
__index = function(cls, name)
|
||||||
|
local val = rawget(_base_0, name)
|
||||||
|
if val == nil then
|
||||||
|
local parent = rawget(cls, "__parent")
|
||||||
|
if parent then
|
||||||
|
return parent[name]
|
||||||
|
end
|
||||||
|
else
|
||||||
|
return val
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
__call = function(cls, ...)
|
||||||
|
local _self_0 = setmetatable({}, _base_0)
|
||||||
|
cls.__init(_self_0, ...)
|
||||||
|
return _self_0
|
||||||
|
end
|
||||||
|
})
|
||||||
|
_base_0.__class = _class_0
|
||||||
|
if _parent_0.__inherited then
|
||||||
|
_parent_0.__inherited(_parent_0, _class_0)
|
||||||
|
end
|
||||||
|
text = _class_0
|
||||||
|
return _class_0
|
||||||
|
end
|
176
demo/pop/init.lua
Normal file
176
demo/pop/init.lua
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
local filesystem, graphics
|
||||||
|
do
|
||||||
|
local _obj_0 = love
|
||||||
|
filesystem, graphics = _obj_0.filesystem, _obj_0.graphics
|
||||||
|
end
|
||||||
|
local insert
|
||||||
|
insert = table.insert
|
||||||
|
local path = ...
|
||||||
|
local Pop
|
||||||
|
do
|
||||||
|
local _class_0
|
||||||
|
local _base_0 = {
|
||||||
|
create = function(self, elementType, parent, ...)
|
||||||
|
if parent == nil then
|
||||||
|
parent = self.window
|
||||||
|
end
|
||||||
|
local newElement = self.elements[elementType](parent, ...)
|
||||||
|
insert(parent.child, newElement)
|
||||||
|
return newElement
|
||||||
|
end,
|
||||||
|
update = function(self, dt, element)
|
||||||
|
if element == nil then
|
||||||
|
element = self.window
|
||||||
|
end
|
||||||
|
if not element.excludeUpdating then
|
||||||
|
if element.update then
|
||||||
|
element:update(dt)
|
||||||
|
end
|
||||||
|
for i = 1, #element.child do
|
||||||
|
self:update(dt, element.child[i])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
draw = function(self, element)
|
||||||
|
if element == nil then
|
||||||
|
element = self.window
|
||||||
|
end
|
||||||
|
if not element.excludeRendering then
|
||||||
|
if element.draw then
|
||||||
|
local _
|
||||||
|
do
|
||||||
|
local _base_1 = element
|
||||||
|
local _fn_0 = _base_1.draw
|
||||||
|
_ = function(...)
|
||||||
|
return _fn_0(_base_1, ...)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for i = 1, #element.child do
|
||||||
|
self:draw(element.child[i])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
mousepressed = function(self, button, x, y, element)
|
||||||
|
if element == nil then
|
||||||
|
element = self.window
|
||||||
|
end
|
||||||
|
if (x >= element.x) and (x <= (element.x + element.w)) then
|
||||||
|
if (y >= element.y) and (y <= (element.y + element.h)) then
|
||||||
|
for i = 1, #element.child do
|
||||||
|
if self:mousepressed(button, x, y, element.child[i]) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if element.mousepressed then
|
||||||
|
return element:mousepressed(button, x - element.x, y - element.y)
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
mousereleased = function(self, button, x, y, element)
|
||||||
|
if element == nil then
|
||||||
|
element = self.window
|
||||||
|
end
|
||||||
|
if (x >= element.x) and (x <= (element.x + element.w)) then
|
||||||
|
if (y >= element.y) and (y <= (element.y + element.h)) then
|
||||||
|
for i = 1, #element.child do
|
||||||
|
if self:mousereleased(button, x, y, element.child[i]) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if element.mousereleased then
|
||||||
|
return element:mousereleased(button, x - element.x, y - element.y)
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
keypressed = function(self, key)
|
||||||
|
return error("Unimplemented.")
|
||||||
|
end,
|
||||||
|
keyreleased = function(self, key)
|
||||||
|
return error("Unimplemented.")
|
||||||
|
end,
|
||||||
|
textinput = function(self, text)
|
||||||
|
return error("Unimplemented.")
|
||||||
|
end,
|
||||||
|
skin = function(self, element, skin, apply_to_children)
|
||||||
|
if apply_to_children == nil then
|
||||||
|
apply_to_children = true
|
||||||
|
end
|
||||||
|
element.margin = skin.margin
|
||||||
|
if element.background then
|
||||||
|
element.background = skin.background
|
||||||
|
end
|
||||||
|
if element.color then
|
||||||
|
element.color = skin.color
|
||||||
|
end
|
||||||
|
if element.font then
|
||||||
|
element.font = skin.font
|
||||||
|
end
|
||||||
|
if apply_to_children then
|
||||||
|
for i = 1, #element.child do
|
||||||
|
self:skin(element.child[i], skin)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
debugDraw = function(self, element)
|
||||||
|
if element == nil then
|
||||||
|
element = self.window
|
||||||
|
end
|
||||||
|
if element.debugDraw then
|
||||||
|
element:debugDraw()
|
||||||
|
else
|
||||||
|
graphics.setLineWidth(1)
|
||||||
|
graphics.setColor(0, 0, 0, 100)
|
||||||
|
graphics.rectangle("fill", element.x, element.y, element.w, element.h)
|
||||||
|
graphics.setColor(150, 150, 150, 150)
|
||||||
|
graphics.rectangle("line", element.x, element.y, element.w, element.h)
|
||||||
|
graphics.setColor(200, 200, 200, 255)
|
||||||
|
graphics.print(".", element.x, element.y)
|
||||||
|
end
|
||||||
|
for i = 1, #element.child do
|
||||||
|
self:debugDraw(element.child[i])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
_base_0.__index = _base_0
|
||||||
|
_class_0 = setmetatable({
|
||||||
|
__init = function(self)
|
||||||
|
self.elements = { }
|
||||||
|
self.window = {
|
||||||
|
child = { }
|
||||||
|
}
|
||||||
|
local elements = filesystem.getDirectoryItems(tostring(path) .. "/elements")
|
||||||
|
for i = 1, #elements do
|
||||||
|
local name = elements[i]:sub(1, -5)
|
||||||
|
self.elements[name] = require(tostring(path) .. "/elements/" .. tostring(name))
|
||||||
|
print("loaded element: " .. tostring(name))
|
||||||
|
if not self[name] then
|
||||||
|
self[name] = function(self, ...)
|
||||||
|
return self:create(name, ...)
|
||||||
|
end
|
||||||
|
print("wrapper created: " .. tostring(name) .. "()")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
self.window = self:create("element", self.window):setSize(graphics.getWidth(), graphics.getHeight())
|
||||||
|
return print("created window")
|
||||||
|
end,
|
||||||
|
__base = _base_0,
|
||||||
|
__name = "Pop"
|
||||||
|
}, {
|
||||||
|
__index = _base_0,
|
||||||
|
__call = function(cls, ...)
|
||||||
|
local _self_0 = setmetatable({}, _base_0)
|
||||||
|
cls.__init(_self_0, ...)
|
||||||
|
return _self_0
|
||||||
|
end
|
||||||
|
})
|
||||||
|
_base_0.__class = _class_0
|
||||||
|
Pop = _class_0
|
||||||
|
return _class_0
|
||||||
|
end
|
13
demo/pop/skins/clear.lua
Normal file
13
demo/pop/skins/clear.lua
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
local graphics
|
||||||
|
graphics = love.graphics
|
||||||
|
return {
|
||||||
|
color = {
|
||||||
|
255,
|
||||||
|
255,
|
||||||
|
255,
|
||||||
|
255
|
||||||
|
},
|
||||||
|
background = false,
|
||||||
|
font = graphics.newFont(13),
|
||||||
|
margin = 2
|
||||||
|
}
|
103
lib/pop/elements/box.lua
Normal file
103
lib/pop/elements/box.lua
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
local graphics
|
||||||
|
graphics = love.graphics
|
||||||
|
local sub, len
|
||||||
|
do
|
||||||
|
local _obj_0 = string
|
||||||
|
sub, len = _obj_0.sub, _obj_0.len
|
||||||
|
end
|
||||||
|
local path = sub(..., 1, len(...) - len("/box"))
|
||||||
|
local element = require(tostring(path) .. "/element")
|
||||||
|
local box
|
||||||
|
do
|
||||||
|
local _class_0
|
||||||
|
local _parent_0 = element
|
||||||
|
local _base_0 = {
|
||||||
|
draw = function(self)
|
||||||
|
if self.background then
|
||||||
|
if type(self.background) == "table" then
|
||||||
|
graphics.setColor(self.background)
|
||||||
|
else
|
||||||
|
graphics.setColor(self.background)
|
||||||
|
local w, h = self.background:getDimensions()
|
||||||
|
w = self.w / w
|
||||||
|
h = self.h / h
|
||||||
|
graphics.draw(self.background, self.x, self.y, 0, w, h)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
debugDraw = function(self)
|
||||||
|
graphics.setLineWidth(0.5)
|
||||||
|
graphics.setColor(0, 0, 0, 100)
|
||||||
|
graphics.rectangle("fill", self.x, self.y, self.w, self.h)
|
||||||
|
graphics.setColor(0, 0, 200, 200)
|
||||||
|
graphics.rectangle("line", self.x, self.y, self.w, self.h)
|
||||||
|
graphics.setColor(200, 200, 255, 255)
|
||||||
|
graphics.print("b", self.x, self.y)
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
setBackground = function(self, background)
|
||||||
|
self.background = background
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
getBackground = function(self)
|
||||||
|
return self.background
|
||||||
|
end,
|
||||||
|
setColor = function(self, r, g, b, a)
|
||||||
|
if a == nil then
|
||||||
|
a = 255
|
||||||
|
end
|
||||||
|
self.background = {
|
||||||
|
r,
|
||||||
|
g,
|
||||||
|
b,
|
||||||
|
a
|
||||||
|
}
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
getColor = function(self)
|
||||||
|
if type(self.background) == "table" then
|
||||||
|
return unpack(self.background)
|
||||||
|
else
|
||||||
|
return error("This box doesn't have a color.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
_base_0.__index = _base_0
|
||||||
|
setmetatable(_base_0, _parent_0.__base)
|
||||||
|
_class_0 = setmetatable({
|
||||||
|
__init = function(self, pop, parent, background)
|
||||||
|
if background == nil then
|
||||||
|
background = false
|
||||||
|
end
|
||||||
|
_class_0.__parent.__init(self, pop, parent)
|
||||||
|
self.background = background
|
||||||
|
end,
|
||||||
|
__base = _base_0,
|
||||||
|
__name = "box",
|
||||||
|
__parent = _parent_0
|
||||||
|
}, {
|
||||||
|
__index = function(cls, name)
|
||||||
|
local val = rawget(_base_0, name)
|
||||||
|
if val == nil then
|
||||||
|
local parent = rawget(cls, "__parent")
|
||||||
|
if parent then
|
||||||
|
return parent[name]
|
||||||
|
end
|
||||||
|
else
|
||||||
|
return val
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
__call = function(cls, ...)
|
||||||
|
local _self_0 = setmetatable({}, _base_0)
|
||||||
|
cls.__init(_self_0, ...)
|
||||||
|
return _self_0
|
||||||
|
end
|
||||||
|
})
|
||||||
|
_base_0.__class = _class_0
|
||||||
|
if _parent_0.__inherited then
|
||||||
|
_parent_0.__inherited(_parent_0, _class_0)
|
||||||
|
end
|
||||||
|
box = _class_0
|
||||||
|
return _class_0
|
||||||
|
end
|
170
lib/pop/elements/element.lua
Normal file
170
lib/pop/elements/element.lua
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
local graphics
|
||||||
|
graphics = love.graphics
|
||||||
|
local element
|
||||||
|
do
|
||||||
|
local _class_0
|
||||||
|
local _base_0 = {
|
||||||
|
debugDraw = function(self)
|
||||||
|
graphics.setLineWidth(0.5)
|
||||||
|
graphics.setColor(0, 0, 0, 100)
|
||||||
|
graphics.rectangle("fill", self.x, self.y, self.w, self.h)
|
||||||
|
graphics.setColor(0, 200, 0, 200)
|
||||||
|
graphics.rectangle("line", self.x, self.y, self.w, self.h)
|
||||||
|
graphics.setColor(200, 255, 200, 255)
|
||||||
|
graphics.print("e", self.x, self.y)
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
move = function(self, x, y)
|
||||||
|
self.x = self.x + x
|
||||||
|
self.y = self.y + y
|
||||||
|
for i = 1, #self.child do
|
||||||
|
if not self.child[i].excludeMovement then
|
||||||
|
self.child[i]:move(x, y)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
setPosition = function(self, x, y)
|
||||||
|
local oldX = self.x
|
||||||
|
local oldY = self.y
|
||||||
|
local _exp_0 = self.horizontal
|
||||||
|
if "left" == _exp_0 then
|
||||||
|
self.x = x
|
||||||
|
elseif "center" == _exp_0 then
|
||||||
|
self.x = x - self.w / 2
|
||||||
|
elseif "right" == _exp_0 then
|
||||||
|
self.x = x - self.w
|
||||||
|
end
|
||||||
|
local _exp_1 = self.vertical
|
||||||
|
if "top" == _exp_1 then
|
||||||
|
self.y = y
|
||||||
|
elseif "center" == _exp_1 then
|
||||||
|
self.y = y - self.h / 2
|
||||||
|
elseif "bottom" == _exp_1 then
|
||||||
|
self.y = y - self.h
|
||||||
|
end
|
||||||
|
for i = 1, #self.child do
|
||||||
|
if not self.child[i].excludeMovement then
|
||||||
|
self.child[i]:move(x - oldX, y - oldY)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
getPosition = function(self)
|
||||||
|
local resultX = self.x
|
||||||
|
local resultY = self.y
|
||||||
|
local _exp_0 = self.horizontal
|
||||||
|
if "center" == _exp_0 then
|
||||||
|
resultX = resultX + (self.w / 2)
|
||||||
|
elseif "right" == _exp_0 then
|
||||||
|
resultX = resultX + self.w
|
||||||
|
end
|
||||||
|
local _exp_1 = self.vertical
|
||||||
|
if "center" == _exp_1 then
|
||||||
|
resultY = resultY + (self.h / 2)
|
||||||
|
elseif "bottom" == _exp_1 then
|
||||||
|
resultY = resultY + self.h
|
||||||
|
end
|
||||||
|
return resultX, resultY
|
||||||
|
end,
|
||||||
|
setSize = function(self, w, h)
|
||||||
|
if w then
|
||||||
|
local _exp_0 = self.horizontal
|
||||||
|
if "center" == _exp_0 then
|
||||||
|
self.x = self.x - ((w - self.w) / 2)
|
||||||
|
elseif "right" == _exp_0 then
|
||||||
|
self.x = self.x - (w - self.w)
|
||||||
|
end
|
||||||
|
self.w = w
|
||||||
|
end
|
||||||
|
if h then
|
||||||
|
local _exp_0 = self.vertical
|
||||||
|
if "center" == _exp_0 then
|
||||||
|
self.y = self.y - ((h - self.h) / 2)
|
||||||
|
elseif "bottom" == _exp_0 then
|
||||||
|
self.y = self.y - (h - self.h)
|
||||||
|
end
|
||||||
|
self.h = h
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
getSize = function(self)
|
||||||
|
return self.w, self.h
|
||||||
|
end,
|
||||||
|
adjustSize = function(self, w, h)
|
||||||
|
local W, H = self:getSize()
|
||||||
|
if w then
|
||||||
|
W = W + w
|
||||||
|
end
|
||||||
|
if h then
|
||||||
|
H = H + h
|
||||||
|
end
|
||||||
|
self:setSize(W, H)
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
align = function(self, horizontal, vertical)
|
||||||
|
self:setAlignment(horizontal, vertical)
|
||||||
|
self.x = self.parent.x
|
||||||
|
self.y = self.parent.y
|
||||||
|
local _exp_0 = self.horizontal
|
||||||
|
if "left" == _exp_0 then
|
||||||
|
self.x = self.x + self.margin
|
||||||
|
elseif "center" == _exp_0 then
|
||||||
|
self.x = self.x + ((self.parent.w - self.w) / 2)
|
||||||
|
elseif "right" == _exp_0 then
|
||||||
|
self.x = self.x + (self.parent.w - self.w - self.margin)
|
||||||
|
end
|
||||||
|
local _exp_1 = self.vertical
|
||||||
|
if "top" == _exp_1 then
|
||||||
|
self.y = self.y + self.margin
|
||||||
|
elseif "center" == _exp_1 then
|
||||||
|
self.y = self.y + ((self.parent.h - self.h) / 2)
|
||||||
|
elseif "bottom" == _exp_1 then
|
||||||
|
self.y = self.y + (self.parent.h - self.h - self.margin)
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
alignTo = function(self, element, horizontal, vertical)
|
||||||
|
local realParent = self.parent
|
||||||
|
self.parent = element
|
||||||
|
self:align(horizontal, vertical)
|
||||||
|
self.parent = realParent
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
setAlignment = function(self, horizontal, vertical)
|
||||||
|
if horizontal then
|
||||||
|
self.horizontal = horizontal
|
||||||
|
end
|
||||||
|
if vertical then
|
||||||
|
self.vertical = vertical
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
}
|
||||||
|
_base_0.__index = _base_0
|
||||||
|
_class_0 = setmetatable({
|
||||||
|
__init = function(self, pop, parent)
|
||||||
|
self.parent = parent
|
||||||
|
self.child = { }
|
||||||
|
self.x = parent.x or 0
|
||||||
|
self.y = parent.y or 0
|
||||||
|
self.w = 10
|
||||||
|
self.h = 10
|
||||||
|
self.horizontal = "left"
|
||||||
|
self.vertical = "top"
|
||||||
|
self.margin = 0
|
||||||
|
end,
|
||||||
|
__base = _base_0,
|
||||||
|
__name = "element"
|
||||||
|
}, {
|
||||||
|
__index = _base_0,
|
||||||
|
__call = function(cls, ...)
|
||||||
|
local _self_0 = setmetatable({}, _base_0)
|
||||||
|
cls.__init(_self_0, ...)
|
||||||
|
return _self_0
|
||||||
|
end
|
||||||
|
})
|
||||||
|
_base_0.__class = _class_0
|
||||||
|
element = _class_0
|
||||||
|
return _class_0
|
||||||
|
end
|
132
lib/pop/elements/text.lua
Normal file
132
lib/pop/elements/text.lua
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
local graphics
|
||||||
|
graphics = love.graphics
|
||||||
|
local sub, len
|
||||||
|
do
|
||||||
|
local _obj_0 = string
|
||||||
|
sub, len = _obj_0.sub, _obj_0.len
|
||||||
|
end
|
||||||
|
local path = sub(..., 1, len(...) - len("/text"))
|
||||||
|
local element = require(tostring(path) .. "/element")
|
||||||
|
local text
|
||||||
|
do
|
||||||
|
local _class_0
|
||||||
|
local _parent_0 = element
|
||||||
|
local _base_0 = {
|
||||||
|
draw = function(self)
|
||||||
|
graphics.setColor(self.color)
|
||||||
|
graphics.setFont(self.font)
|
||||||
|
graphics.print(self.text, self.x, self.y)
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
debugDraw = function(self)
|
||||||
|
graphics.setLineWidth(0.5)
|
||||||
|
graphics.setColor(0, 0, 0, 100)
|
||||||
|
graphics.rectangle("fill", self.x, self.y, self.w, self.h)
|
||||||
|
graphics.setColor(200, 0, 0, 200)
|
||||||
|
graphics.rectangle("line", self.x, self.y, self.w, self.h)
|
||||||
|
graphics.setColor(255, 200, 200, 255)
|
||||||
|
graphics.print("t", self.x, self.y)
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
setSize = function(self)
|
||||||
|
local w = self.font:getWidth(self.text)
|
||||||
|
local h = self.font:getHeight() * (select(2, self.text:gsub("\n", "\n")) + 1)
|
||||||
|
local _exp_0 = self.horizontal
|
||||||
|
if "center" == _exp_0 then
|
||||||
|
self.x = self.x - ((w - self.w) / 2)
|
||||||
|
elseif "right" == _exp_0 then
|
||||||
|
self.x = self.x - (w - self.w - self.margin)
|
||||||
|
end
|
||||||
|
local _exp_1 = self.vertical
|
||||||
|
if "center" == _exp_1 then
|
||||||
|
self.y = self.y - ((h - self.h) / 2)
|
||||||
|
elseif "right" == _exp_1 then
|
||||||
|
self.y = self.y - (h - self.h - self.margin)
|
||||||
|
end
|
||||||
|
self.w = w
|
||||||
|
self.h = h
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
setText = function(self, text)
|
||||||
|
if text == nil then
|
||||||
|
text = ""
|
||||||
|
end
|
||||||
|
self.text = text
|
||||||
|
self:setSize()
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
getText = function(self)
|
||||||
|
return self.text
|
||||||
|
end,
|
||||||
|
setFont = function(self, font)
|
||||||
|
self.font = font
|
||||||
|
self:setSize()
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
getFont = function(self)
|
||||||
|
return self.font
|
||||||
|
end,
|
||||||
|
setColor = function(self, r, g, b, a)
|
||||||
|
if a == nil then
|
||||||
|
a = 255
|
||||||
|
end
|
||||||
|
self.color = {
|
||||||
|
r,
|
||||||
|
g,
|
||||||
|
b,
|
||||||
|
a
|
||||||
|
}
|
||||||
|
return self
|
||||||
|
end,
|
||||||
|
getColor = function(self)
|
||||||
|
return unpack(self.color)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
_base_0.__index = _base_0
|
||||||
|
setmetatable(_base_0, _parent_0.__base)
|
||||||
|
_class_0 = setmetatable({
|
||||||
|
__init = function(self, pop, parent, text, color)
|
||||||
|
if text == nil then
|
||||||
|
text = ""
|
||||||
|
end
|
||||||
|
if color == nil then
|
||||||
|
color = {
|
||||||
|
255,
|
||||||
|
255,
|
||||||
|
255,
|
||||||
|
255
|
||||||
|
}
|
||||||
|
end
|
||||||
|
_class_0.__parent.__init(self, pop, parent)
|
||||||
|
self.font = graphics.newFont(14)
|
||||||
|
self:setText(text)
|
||||||
|
self.color = color
|
||||||
|
end,
|
||||||
|
__base = _base_0,
|
||||||
|
__name = "text",
|
||||||
|
__parent = _parent_0
|
||||||
|
}, {
|
||||||
|
__index = function(cls, name)
|
||||||
|
local val = rawget(_base_0, name)
|
||||||
|
if val == nil then
|
||||||
|
local parent = rawget(cls, "__parent")
|
||||||
|
if parent then
|
||||||
|
return parent[name]
|
||||||
|
end
|
||||||
|
else
|
||||||
|
return val
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
__call = function(cls, ...)
|
||||||
|
local _self_0 = setmetatable({}, _base_0)
|
||||||
|
cls.__init(_self_0, ...)
|
||||||
|
return _self_0
|
||||||
|
end
|
||||||
|
})
|
||||||
|
_base_0.__class = _class_0
|
||||||
|
if _parent_0.__inherited then
|
||||||
|
_parent_0.__inherited(_parent_0, _class_0)
|
||||||
|
end
|
||||||
|
text = _class_0
|
||||||
|
return _class_0
|
||||||
|
end
|
176
lib/pop/init.lua
Normal file
176
lib/pop/init.lua
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
local filesystem, graphics
|
||||||
|
do
|
||||||
|
local _obj_0 = love
|
||||||
|
filesystem, graphics = _obj_0.filesystem, _obj_0.graphics
|
||||||
|
end
|
||||||
|
local insert
|
||||||
|
insert = table.insert
|
||||||
|
local path = ...
|
||||||
|
local Pop
|
||||||
|
do
|
||||||
|
local _class_0
|
||||||
|
local _base_0 = {
|
||||||
|
create = function(self, elementType, parent, ...)
|
||||||
|
if parent == nil then
|
||||||
|
parent = self.window
|
||||||
|
end
|
||||||
|
local newElement = self.elements[elementType](parent, ...)
|
||||||
|
insert(parent.child, newElement)
|
||||||
|
return newElement
|
||||||
|
end,
|
||||||
|
update = function(self, dt, element)
|
||||||
|
if element == nil then
|
||||||
|
element = self.window
|
||||||
|
end
|
||||||
|
if not element.excludeUpdating then
|
||||||
|
if element.update then
|
||||||
|
element:update(dt)
|
||||||
|
end
|
||||||
|
for i = 1, #element.child do
|
||||||
|
self:update(dt, element.child[i])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
draw = function(self, element)
|
||||||
|
if element == nil then
|
||||||
|
element = self.window
|
||||||
|
end
|
||||||
|
if not element.excludeRendering then
|
||||||
|
if element.draw then
|
||||||
|
local _
|
||||||
|
do
|
||||||
|
local _base_1 = element
|
||||||
|
local _fn_0 = _base_1.draw
|
||||||
|
_ = function(...)
|
||||||
|
return _fn_0(_base_1, ...)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for i = 1, #element.child do
|
||||||
|
self:draw(element.child[i])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
mousepressed = function(self, button, x, y, element)
|
||||||
|
if element == nil then
|
||||||
|
element = self.window
|
||||||
|
end
|
||||||
|
if (x >= element.x) and (x <= (element.x + element.w)) then
|
||||||
|
if (y >= element.y) and (y <= (element.y + element.h)) then
|
||||||
|
for i = 1, #element.child do
|
||||||
|
if self:mousepressed(button, x, y, element.child[i]) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if element.mousepressed then
|
||||||
|
return element:mousepressed(button, x - element.x, y - element.y)
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
mousereleased = function(self, button, x, y, element)
|
||||||
|
if element == nil then
|
||||||
|
element = self.window
|
||||||
|
end
|
||||||
|
if (x >= element.x) and (x <= (element.x + element.w)) then
|
||||||
|
if (y >= element.y) and (y <= (element.y + element.h)) then
|
||||||
|
for i = 1, #element.child do
|
||||||
|
if self:mousereleased(button, x, y, element.child[i]) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if element.mousereleased then
|
||||||
|
return element:mousereleased(button, x - element.x, y - element.y)
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
keypressed = function(self, key)
|
||||||
|
return error("Unimplemented.")
|
||||||
|
end,
|
||||||
|
keyreleased = function(self, key)
|
||||||
|
return error("Unimplemented.")
|
||||||
|
end,
|
||||||
|
textinput = function(self, text)
|
||||||
|
return error("Unimplemented.")
|
||||||
|
end,
|
||||||
|
skin = function(self, element, skin, apply_to_children)
|
||||||
|
if apply_to_children == nil then
|
||||||
|
apply_to_children = true
|
||||||
|
end
|
||||||
|
element.margin = skin.margin
|
||||||
|
if element.background then
|
||||||
|
element.background = skin.background
|
||||||
|
end
|
||||||
|
if element.color then
|
||||||
|
element.color = skin.color
|
||||||
|
end
|
||||||
|
if element.font then
|
||||||
|
element.font = skin.font
|
||||||
|
end
|
||||||
|
if apply_to_children then
|
||||||
|
for i = 1, #element.child do
|
||||||
|
self:skin(element.child[i], skin)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
debugDraw = function(self, element)
|
||||||
|
if element == nil then
|
||||||
|
element = self.window
|
||||||
|
end
|
||||||
|
if element.debugDraw then
|
||||||
|
element:debugDraw()
|
||||||
|
else
|
||||||
|
graphics.setLineWidth(1)
|
||||||
|
graphics.setColor(0, 0, 0, 100)
|
||||||
|
graphics.rectangle("fill", element.x, element.y, element.w, element.h)
|
||||||
|
graphics.setColor(150, 150, 150, 150)
|
||||||
|
graphics.rectangle("line", element.x, element.y, element.w, element.h)
|
||||||
|
graphics.setColor(200, 200, 200, 255)
|
||||||
|
graphics.print(".", element.x, element.y)
|
||||||
|
end
|
||||||
|
for i = 1, #element.child do
|
||||||
|
self:debugDraw(element.child[i])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
_base_0.__index = _base_0
|
||||||
|
_class_0 = setmetatable({
|
||||||
|
__init = function(self)
|
||||||
|
self.elements = { }
|
||||||
|
self.window = {
|
||||||
|
child = { }
|
||||||
|
}
|
||||||
|
local elements = filesystem.getDirectoryItems(tostring(path) .. "/elements")
|
||||||
|
for i = 1, #elements do
|
||||||
|
local name = elements[i]:sub(1, -5)
|
||||||
|
self.elements[name] = require(tostring(path) .. "/elements/" .. tostring(name))
|
||||||
|
print("loaded element: " .. tostring(name))
|
||||||
|
if not self[name] then
|
||||||
|
self[name] = function(self, ...)
|
||||||
|
return self:create(name, ...)
|
||||||
|
end
|
||||||
|
print("wrapper created: " .. tostring(name) .. "()")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
self.window = self:create("element", self.window):setSize(graphics.getWidth(), graphics.getHeight())
|
||||||
|
return print("created window")
|
||||||
|
end,
|
||||||
|
__base = _base_0,
|
||||||
|
__name = "Pop"
|
||||||
|
}, {
|
||||||
|
__index = _base_0,
|
||||||
|
__call = function(cls, ...)
|
||||||
|
local _self_0 = setmetatable({}, _base_0)
|
||||||
|
cls.__init(_self_0, ...)
|
||||||
|
return _self_0
|
||||||
|
end
|
||||||
|
})
|
||||||
|
_base_0.__class = _class_0
|
||||||
|
Pop = _class_0
|
||||||
|
return _class_0
|
||||||
|
end
|
13
lib/pop/skins/clear.lua
Normal file
13
lib/pop/skins/clear.lua
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
local graphics
|
||||||
|
graphics = love.graphics
|
||||||
|
return {
|
||||||
|
color = {
|
||||||
|
255,
|
||||||
|
255,
|
||||||
|
255,
|
||||||
|
255
|
||||||
|
},
|
||||||
|
background = false,
|
||||||
|
font = graphics.newFont(13),
|
||||||
|
margin = 2
|
||||||
|
}
|
2
run demo.bat
Normal file
2
run demo.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
"C:\Program Files\Love\LOVE.exe" "%cd%\demo"
|
@ -29,7 +29,7 @@ class element
|
|||||||
@x += x
|
@x += x
|
||||||
@y += y
|
@y += y
|
||||||
|
|
||||||
for i in @child do
|
for i = 1, #@child
|
||||||
if not @child[i].excludeMovement
|
if not @child[i].excludeMovement
|
||||||
@child[i]\move x, y
|
@child[i]\move x, y
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ class element
|
|||||||
when "bottom"
|
when "bottom"
|
||||||
@y = y - @h
|
@y = y - @h
|
||||||
|
|
||||||
for i in @child
|
for i = 1, #@child
|
||||||
if not @child[i].excludeMovement
|
if not @child[i].excludeMovement
|
||||||
@child[i]\move x - oldX, y - oldY
|
@child[i]\move x - oldX, y - oldY
|
||||||
|
|
||||||
@ -86,6 +86,7 @@ class element
|
|||||||
@x -= (w - @w)/2
|
@x -= (w - @w)/2
|
||||||
when "right"
|
when "right"
|
||||||
@x -= w - @w
|
@x -= w - @w
|
||||||
|
|
||||||
@w = w
|
@w = w
|
||||||
|
|
||||||
if h
|
if h
|
||||||
|
@ -32,7 +32,7 @@ class text extends element
|
|||||||
|
|
||||||
setSize: =>
|
setSize: =>
|
||||||
w = @font\getWidth @text
|
w = @font\getWidth @text
|
||||||
h = @font\getHeight * (select(2, @text:gsub("\n", "\n")) + 1) --hack to get height of multiple lines of text
|
h = @font\getHeight! * (select(2, @text\gsub("\n", "\n")) + 1) --hack to get height of multiple lines of text
|
||||||
|
|
||||||
switch @horizontal
|
switch @horizontal
|
||||||
when "center"
|
when "center"
|
||||||
|
@ -6,24 +6,26 @@ path = ...
|
|||||||
class Pop
|
class Pop
|
||||||
new: =>
|
new: =>
|
||||||
@elements = {}
|
@elements = {}
|
||||||
@window = {child: {}} --TODO eliminate this crap
|
@window = {child: {}}
|
||||||
--@focused = @window --TODO redo better
|
--@focused = @window --TODO redo better
|
||||||
|
|
||||||
elements = filesystem.getDirectoryItems "#{path}/elements"
|
elements = filesystem.getDirectoryItems "#{path}/elements"
|
||||||
for i in elements
|
for i = 1, #elements
|
||||||
name = elements[i]\sub 1, -5
|
name = elements[i]\sub 1, -5
|
||||||
@elements[name] = require "#{path}/elements/#{name}"
|
@elements[name] = require "#{path}/elements/#{name}"
|
||||||
print "loaded element: #{name}"
|
print "loaded element: #{name}"
|
||||||
|
|
||||||
if not @name
|
if not @[name]
|
||||||
@name = (...) -> return @create(name, ...)
|
@[name] = (...) => return @create(name, ...)
|
||||||
print "wrapped created: #{name}()"
|
print "wrapper created: #{name}()"
|
||||||
|
|
||||||
@window = @create("element")\setSize(graphics.getWidth!, graphics.getHeight!)
|
@window = @create("element", @window)\setSize(graphics.getWidth!, graphics.getHeight!)
|
||||||
print "created window"
|
print "created window"
|
||||||
|
--@window.parent = @window
|
||||||
|
--@window.parent = false
|
||||||
|
|
||||||
create: (elementType, parent=@window, ...) =>
|
create: (elementType, parent=@window, ...) =>
|
||||||
newElement = @elements[elementType](@, parent, ...)
|
newElement = @elements[elementType](parent, ...)
|
||||||
insert parent.child, newElement
|
insert parent.child, newElement
|
||||||
return newElement
|
return newElement
|
||||||
|
|
||||||
@ -32,7 +34,7 @@ class Pop
|
|||||||
if element.update
|
if element.update
|
||||||
element\update dt
|
element\update dt
|
||||||
|
|
||||||
for i in element.child
|
for i = 1, #element.child
|
||||||
@update dt, element.child[i]
|
@update dt, element.child[i]
|
||||||
|
|
||||||
draw: (element=@window) =>
|
draw: (element=@window) =>
|
||||||
@ -40,14 +42,38 @@ class Pop
|
|||||||
if element.draw
|
if element.draw
|
||||||
element\draw
|
element\draw
|
||||||
|
|
||||||
for i in element.child
|
for i = 1, #element.child
|
||||||
@draw element.child[i]
|
@draw element.child[i]
|
||||||
|
|
||||||
mousepressed: (button, x, y, element) =>
|
mousepressed: (button, x, y, element=@window) =>
|
||||||
error "Unimplemented."
|
-- if within bounds of element, check its children
|
||||||
|
-- if not handled by child, check if it can handle it
|
||||||
|
-- abort loop with success if handled
|
||||||
|
if (x >= element.x) and (x <= (element.x + element.w))
|
||||||
|
if (y >= element.y) and (y <= (element.y + element.h))
|
||||||
|
for i = 1, #element.child
|
||||||
|
if @mousepressed button, x, y, element.child[i]
|
||||||
|
return true
|
||||||
|
|
||||||
mousereleased: (button, x, y, element) =>
|
if element.mousepressed
|
||||||
error "Unimplemented."
|
return element\mousepressed button, x - element.x, y - element.y
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
|
||||||
|
--TODO rewrite for multiple return values, mousereleased is the first val, click is the second!
|
||||||
|
mousereleased: (button, x, y, element=@window) =>
|
||||||
|
-- same as mousepressed, except an additional click is fired
|
||||||
|
-- (TODO fix, so you have to start and end the click on the same element)
|
||||||
|
if (x >= element.x) and (x <= (element.x + element.w))
|
||||||
|
if (y >= element.y) and (y <= (element.y + element.h))
|
||||||
|
for i = 1, #element.child
|
||||||
|
if @mousereleased button, x, y, element.child[i]
|
||||||
|
return true
|
||||||
|
|
||||||
|
if element.mousereleased
|
||||||
|
return element\mousereleased button, x - element.x, y - element.y
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
|
||||||
keypressed: (key) =>
|
keypressed: (key) =>
|
||||||
error "Unimplemented."
|
error "Unimplemented."
|
||||||
@ -58,7 +84,7 @@ class Pop
|
|||||||
textinput: (text) =>
|
textinput: (text) =>
|
||||||
error "Unimplemented."
|
error "Unimplemented."
|
||||||
|
|
||||||
skin: (element, skin, apply_to_children=false) =>
|
skin: (element, skin, apply_to_children=true) =>
|
||||||
element.margin = skin.margin
|
element.margin = skin.margin
|
||||||
|
|
||||||
if element.background
|
if element.background
|
||||||
@ -68,8 +94,8 @@ class Pop
|
|||||||
if element.font
|
if element.font
|
||||||
element.font = skin.font
|
element.font = skin.font
|
||||||
|
|
||||||
if not apply_to_children
|
if apply_to_children
|
||||||
for i in element.child
|
for i = 1, #element.child
|
||||||
@skin element.child[i], skin
|
@skin element.child[i], skin
|
||||||
|
|
||||||
debugDraw: (element=@window) =>
|
debugDraw: (element=@window) =>
|
||||||
@ -84,5 +110,5 @@ class Pop
|
|||||||
graphics.setColor 200, 200, 200, 255
|
graphics.setColor 200, 200, 200, 255
|
||||||
graphics.print ".", element.x, element.y
|
graphics.print ".", element.x, element.y
|
||||||
|
|
||||||
for i in element.child
|
for i = 1, #element.child
|
||||||
@debugDraw element.child[i]
|
@debugDraw element.child[i]
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import graphics from love
|
import graphics from love
|
||||||
|
|
||||||
skin = {
|
return {
|
||||||
color: {255, 255, 255, 255}
|
color: {255, 255, 255, 255}
|
||||||
background: false
|
background: false
|
||||||
font: graphics.newFont(13)
|
font: graphics.newFont 13
|
||||||
margin: 2
|
margin: 2
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user