This is a read-only mirror of Please direct any pull-request, issue or discussion to the main repo.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.6 KiB

--- 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)
self = setmetatable(args, self)
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'
return self
function Label:draw()
local x,y,w,h = self.x,self.y,self.w,self.h
local color, font, _ = core.themeForWidget(self)
y = y + core.verticalOffsetForAlign(self.valign, font, h)
shadowtext.printf(self.text, x+2, y, w-4, self.align)
return Label