Added text buttons and button groups.

This commit is contained in:
2025-10-05 22:09:20 -04:00
parent 82d2a89a0a
commit bed93d1de4
15 changed files with 398 additions and 38 deletions

73
src/ui/textbtn.lua Normal file
View File

@@ -0,0 +1,73 @@
------------------------------------------------------------------------------
-- Imports
------------------------------------------------------------------------------
local love = require 'love'
local make_class = require 'src.utils.classes'
local Button = require 'src.ui.button'
local Color = require 'src.utils.color'
------------------------------------------------------------------------------
-- Class definitions
------------------------------------------------------------------------------
local TextButton = make_class(Button)
------------------------------------------------------------------------------
-- Class methods
------------------------------------------------------------------------------
function TextButton:_init(text, font, x, y, callback, base_col, sel_color, press_col)
Button._init(self, x, y, callback)
self.font = font
self.text = text
self.base_col = base_col ~= nil and base_col or Color(255, 255, 255)
self.sel_color = sel_color ~= nil and sel_color or Color(215, 0, 0)
self.press_col = press_col ~= nil and press_col or Color(99, 99, 139)
end
function TextButton:load()
if not self.font:is_loaded() then
self.font:load()
end
-- If the label's size has not been computed then do it.
if self.w == nil or self.h == nil then self:set_dimensions() end
end
function TextButton:unload()
self.font:unload()
end
function TextButton:is_loaded()
return self.font:is_loaded() and self.w ~= nil and self.h ~= nil
end
function TextButton:set_dimensions()
self.w = self.font:get_width(self.text)
self.h = self.font:get_height(self.text)
end
function TextButton:draw()
local color = (self.pressed and self.press_col) or ((self.selected and self.sel_color) or self.base_col)
love.graphics.setColor(color.r, color.g, color.b)
self.font:set()
love.graphics.print(self.text, self.x, self.y)
self.font:unset()
love.graphics.setColor()
end
------------------------------------------------------------------------------
-- Module return
------------------------------------------------------------------------------
return TextButton