Files
love-luigi/luigi/style.lua
2015-11-09 17:14:40 -05:00

52 lines
1.4 KiB
Lua

local ROOT = (...):gsub('[^.]*$', '')
local Base = require(ROOT .. 'base')
local Style = Base:extend()
function Style:constructor (rules, lookupNames)
self.rules = rules
self.lookupNames = lookupNames
end
function Style:getProperty (object, property, original)
local value = rawget(object, property)
if value ~= nil then return value end
original = original or object
for _, lookupName in ipairs(self.lookupNames) do
local lookup = rawget(object, lookupName)
if lookup then
if type(lookup) ~= 'table' then
lookup = { lookup }
end
for _, lookupValue in ipairs(lookup) do
for _, rule in ipairs(self:getRules(original, lookupValue)) do
local value = self:getProperty(rule, property, original)
if value ~= nil then return value end
end
end -- lookup values
end -- if lookup
end -- lookup names
end
function Style:getRules (object, lookupValue)
local rules = self.rules
local result = {}
for _, flag in ipairs { 'pressed', 'focused', 'hovered', 'active' } do
if rawget(object, flag) then
result[#result + 1] = rules[lookupValue .. '_' .. flag]
else
result[#result + 1] = rules[lookupValue .. '_not_' .. flag]
end
end
result[#result + 1] = rules[lookupValue]
return result
end
return Style