57 lines
1.7 KiB
Lua
57 lines
1.7 KiB
Lua
--- Implements a static label widget
|
|
--
|
|
-- @classmod yui.Label
|
|
-- @copyright 2022, The DoubleFourteen Code Forge
|
|
-- @author Lorenzo Cogotti, Andrea Pasquini
|
|
--
|
|
|
|
local BASE = (...):gsub('label$', '')
|
|
|
|
local Widget = require(BASE..'widget')
|
|
local core = require(BASE..'core')
|
|
|
|
local shadowtext = require 'lib.gear.shadowtext'
|
|
local T = require('lib.moonspeak').translate
|
|
|
|
-- Labels don't accept focus
|
|
local Label = setmetatable({
|
|
nofocus = true,
|
|
__call = function(cls, args) return cls.new(args) end
|
|
}, Widget)
|
|
Label.__index = Label
|
|
|
|
--- Attributes accepted by the @{Label} widget in addition to the standard @{yui.Widget.WidgetAttributes|attributes}.
|
|
--
|
|
-- @field text (string) text displayed inside the Label
|
|
-- @field[opt='center'] valign (string) vertical alignment 'top', 'bottom', 'center'
|
|
-- @field[opt='center'] align (string) horizontal alignment, 'left', 'center', 'right'
|
|
-- @field notranslate (boolean) don't translate text
|
|
-- @table LabelAttributes
|
|
|
|
--- Label constructor
|
|
-- @param args (@{LabelAttributes}) widget attributes
|
|
function Label.new(args)
|
|
local self = setmetatable(args, Label)
|
|
|
|
self.text = self.text or ""
|
|
self.text = self.notranslate and self.text or T(self.text)
|
|
self.align = self.align or 'center'
|
|
self.valign = self.valign or 'center'
|
|
self.color = self.color or core.theme.color
|
|
return self
|
|
end
|
|
|
|
function Label:draw()
|
|
local x,y,w,h = self.x,self.y,self.w,self.h
|
|
local font = self.font or love.graphics.getFont()
|
|
local c = self.color.normal
|
|
|
|
y = y + core.verticalOffsetForAlign(self.valign, font, h)
|
|
|
|
love.graphics.setColor(c.fg)
|
|
love.graphics.setFont(font)
|
|
shadowtext.printf(self.text, x+2, y, w-4, self.align)
|
|
end
|
|
|
|
return Label
|