local pop local graphics graphics = love.graphics local floor, max do local _obj_0 = math floor, max = _obj_0.floor, _obj_0.max end local inheritsFromElement inheritsFromElement = require(tostring((...):sub(1, -19)) .. "/util").inheritsFromElement local element do local _class_0 local _base_0 = { load = function(pop_lib) pop = pop_lib end, align = function(self, horizontal, vertical, toPixel) if toPixel == nil then toPixel = true end if not (self.data.align) then return self end if horizontal then self.data.horizontalAlign = horizontal end if vertical then self.data.verticalAlign = vertical end self.data.x = self.parent.data.x self.data.y = self.parent.data.y local _exp_0 = self.data.horizontalAlign if "left" == _exp_0 then self.data.x = self.data.x + max(self.parent.data.padding + self.parent.data.horizontalPadding, self.data.margin + self.data.horizontalMargin) elseif "center" == _exp_0 then self.data.x = self.data.x + ((self.parent.data.w - self.data.w) / 2) elseif "right" == _exp_0 then self.data.x = self.data.x + (self.parent.data.w - self.data.w - max(self.parent.data.padding + self.parent.data.horizontalPadding, self.data.margin + self.data.horizontalMargin)) else self.data.x = self.data.x + (self.parent.data.w * self.data.horizontalAlign) if self.data.horizontalAlign < 0 then self.data.x = self.data.x + self.parent.data.w end end local _exp_1 = self.data.verticalAlign if "top" == _exp_1 then self.data.y = self.data.y + (self.parent.data.padding + self.data.margin + self.data.verticalMargin) elseif "center" == _exp_1 then self.data.y = self.data.y + ((self.parent.data.h - self.data.h) / 2) elseif "bottom" == _exp_1 then self.data.y = self.data.y + (self.parent.data.h - self.data.h - max(self.parent.data.padding + self.parent.data.verticalPadding, self.data.margin + self.data.verticalMargin)) else self.data.y = self.data.y + (self.parent.data.h * self.data.verticalAlign) if self.data.verticalAlign < 0 then self.data.y = self.data.y + self.parent.data.h end end if toPixel then self.data.x = floor(self.data.x) self.data.y = floor(self.data.y) end return self end, setPosition = function(self, x, y, toPixel) if toPixel == nil then toPixel = true end local dx, dy = self.data.x, self.data.y if x then self.data.x = x local _exp_0 = self.data.horizontalAlign if "center" == _exp_0 then self.data.x = self.data.x - (self.data.w / 2) elseif "right" == _exp_0 then self.data.x = self.data.x - self.data.w end end if y then self.data.y = y local _exp_0 = self.data.verticalAlign if "center" == _exp_0 then self.data.y = self.data.y - (self.data.h / 2) elseif "bottom" == _exp_0 then self.data.y = self.data.y - self.data.h end end if toPixel then self.data.x = floor(self.data.x) self.data.y = floor(self.data.y) end dx = self.data.x - dx dy = self.data.y - dy local _list_0 = self.child for _index_0 = 1, #_list_0 do local child = _list_0[_index_0] child:move(dx, dy) end return self end, getPosition = function(self) local x, y = self.data.x, self.data.y local _exp_0 = self.data.horizontalAlign if "center" == _exp_0 then x = x + (self.data.w / 2) elseif "right" == _exp_0 then y = y + self.data.w end local _exp_1 = self.data.verticalAlign if "center" == _exp_1 then y = y + (self.data.h / 2) elseif "bottom" == _exp_1 then y = y + self.data.h end return x, y end, setSize = function(self, w, h) if w then self.data.w = w end if h then self.data.h = h end self:align() return self end, getSize = function(self) return self.data.w, self.data.h end, setWidth = function(self, w) self.data.w = w self:align() return self end, getWidth = function(self) return self.data.w end, setHeight = function(self, h) self.data.h = h self:align() return self end, getHeight = function(self) return self.data.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, move = function(self, x, y) if x == nil then x = 0 end if y == nil then y = 0 end self.data.x = self.data.x + x self.data.y = self.data.y + y local _list_0 = self.child for _index_0 = 1, #_list_0 do local child = _list_0[_index_0] child:move(x, y) end return self end, setPadding = function(self, padding) self.data.padding = padding self:align() return self end, getPadding = function(self) return self.data.padding end, setMargin = function(self, margin) self.data.margin = margin self:align() return self end, getMargin = function(self) return self.data.margin end, indexOf = function(self, element) for i = 1, #self.child do if self.child[i] == element then return i end end end, dataIndexOf = function(self, data) for i = 1, #self.data.child do if self.data.child[i] == data then return i end end end, add = function(self, element) if not (inheritsFromElement(element)) then for _index_0 = 1, #element do local e = element[_index_0] self:add(e) return self end end element.parent:remove(element) table.insert(self.child, element) table.insert(self.data.child, element.data) return self end, remove = function(self, element) if not (inheritsFromElement(element)) then for _index_0 = 1, #element do local e = element[_index_0] self:remove(e) return self end end local index = self:indexOf(element) local dataIndex = self:dataIndexOf(element.data) table.remove(self.child, index) table.remove(self.data.child, dataIndex) return self end, delete = function(self) if self == pop.hovered then pop.hovered = false pop.log(tostring(self) .. " (" .. tostring(self.type) .. ") unfocused (deleted)") end for i = #self.child, 1, -1 do self.child[i]:delete() end if self.parent then for i = 1, #self.parent.child do if self.parent.child[i] == self then table.remove(self.parent.child, i) break end end end if self.parent then for i = 1, #self.parent.data.child do if self.parent.data.child[i] == self.data then table.remove(self.parent.data.child, i) break end end end self.parent = nil self.data.parent = nil self = nil end } _base_0.__index = _base_0 _class_0 = setmetatable({ __init = function(self, parent, data) if data == nil then data = { } end self.parent, self.data = parent, data if type(self.data) ~= "table" then self.data = { } end if not (self.data.parent) then self.data.parent = false end if not (self.data.child) then self.data.child = { } end if not (self.data.type) then self.data.type = "element" end if self.data.update == nil then self.data.update = true end if self.data.draw == nil then self.data.draw = true end if self.data.hoverable == nil then self.data.hoverable = true end if not (self.data.x) then if self.parent then self.data.x = self.parent.data.x else self.data.x = 0 end end if not (self.data.y) then if self.parent then self.data.y = self.parent.data.y else self.data.y = 0 end end if not (self.data.w) then self.data.w = 0 end if not (self.data.h) then self.data.h = 0 end if not (self.data.size) then self.data.size = 0 end if not (self.data.verticalSize) then self.data.verticalSize = 0 end if not (self.data.horizontalSize) then self.data.horizontalSize = 0 end if (self.data.align == nil) and self.parent then self.data.align = true end if not (self.data.verticalAlign) then self.data.verticalAlign = "top" end if not (self.data.horizontalAlign) then self.data.horizontalAlign = "left" end if not (self.data.margin) then self.data.margin = 0 end if not (self.data.horizontalMargin) then self.data.horizontalMargin = 0 end if not (self.data.verticalMargin) then self.data.verticalMargin = 0 end if not (self.data.padding) then self.data.padding = 0 end if not (self.data.horizontalPadding) then self.data.horizontalPadding = 0 end if not (self.data.verticalPadding) then self.data.verticalPadding = 0 end self.child = { } if not (self.__class.align) then if self.data.size ~= 0 or self.data.verticalSize ~= 0 or self.data.horizontalSize ~= 0 then return self:setSize(self.parent.data.w * (self.data.size + self.data.verticalSize), self.parent.data.h * (self.data.size + self.data.horizontalSize)) elseif self.data.align then return self:align() end end 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