112 lines
2.8 KiB
Plaintext
112 lines
2.8 KiB
Plaintext
--@include element.txt
|
|
--@include label.txt
|
|
--@include button.txt
|
|
--@include /koptilnya/libs/utils.txt
|
|
|
|
require("element.txt")
|
|
require("label.txt")
|
|
require("button.txt")
|
|
require("/koptilnya/libs/utils.txt")
|
|
|
|
EPanel = class("EPanel", Element)
|
|
|
|
accessorFunc(EPanel, "_backgroundColor", "BackgroundColor", Color(23, 23, 23))
|
|
accessorFunc(EPanel, "_parentLock", "ParentLock", false)
|
|
|
|
function EPanel:initialize()
|
|
Element.initialize(self)
|
|
|
|
self._minimized = false
|
|
|
|
self.title = ELabel:new()
|
|
self.title:setPos(12, 8)
|
|
self:addChild(self.title)
|
|
|
|
self.minimizeButton = EButton:new()
|
|
self.minimizeButton:setText("_")
|
|
self.minimizeButton:setSize(32, 32)
|
|
self.minimizeButton:setRadius(0)
|
|
self.minimizeButton:setColor(Color(0, 0, 0))
|
|
self.minimizeButton:setHoveredColor(Color(25, 25, 25))
|
|
self:addChild(self.minimizeButton)
|
|
|
|
self.closeButton = EButton:new()
|
|
self.closeButton:setText("X")
|
|
self.closeButton:setSize(32, 32)
|
|
self.closeButton:setRadius(0)
|
|
self.closeButton:setColor(Color(0, 0, 0))
|
|
self.closeButton:setHoveredColor(Color(25, 25, 25))
|
|
self:addChild(self.closeButton)
|
|
|
|
self:setTitle("Panel")
|
|
end
|
|
|
|
function EPanel:setTitle(title)
|
|
self.title:setText(title)
|
|
end
|
|
|
|
function EPanel:getTitle()
|
|
return self.title:getText()
|
|
end
|
|
|
|
function EPanel:setMinimized(state)
|
|
self._minimized = state
|
|
end
|
|
|
|
function EPanel:isMinimized()
|
|
return self._minimized
|
|
end
|
|
|
|
function EPanel:onMousePressed(x, y, key, keyName)
|
|
if keyName == "MOUSE1" then
|
|
local aX, aY = self:getAbsolutePos()
|
|
|
|
if self:isDraggable() and y < aY + 33 then
|
|
self._dragStartPos = {x - self:getX(), y - self:getY()}
|
|
end
|
|
end
|
|
end
|
|
|
|
function EPanel:onMouseReleased(x, y, key, keyName)
|
|
if keyName == "MOUSE1" then
|
|
if self:isDraggable() then
|
|
self._dragStartPos = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
function EPanel:onMouseMoved(x, y)
|
|
if self._dragStartPos then
|
|
local targetX, targetY = x - self._dragStartPos[1], y - self._dragStartPos[2]
|
|
|
|
if self:hasParent() and self:getParentLock() then
|
|
targetX = math.clamp(targetX, 0, 1920 - self:getWidth())
|
|
targetY = math.clamp(targetY, 0, 1080 - self:getHeight())
|
|
end
|
|
|
|
self:setPos(targetX, targetY)
|
|
end
|
|
end
|
|
|
|
function EPanel:onMouseLeave()
|
|
self._dragStartPos = nil
|
|
end
|
|
|
|
function EPanel:performLayout(w, h)
|
|
self.closeButton:setPos(w - 33, 1)
|
|
self.minimizeButton:setPos(w - 65, 1)
|
|
end
|
|
|
|
function EPanel:paint()
|
|
local x, y = self:getAbsolutePos()
|
|
local w, h = self:getSize()
|
|
|
|
render.setColor(Color(255, 255, 255, 10))
|
|
render.drawRectFast(x, y, w, h)
|
|
|
|
render.setColor(Color(0, 0, 0))
|
|
render.drawRectFast(x + 1, y + 1, w - 2, 32)
|
|
|
|
render.setColor(self:getBackgroundColor())
|
|
render.drawRectFast(x + 1, y + 33, w - 2, h - 34)
|
|
end |