local GUI = require("GUI-Framework") local Vector2 = require("Vector2") local utils = require("utils") local Button = GUI.newTemplate("Button") Button.isHover = false Button.isDown = false Button.text = "" Button.font = love.graphics.getFont() function Button:load() local minWidth = self.font:getWidth(self.text) local minHeight = self.font:getHeight(self.text) * ((select(2, self.text:gsub('\n', '\n')) or 0) + 1) if self.size.x < minWidth then self.size.x = minWidth + 10 end if self.size.y < minHeight then self.size.y = minHeight + 10 end end function Button:draw() if self.isDown then self:drawDown() elseif self.isHover then self:drawHover() else self:drawDefault() end end function Button:drawHover() local x, y, width, height = self:getBounds() local cx, cy = x + width/2, y + height/2 -- Shadow utils.smoothRectangle(x, y, width, height, 2, utils.rgba(0, 0, 0, 0.62)) -- The actual button utils.smoothRectangle(x, y-1, width, height, 2, utils.rgb(42, 147, 247)) -- Text love.graphics.setColor(1, 1, 1) utils.alignedPrint(self.font, self.text, cx, cy-1) end function Button:drawDefault() local x, y, width, height = self:getBounds() local cx, cy = x + width/2, y + height/2 -- Shadow utils.smoothRectangle(x, y, width, height, 2, utils.rgba(0, 0, 0, 0.62)) -- The actual button utils.smoothRectangle(x, y-1, width, height, 2, utils.rgb(56, 158, 255)) -- Text love.graphics.setColor(1, 1, 1) utils.alignedPrint(self.font, self.text, cx, cy-1) end function Button:mousemoved(x, y) if self:inBounds(x, y) then self.isHover = true return true else self.isHover = false end end function Button:mousemovedFallback() self.isHover = false end function Button:mousepressed() if self.isHover then self.isDown = true return true end end function Button:mousereleased(x, y, ...) if self.isDown and self:inBounds(x, y) then if self.mouseClicked then self:mouseClicked(x, y, ...) end end self.isDown = false end function Button:drawDown() local x, y, width, height = self:getBounds() local cx, cy = x + width/2, y + height/2 -- the actual button utils.smoothRectangle(x, y, width, height, 2, utils.rgb(0, 116, 225)) -- Text love.graphics.setColor(1, 1, 1) utils.alignedPrint(self.font, self.text, cx, cy) end