161 lines
5.3 KiB
Lua
161 lines
5.3 KiB
Lua
-- ------------------------------------------------------------------------------ --
|
|
-- TradeSkillMaster --
|
|
-- http://www.curse.com/addons/wow/tradeskill-master --
|
|
-- --
|
|
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
|
|
-- All Rights Reserved* - Detailed license information included with addon. --
|
|
-- ------------------------------------------------------------------------------ --
|
|
|
|
-- This file contains support code for the custom TSM widgets
|
|
local TSM = select(2, ...)
|
|
local lib = TSMAPI
|
|
|
|
local LSM = LibStub("LibSharedMedia-3.0") -- load the SharedMedia library
|
|
|
|
TSMAPI.Design = {}
|
|
local Design = TSMAPI.Design
|
|
local coloredFrames = {}
|
|
local coloredTexts = {}
|
|
|
|
local LSM_Fonts = LSM:HashTable("font") -- Persistent hashtable of all registered LSM fonts.
|
|
|
|
|
|
--[[-----------------------------------------------------------------------------
|
|
Support functions
|
|
-------------------------------------------------------------------------------]]
|
|
|
|
local function expandColor(tbl)
|
|
tbl = CopyTable(tbl)
|
|
for i=1, 3 do
|
|
tbl[i] = tbl[i] / 255
|
|
end
|
|
return unpack(tbl)
|
|
end
|
|
|
|
local function SetFrameColor(obj, colorKey)
|
|
local color = TSM.db.profile.design.frameColors[colorKey]
|
|
if not obj then return expandColor(color.backdrop) end
|
|
coloredFrames[obj] = {obj, colorKey}
|
|
if obj:IsObjectType("Frame") then
|
|
obj:SetBackdrop({bgFile="Interface\\Buttons\\WHITE8X8", edgeFile="Interface\\Buttons\\WHITE8X8", edgeSize=TSM.db.profile.design.edgeSize})
|
|
obj:SetBackdropColor(expandColor(color.backdrop))
|
|
obj:SetBackdropBorderColor(expandColor(color.border))
|
|
else
|
|
obj:SetTexture(expandColor(color.backdrop))
|
|
end
|
|
end
|
|
|
|
local function SetTextColor(obj, colorKey, isDisabled)
|
|
local color = TSM.db.profile.design.textColors[colorKey]
|
|
if not obj then return expandColor(color.enabled) end
|
|
coloredTexts[obj] = {obj, colorKey, isDisabled}
|
|
if obj:IsObjectType("Texture") then
|
|
obj:SetTexture(expandColor(color.enabled))
|
|
else
|
|
if isDisabled then
|
|
obj:SetTextColor(expandColor(color.disabled))
|
|
else
|
|
obj:SetTextColor(expandColor(color.enabled))
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[-----------------------------------------------------------------------------
|
|
Design API functions
|
|
-------------------------------------------------------------------------------]]
|
|
|
|
function Design:SetFrameBackdropColor(obj)
|
|
return SetFrameColor(obj, "frameBG")
|
|
end
|
|
|
|
function Design:SetFrameColor(obj)
|
|
return SetFrameColor(obj, "frame")
|
|
end
|
|
|
|
function Design:SetContentColor(obj)
|
|
return SetFrameColor(obj, "content")
|
|
end
|
|
|
|
function Design:SetIconRegionColor(obj)
|
|
return SetTextColor(obj, "iconRegion")
|
|
end
|
|
|
|
function Design:SetWidgetTextColor(obj, isDisabled)
|
|
return SetTextColor(obj, "text", isDisabled)
|
|
end
|
|
|
|
function Design:SetWidgetLabelColor(obj, isDisabled)
|
|
return SetTextColor(obj, "label", isDisabled)
|
|
end
|
|
|
|
function Design:SetTitleTextColor(obj)
|
|
return SetTextColor(obj, "title")
|
|
end
|
|
|
|
--- Primary content font.
|
|
function Design:GetContentFont(size)
|
|
-- Retrieve the user's desired font size, if the "size" specifier is valid.
|
|
size = size or "normal"
|
|
local size_number = TSM.db.profile.design.fontSizes[size]
|
|
if not size_number then
|
|
if TSM.designDefaults.fontSizes[size] then
|
|
-- Save the default size to user's settings, for faster lookups.
|
|
TSM.db.profile.design.fontSizes[size] = TSM.designDefaults.fontSizes[size]
|
|
size_number = TSM.db.profile.design.fontSizes[size]
|
|
end
|
|
assert(size_number, format("Invalid font size '%s", tostring(size)))
|
|
end
|
|
|
|
-- Verify existence of user's chosen font, and do a "soft revert" to our defaults
|
|
-- if missing, which can happen if previous SharedMedia fonts have been uninstalled.
|
|
-- NOTE: We don't overwrite the database value, in case the user re-enables that font.
|
|
local content_font = LSM_Fonts[TSM.db.profile.design.fonts.content]
|
|
if not content_font then
|
|
content_font = LSM_Fonts["Arial Narrow"]
|
|
end
|
|
|
|
-- Return the path to the font, and the desired (user-configurable) size.
|
|
return content_font, size_number
|
|
end
|
|
|
|
--- Header/section title font.
|
|
function Design:GetBoldFont()
|
|
-- Verify existence of user's chosen font, and do a "soft revert" to our defaults
|
|
-- if missing, which can happen if previous SharedMedia fonts have been uninstalled.
|
|
-- NOTE: We don't overwrite the database value, in case the user re-enables that font.
|
|
local bold_font = LSM_Fonts[TSM.db.profile.design.fonts.bold]
|
|
if not bold_font then
|
|
bold_font = LSM_Fonts["TSM Droid Sans Bold"]
|
|
end
|
|
|
|
-- Return the path to the font.
|
|
return bold_font
|
|
end
|
|
|
|
function Design:GetInlineColor(key)
|
|
TSM.db.profile.design.inlineColors[key] = TSM.db.profile.design.inlineColors[key] or CopyTable(TSM.designDefaults.inlineColors[key])
|
|
local r, g, b, a = unpack(TSM.db.profile.design.inlineColors[key])
|
|
return format("|c%02X%02X%02X%02X", a, r, g, b)
|
|
end
|
|
|
|
function Design:ColorText(text, key)
|
|
local color = Design:GetInlineColor(key)
|
|
return color..text.."|r"
|
|
end
|
|
|
|
|
|
function TSMAPI:UpdateDesign()
|
|
-- set any missing fields
|
|
TSM:SetDesignDefaults(TSM.designDefaults, TSM.db.profile.design)
|
|
local oldTbl = coloredFrames
|
|
coloredFrames = {}
|
|
for _, args in pairs(oldTbl) do
|
|
SetFrameColor(unpack(args))
|
|
end
|
|
|
|
oldTbl = coloredTexts
|
|
coloredTexts = {}
|
|
for _, args in pairs(oldTbl) do
|
|
SetTextColor(unpack(args))
|
|
end
|
|
end |