From 45a4b650539ada97cea948e46c08b7d126b279fb Mon Sep 17 00:00:00 2001 From: len0rd Date: Tue, 12 Aug 2025 12:54:15 -0400 Subject: [PATCH 1/2] add 'scale' option support to drawing a button box --- theme.lua | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/theme.lua b/theme.lua index ff5e1c8..6986dcc 100644 --- a/theme.lua +++ b/theme.lua @@ -18,14 +18,25 @@ function theme.getColorForState(opt) return (opt.color and opt.color[opt.state]) or theme.color[s] end -function theme.drawBox(x,y,w,h, colors, cornerRadius, outline) +function theme.drawBox(x,y,w,h, colors, cornerRadius, outline, scale) colors = colors or theme.getColorForState(opt) - cornerRadius = cornerRadius or theme.cornerRadius + cornerRadius = (cornerRadius or theme.cornerRadius) w = math.max(cornerRadius/2, w) if h < cornerRadius/2 then y,h = y - (cornerRadius - h), cornerRadius/2 end + -- by default, scale will operate about the center of the box. meaning it grows + -- out/in in all directions + if scale and scale ~= 1.0 then + local baseW, baseH = w, h + w = w * scale + h = h * scale + x = x - (w - baseW) / 2 + y = y - (h - baseH) / 2 + cornerRadius = cornerRadius * scale + end + love.graphics.setColor(colors.bg) love.graphics.rectangle('fill', x,y, w,h, cornerRadius) if outline ~= nil then @@ -56,13 +67,13 @@ end function theme.Button(text, opt, x,y,w,h) local c = theme.getColorForState(opt) + local scale = opt.scale or 1.0 - theme.drawBox(x,y,w,h, c, opt.cornerRadius, opt.outline) + theme.drawBox(x,y,w,h, c, opt.cornerRadius, opt.outline, scale) love.graphics.setColor(c.fg) love.graphics.setFont(opt.font) -- ensure text remains aligned regardless of scale - local scale = opt.scale or 1.0 local align = opt.align or "center" local textX = x local textY = y From 07a1731419872dde74d1e1208c761210037289be Mon Sep 17 00:00:00 2001 From: len0rd Date: Tue, 12 Aug 2025 12:54:44 -0400 Subject: [PATCH 2/2] better support for custom color themes in button and label --- button.lua | 1 + label.lua | 1 + 2 files changed, 2 insertions(+) diff --git a/button.lua b/button.lua index 7f5d365..f365654 100644 --- a/button.lua +++ b/button.lua @@ -6,6 +6,7 @@ return function(core, text, ...) local opt, x,y,w,h = core.getOptionsAndSize(...) opt.id = opt.id or text opt.font = opt.font or love.graphics.getFont() + opt.color = opt.color or core.theme.color w = w or opt.font:getWidth(text) + 4 h = h or opt.font:getHeight() + 4 diff --git a/label.lua b/label.lua index 9f45a86..79834b8 100644 --- a/label.lua +++ b/label.lua @@ -6,6 +6,7 @@ return function(core, text, ...) local opt, x,y,w,h = core.getOptionsAndSize(...) opt.id = opt.id or text opt.font = opt.font or love.graphics.getFont() + opt.color = opt.color or core.theme.color w = w or opt.font:getWidth(text) + 4 h = h or opt.font:getHeight() + 4