clocktoy/loveframes/libraries/skins.lua

118 lines
3.3 KiB
Lua

--[[------------------------------------------------
-- Love Frames - A GUI library for LOVE --
-- Copyright (c) 2012-2014 Kenny Shields --
--]]------------------------------------------------
return function(loveframes)
---------- module start ----------
-- skins library
loveframes.skins = {}
--[[---------------------------------------------------------
- func: RegisterSkin(skin)
- desc: registers a skin
--]]---------------------------------------------------------
function loveframes.RegisterSkin(skin)
local skins = loveframes.skins
local name = skin.name
local author = skin.author
local version = skin.version
local basename = skin.base
local newskin = false
if name == "" or not name then
loveframes.Error("Skin registration error: Invalid or missing name data.")
end
if author == "" or not author then
loveframes.Error("Skin registration error: Invalid or missing author data.")
end
if version == "" or not version then
loveframes.Error("Skin registration error: Invalid or missing version data.")
end
local namecheck = skins[name]
if namecheck then
loveframes.Error("Skin registration error: A skin with the name '" ..name.. "' already exists.")
end
local dir = skin.directory or loveframes.config["DIRECTORY"] .. "/skins/" ..name
local dircheck = love.filesystem.getInfo(dir) ~= nil and love.filesystem.getInfo(dir)["type"] == "directory"
if not dircheck then
loveframes.Error("Skin registration error: Could not find a directory for skin '" ..name.. "'.")
end
local imagedir = skin.imagedir or dir .. "/images"
local imagedircheck = love.filesystem.getInfo(imagedir) ~= nil and love.filesystem.getInfo(imagedir)["type"] == "directory"
if not imagedircheck then
loveframes.Error("Skin registration error: Could not find an image directory for skin '" ..name.. "'.")
end
if basename then
--local basename = base
local base = skins[basename]
if not base then
loveframes.Error("Could not find base skin '" ..basename.. "' for skin '" ..name.. "'.")
end
newskin = loveframes.DeepCopy(base)
newskin.name = name
newskin.author = author
newskin.version = version
newskin.imagedir = imagedir
local skincontrols = skin.controls
local basecontrols = base.controls
if skincontrols and basecontrols then
for k, v in pairs(skincontrols) do
newskin.controls[k] = v
end
for k, v in pairs(skin) do
if type(v) == "function" then
newskin[k] = v
end
end
end
end
if not newskin then
newskin = skin
end
newskin.dir = dir
local images = {}
local indeximages = loveframes.config["INDEXSKINIMAGES"]
if indeximages then
local imagelist = loveframes.GetDirectoryContents(imagedir)
local filename, extension, image
for k, v in ipairs(imagelist) do
extension = v.extension
filename = v.name .. "." .. extension
if extension == "png" then
image = love.graphics.newImage(v.fullpath)
image:setFilter("nearest", "nearest")
images[filename] = image
end
end
end
newskin.images = images
skins[name] = newskin
end
function loveframes.LoadSkins(dir)
local skinlist = loveframes.GetDirectoryContents(dir)
-- loop through a list of all gui skins and require them
local skin
for k, v in ipairs(skinlist) do
if v.extension == "lua" then
skin = loveframes.require(v.requirepath)
--loveframes.RegisterSkin(skin)
end
end
end
--return skins
---------- module end ----------
end