mirror of
https://github.com/linux-man/LoveFrames.git
synced 2024-12-11 07:24:24 +00:00
199 lines
5.6 KiB
Lua
199 lines
5.6 KiB
Lua
--[[------------------------------------------------
|
|
-- Love Frames - A GUI library for LOVE --
|
|
-- Copyright (c) 2013 Kenny Shields --
|
|
--]]------------------------------------------------
|
|
|
|
-- skins library
|
|
loveframes.skins = {}
|
|
|
|
-- available skins
|
|
loveframes.skins.available = {}
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: Register(skin)
|
|
- desc: registers a skin
|
|
--]]---------------------------------------------------------
|
|
function loveframes.skins.Register(skin)
|
|
|
|
local name = skin.name
|
|
local author = skin.author
|
|
local version = skin.version
|
|
local base = skin.base
|
|
local newskin = false
|
|
|
|
if name == "" or not name then
|
|
loveframes.util.Error("Skin registration error: Invalid or missing name data.")
|
|
end
|
|
|
|
if author == "" or not author then
|
|
loveframes.util.Error("Skin registration error: Invalid or missing author data.")
|
|
end
|
|
|
|
if version == "" or not version then
|
|
loveframes.util.Error("Skin registration error: Invalid or missing version data.")
|
|
end
|
|
|
|
local namecheck = loveframes.skins.available[name]
|
|
if namecheck then
|
|
loveframes.util.Error("Skin registration error: A skin with the name '" ..name.. "' already exists.")
|
|
end
|
|
|
|
local dir = loveframes.config["DIRECTORY"] .. "/skins/" ..name
|
|
local dircheck = love.filesystem.isDirectory(dir)
|
|
if not dircheck then
|
|
loveframes.util.Error("Skin registration error: Could not find a directory for skin '" ..name.. "'.")
|
|
end
|
|
|
|
local imagedir = skin.imagedir or dir .. "/images"
|
|
local imagedircheck = love.filesystem.isDirectory(imagedir)
|
|
if not imagedircheck then
|
|
loveframes.util.Error("Skin registration error: Could not find an image directory for skin '" ..name.. "'.")
|
|
end
|
|
|
|
if base then
|
|
local basename = base
|
|
base = loveframes.skins.Get(base)
|
|
if not base then
|
|
loveframes.util.Error("Could not find base skin '" ..basename.. "' for skin '" ..name.. "'.")
|
|
end
|
|
newskin = loveframes.util.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 newskin then
|
|
loveframes.skins.available[name] = newskin
|
|
else
|
|
loveframes.skins.available[name] = skin
|
|
end
|
|
|
|
loveframes.skins.available[name].dir = dir
|
|
loveframes.skins.available[name].images = {}
|
|
|
|
local indeximages = loveframes.config["INDEXSKINIMAGES"]
|
|
if indeximages then
|
|
local images = loveframes.util.GetDirectoryContents(imagedir)
|
|
for k, v in ipairs(images) do
|
|
local filename = v.name
|
|
local extension = v.extension
|
|
local fullpath = v.fullpath
|
|
local key = filename .. "." .. extension
|
|
if extension ~= "db" then
|
|
loveframes.skins.available[name].images[key] = love.graphics.newImage(fullpath)
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: GetAvailable()
|
|
- desc: gets all available skins
|
|
--]]---------------------------------------------------------
|
|
function loveframes.skins.GetAvailable()
|
|
|
|
local available = loveframes.skins.available
|
|
return available
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: Get(name)
|
|
- desc: gets a skin by its name
|
|
--]]---------------------------------------------------------
|
|
function loveframes.skins.Get(name)
|
|
|
|
local available = loveframes.skins.available
|
|
local skin = available[name] or false
|
|
|
|
return skin
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: SetControl(name, control, value)
|
|
- desc: changes the value of a control in the
|
|
specified skin
|
|
--]]---------------------------------------------------------
|
|
function loveframes.skins.SetControl(name, control, value)
|
|
|
|
local skin = loveframes.skins.Get(name)
|
|
|
|
if skin then
|
|
if skin.controls and skin.controls[control] then
|
|
skin.controls[control] = value
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: SetImage(name, image, value)
|
|
- desc: changes the value of an image index in
|
|
the images table of the specified skin
|
|
--]]---------------------------------------------------------
|
|
function loveframes.skins.SetImage(name, image, value)
|
|
|
|
local skin = loveframes.skins.Get(name)
|
|
|
|
if skin then
|
|
if skin.images and skin.images[image] then
|
|
skin.images[image] = value
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: SetImageDirectory(name, dir)
|
|
- desc: sets the image directory of a skin
|
|
--]]---------------------------------------------------------
|
|
function loveframes.skins.SetImageDirectory(name, dir)
|
|
|
|
local skin = loveframes.skins.Get(name)
|
|
|
|
if skin then
|
|
skin.imagedir = dir
|
|
end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
- func: ReloadImages(name)
|
|
- desc: reloads a skin's images
|
|
--]]---------------------------------------------------------
|
|
function loveframes.skins.ReloadImages(name)
|
|
|
|
local skin = loveframes.skins.Get(name)
|
|
local indeximages = loveframes.config["INDEXSKINIMAGES"]
|
|
|
|
if skin and indeximages then
|
|
local basedir = loveframes.config["DIRECTORY"]
|
|
local imagedir = skin.imagedir or basedir .. "/skins/" ..name.. "/images"
|
|
local dircheck = love.filesystem.isDirectory(imagedir)
|
|
if dircheck then
|
|
local images = loveframes.util.GetDirectoryContents(imagedir)
|
|
for k, v in ipairs(images) do
|
|
local filename = v.name
|
|
local extension = v.extension
|
|
local fullpath = v.fullpath
|
|
loveframes.skins.available[name].images[filename .. "." .. extension] = love.graphics.newImage(fullpath)
|
|
end
|
|
end
|
|
end
|
|
|
|
end |