mirror of
https://codeberg.org/1414codeforge/yui.git
synced 2025-02-20 05:40:36 +01:00
This commit allows more flexible and consistent theme overriding rules for each Widget. There are 3 levels of customization. 1. Global theme (yui.theme) this is the default theme for every Ui 2. Ui theme, this overrides the global theme and provides a default for every Widget of the Ui 3. Widget theme, this overrides the Ui theme for a single widget This commit also allows themes to specify a font field. This replaces the sparse color, font and cornerRadius field often provided by each Widget. Widgets and Uis may also partially override a theme by specifying only a few fields.
54 lines
1.3 KiB
Lua
54 lines
1.3 KiB
Lua
--- Local drawing helpers
|
|
--
|
|
-- @module yui.core
|
|
-- @copyright 2022, The DoubleFourteen Code Forge
|
|
-- @author Lorenzo Cogotti, Andrea Pasquini
|
|
|
|
local core = {}
|
|
|
|
-- Helpers for drawing
|
|
function core.verticalOffsetForAlign(valign, font, h)
|
|
if valign == 'top' then
|
|
return 0
|
|
elseif valign == 'bottom' then
|
|
return h - font:getHeight()
|
|
end
|
|
-- else: 'middle'
|
|
return (h - font:getHeight()) / 2
|
|
end
|
|
|
|
function core.themeForWidget(widget)
|
|
local uiTheme = widget.ui.theme
|
|
local theme = widget.theme or uiTheme
|
|
|
|
local color = theme.color or uiTheme.color
|
|
local font = theme.font or uiTheme.font or love.graphics.getFont()
|
|
local cornerRadius = theme.cornerRadius or uiTheme.cornerRadius
|
|
|
|
return color, font, cornerRadius
|
|
end
|
|
|
|
function core.colorForWidgetState(widget, color)
|
|
color = color or widget.theme.color or widget.ui.theme.color
|
|
|
|
if widget.active then
|
|
return color.active
|
|
elseif widget:isFocused() then
|
|
return color.hovered
|
|
else
|
|
return color.normal
|
|
end
|
|
end
|
|
|
|
function core.drawBox(x,y,w,h, color, cornerRadius)
|
|
w = math.max(cornerRadius/2, w)
|
|
if h < cornerRadius/2 then
|
|
y,h = y - (cornerRadius - h), cornerRadius/2
|
|
end
|
|
|
|
love.graphics.setColor(color.bg)
|
|
love.graphics.rectangle('fill', x,y, w,h, cornerRadius)
|
|
end
|
|
|
|
return core
|