vanilla-wow-addons – Rev 1
?pathlinks?
local _G = getfenv(0)
-- if the Debug library is available then use it
if AceLibrary:HasInstance("AceDebug-2.0") then
oSkin = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceDB-2.0", "AceConsole-2.0", "AceHook-2.0", "AceDebug-2.0")
else
oSkin = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceHook-2.0", "AceDB-2.0", "AceConsole-2.0")
function oSkin:Debug() end
end
-- specify where debug messages go
oSkin.debugFrame = ChatFrame5
function oSkin:OnInitialize()
self:RegisterDB("oSkinDB")
self:Defaults()
self:Options()
self.initialized = {}
self:RegisterChatCommand({"/oskin"}, self.options)
self.OnMenuRequest = self.options
end
function oSkin:OnEnable()
self:RegisterEvent("AceEvent_FullyInitialized")
-- when addon taken out of standby
if AceLibrary("AceEvent-2.0"):IsFullyInitialized() then
self:AceEvent_FullyInitialized()
end
end
local backdrop = {
bgFile = "Interface\\ChatFrame\\ChatFrameBackground", tile = true, tileSize = 16,
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", edgeSize = 16,
insets = {left = 4, right = 4, top = 4, bottom = 4},
}
function oSkin:applySkin(frame, header, bba, ba, fh)
self = oSkin -- for external calls
frame:SetBackdrop(backdrop)
frame:SetBackdropBorderColor(self.db.profile.BackdropBorder.r or .5, self.db.profile.BackdropBorder.g or .5, self.db.profile.BackdropBorder.b or .5, bba or self.db.profile.BackdropBorder.a or 1)
frame:SetBackdropColor(self.db.profile.Backdrop.r or 0, self.db.profile.Backdrop.g or 0, self.db.profile.Backdrop.b or 0, ba or self.db.profile.Backdrop.a or .9)
if not frame.tfade then frame.tfade = frame:CreateTexture(nil, "BORDER") end
frame.tfade:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
frame.tfade:SetPoint("TOPLEFT", frame, "TOPLEFT", 4, -4)
if fh then frame.tfade:SetPoint("BOTTOMRIGHT", frame, "TOPRIGHT", -4, -fh)
else frame.tfade:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -4, 4) end
frame.tfade:SetBlendMode("ADD")
frame.tfade:SetGradientAlpha("VERTICAL", .1, .1, .1, 0, .25, .25, .25, 1)
if(header and _G[frame:GetName().."Header"]) then
_G[frame:GetName().."Header"]:Hide()
_G[frame:GetName().."Header"]:SetPoint("TOP", frame, "TOP", 0, 7)
end
end
function oSkin:glazeStatusBar(frame, fi)
if frame:GetFrameType() ~= "StatusBar" then return end
frame:SetStatusBarTexture("Interface\\AddOns\\oSkin\\textures\\glaze")
if fi then
if not frame.tfade then frame.tfade = frame:CreateTexture(nil, "BORDER") end
frame.tfade:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
frame.tfade:SetPoint("TOPLEFT", frame, "TOPLEFT",fi,-fi)
frame.tfade:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT",-fi,fi)
frame.tfade:SetBlendMode("ADD")
frame.tfade:SetGradientAlpha("VERTICAL", .1, .1, .1, 0, .25, .25, .25, 1)
end
end
function oSkin:skinTooltip(frame)
if not frame.tfade then frame.tfade = frame:CreateTexture(nil, "BORDER") end
frame.tfade:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
frame.tfade:SetPoint("TOPLEFT", frame, "TOPLEFT",1,-1)
frame.tfade:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT",-1,1)
frame.tfade:SetBlendMode("ADD")
frame.tfade:SetGradientAlpha("VERTICAL", .1, .1, .1, 0, .25, .25, .25, 1)
frame.tfade:SetPoint("TOPLEFT", frame, "TOPLEFT", 6, -6)
frame.tfade:SetPoint("BOTTOMRIGHT", frame, "TOPRIGHT", -6, -30)
end
function oSkin:removeRegions(frame, regions)
self:Debug("removeRegions: [%s]", frame:GetName() or "???")
if not frame then return end
for i, v in ipairs({ frame:GetRegions() }) do
-- if we have a list, hide the regions in that list
-- otherwise, hide all regions of the frame
if regions then
for _, r in ipairs(regions) do
if r == i then v:SetAlpha(0) break end
end
else
self:Debug("remove region: [%s]", i)
v:SetAlpha(0)
end
end
end
function oSkin:keepRegions(frame, regions)
self:Debug("keepRegions: [%s]", frame:GetName() or "???")
if not frame then return end
for i, v in ipairs({ frame:GetRegions() }) do
-- if we have a list, hide the regions not in that list
local keep = nil
if regions then
for _, r in ipairs(regions) do
if r == i then keep = true break end
end
end
if not keep then
self:Debug("remove region: [%s]", i)
v:SetAlpha(0)
end
end
end
function oSkin:hookDDScript(ddName)
self:Debug("hookDDScript: [%s]", ddName:GetName())
self:HookScript(ddName, "OnClick", function()
self:Debug(ddName:GetName().."_OnClick")
self.hooks[ddName].OnClick()
self:skinDropDownLists()
end)
end
function oSkin:skinDropDownLists()
-- self:Debug("skinDropDownLists")
for i = 1, UIDROPDOWNMENU_MAXLEVELS do
self:removeRegions(_G["DropDownList"..i])
_G["DropDownList"..i.."Backdrop"]:Hide()
_G["DropDownList"..i.."MenuBackdrop"]:Hide()
self:applySkin(_G["DropDownList"..i])
end
end
function oSkin:skinScrollBar(scrollFrame)
-- self:Debug("skinScrollBar: [%s]", scrollFrame:GetName())
local scrollBar = _G[scrollFrame:GetName().."ScrollBar"]
scrollBar:SetBackdrop({
bgFile = "Interface\\ChatFrame\\ChatFrameBackground", tile = true, tileSize = 16,
edgeFile = "Interface\\AddOns\\oSkin\\textures\\krsnik", edgeSize = 16,
insets = {left = 4, right = 4, top = 4, bottom = 4},
})
scrollBar:SetBackdropBorderColor(.2,.2,.2,1)
scrollBar:SetBackdropColor(.1,.1,.1,1)
end
function oSkin:moveObject(objName, xAdj, xDiff, yAdj, yDiff)
-- self:Debug("moveObject: [%s, %s%s, %s%s]", objName:GetName(), xAdj, xDiff, yAdj, yDiff)
local point, relativeTo, relativePoint, xOfs, yOfs = objName:GetPoint()
-- apply the adjustment
if xAdj == nil then xOffset = xOfs else xOffset = (xAdj == "+" and xOfs + xDiff or xOfs - xDiff) end
if yAdj == nil then yOffset = yOfs else yOffset = (yAdj == "+" and yOfs + yDiff or yOfs - yDiff) end
-- self:Debug("moveObject#2: [%s, %s]", xOffset, yOffset)
objName:ClearAllPoints()
objName:SetPoint(point, relativeTo:GetName(), relativePoint, xOffset, yOffset)
end