chore: move addon into Chatter/ + add standard .gitignore
Matches the Exiles fork-layout convention (each addon in its own folder).
This commit is contained in:
@@ -0,0 +1,277 @@
|
||||
local mod = Chatter:NewModule("Borders/Background")
|
||||
local L = LibStub("AceLocale-3.0"):GetLocale("Chatter")
|
||||
mod.modName = L["Borders/Background"]
|
||||
|
||||
local Media = LibStub("LibSharedMedia-3.0")
|
||||
local CreateFrame = _G.CreateFrame
|
||||
local pairs = _G.pairs
|
||||
local tinsert = _G.tinsert
|
||||
local type = _G.type
|
||||
|
||||
local options = {
|
||||
}
|
||||
|
||||
local defaults = {
|
||||
profile = {
|
||||
frames = {}
|
||||
}
|
||||
}
|
||||
|
||||
local frame_defaults = {
|
||||
enable = true,
|
||||
combatLogFix = false,
|
||||
background = "Blizzard Tooltip",
|
||||
border = "Blizzard Tooltip",
|
||||
inset = 3,
|
||||
edgeSize = 12,
|
||||
backgroundColor = { r = 0, g = 0, b = 0, a = 1 },
|
||||
borderColor = { r = 1, g = 1, b = 1, a = 1 },
|
||||
}
|
||||
|
||||
local function deepcopy(tbl)
|
||||
local new = {}
|
||||
for key,value in pairs(tbl) do
|
||||
new[key] = type(value) == "table" and deepcopy(value) or value -- if it's a table, run deepCopy on it too, so we get a copy and not the original
|
||||
end
|
||||
return new
|
||||
end
|
||||
|
||||
local frames = {}
|
||||
function mod:OnInitialize()
|
||||
for i = 1, NUM_CHAT_WINDOWS do
|
||||
defaults.profile.frames["FRAME_" .. i] = deepcopy(frame_defaults)
|
||||
if _G["ChatFrame" .. i] == COMBATLOG then
|
||||
defaults.profile.frames["FRAME_" .. i].enable = false
|
||||
end
|
||||
end
|
||||
defaults.profile.frames.FRAME_2.combatLogFix = true
|
||||
|
||||
self.db = Chatter.db:RegisterNamespace("ChatFrameBorders", defaults)
|
||||
|
||||
Media.RegisterCallback(mod, "LibSharedMedia_Registered")
|
||||
for i = 1, NUM_CHAT_WINDOWS do
|
||||
local cf = _G["ChatFrame" .. i]
|
||||
local frame = CreateFrame("Frame", nil, cf, "ChatFrameBorderTemplate")
|
||||
frame:EnableMouse(false)
|
||||
cf:SetFrameStrata("LOW")
|
||||
frame:SetFrameStrata("BACKGROUND")
|
||||
frame:SetFrameLevel(1)
|
||||
frame:Hide()
|
||||
frame.id = "FRAME_" .. i
|
||||
tinsert(frames, frame)
|
||||
local t = {
|
||||
type = "group",
|
||||
name = L["Chat Frame "] .. i,
|
||||
desc = L["Chat Frame "] .. i,
|
||||
args = {
|
||||
enable = {
|
||||
type = "toggle",
|
||||
name = L["Enable"],
|
||||
desc = L["Enable borders on this frame"],
|
||||
order = 1,
|
||||
get = function()
|
||||
return mod.db.profile.frames[frame.id].enable
|
||||
end,
|
||||
set = function(info, v)
|
||||
mod.db.profile.frames[frame.id].enable = v
|
||||
if v then
|
||||
frame:Show()
|
||||
else
|
||||
frame:Hide()
|
||||
end
|
||||
end
|
||||
},
|
||||
combatLogFix = {
|
||||
type = "toggle",
|
||||
name = L["Combat Log Fix"],
|
||||
desc = L["Resize this border to fit the new combat log"],
|
||||
get = function() return mod.db.profile.frames[frame.id].combatLogFix end,
|
||||
set = function(info, v)
|
||||
mod.db.profile.frames[frame.id].combatLogFix = v
|
||||
mod:SetAnchors(frame, v)
|
||||
end
|
||||
},
|
||||
background = {
|
||||
type = "select",
|
||||
name = L["Background texture"],
|
||||
desc = L["Background texture"],
|
||||
dialogControl = "LSM30_Background",
|
||||
values = Media:HashTable("background"),
|
||||
get = function() return mod.db.profile.frames[frame.id].background end,
|
||||
set = function(info, v)
|
||||
mod.db.profile.frames[frame.id].background = v
|
||||
mod:SetBackdrop(frame)
|
||||
end
|
||||
},
|
||||
border = {
|
||||
type = "select",
|
||||
name = L["Border texture"],
|
||||
desc = L["Border texture"],
|
||||
dialogControl = "LSM30_Border",
|
||||
values = Media:HashTable("border"),
|
||||
get = function() return mod.db.profile.frames[frame.id].border end,
|
||||
set = function(info, v)
|
||||
mod.db.profile.frames[frame.id].border = v
|
||||
mod:SetBackdrop(frame)
|
||||
end
|
||||
},
|
||||
backgroundColor = {
|
||||
type = "color",
|
||||
name = L["Background color"],
|
||||
desc = L["Background color"],
|
||||
hasAlpha = true,
|
||||
get = function()
|
||||
local c = mod.db.profile.frames[frame.id].backgroundColor
|
||||
return c.r, c.g, c.b, c.a
|
||||
end,
|
||||
set = function(info, r, g, b, a)
|
||||
local c = mod.db.profile.frames[frame.id].backgroundColor
|
||||
c.r, c.g, c.b, c.a = r, g, b, a
|
||||
mod:SetBackdrop(frame)
|
||||
end
|
||||
},
|
||||
borderColor = {
|
||||
type = "color",
|
||||
name = L["Border color"],
|
||||
desc = L["Border color"],
|
||||
hasAlpha = true,
|
||||
get = function()
|
||||
local c = mod.db.profile.frames[frame.id].borderColor
|
||||
return c.r, c.g, c.b, c.a
|
||||
end,
|
||||
set = function(info, r, g, b, a)
|
||||
local c = mod.db.profile.frames[frame.id].borderColor
|
||||
c.r, c.g, c.b, c.a = r, g, b, a
|
||||
mod:SetBackdrop(frame)
|
||||
end
|
||||
},
|
||||
inset = {
|
||||
type = "range",
|
||||
name = L["Background Inset"],
|
||||
desc = L["Background Inset"],
|
||||
min = 1,
|
||||
max = 64,
|
||||
step = 1,
|
||||
bigStep = 1,
|
||||
get = function() return mod.db.profile.frames[frame.id].inset end,
|
||||
set = function(info, v)
|
||||
mod.db.profile.frames[frame.id].inset = v
|
||||
mod:SetBackdrop(frame)
|
||||
end
|
||||
},
|
||||
tileSize = {
|
||||
type = "range",
|
||||
name = L["Tile Size"],
|
||||
desc = L["Tile Size"],
|
||||
min = 1,
|
||||
max = 64,
|
||||
step = 1,
|
||||
bigStep = 1,
|
||||
get = function() return mod.db.profile.frames[frame.id].tileSize end,
|
||||
set = function(info, v)
|
||||
mod.db.profile.frames[frame.id].tileSize = v
|
||||
mod:SetBackdrop(frame)
|
||||
end
|
||||
},
|
||||
edgeSize = {
|
||||
type = "range",
|
||||
name = L["Edge Size"],
|
||||
desc = L["Edge Size"],
|
||||
min = 1,
|
||||
max = 64,
|
||||
step = 1,
|
||||
bigStep = 1,
|
||||
get = function() return mod.db.profile.frames[frame.id].edgeSize end,
|
||||
set = function(info, v)
|
||||
mod.db.profile.frames[frame.id].edgeSize = v
|
||||
mod:SetBackdrop(frame)
|
||||
end
|
||||
}
|
||||
}
|
||||
}
|
||||
options[frame.id] = t
|
||||
end
|
||||
end
|
||||
|
||||
function mod:LibSharedMedia_Registered()
|
||||
mod:SetBackdrops()
|
||||
end
|
||||
|
||||
function mod:Decorate(cf)
|
||||
local frame = CreateFrame("Frame", nil, cf, "ChatFrameBorderTemplate")
|
||||
frame:EnableMouse(false)
|
||||
cf:SetFrameStrata("LOW")
|
||||
frame:SetFrameStrata("BACKGROUND")
|
||||
frame:SetFrameLevel(1)
|
||||
frame:Hide()
|
||||
frame.id = "FRAME_1"
|
||||
tinsert(frames, frame)
|
||||
self:SetBackdrops()
|
||||
frame:Show()
|
||||
mod:SetAnchors(frame, self.db.profile.frames["FRAME_1"].combatLogFix)
|
||||
end
|
||||
|
||||
function mod:OnEnable()
|
||||
self:LibSharedMedia_Registered()
|
||||
self:SetBackdrops()
|
||||
for i = 1, #frames do
|
||||
frames[i]:Show()
|
||||
mod:SetAnchors(frames[i], self.db.profile.frames["FRAME_" .. i].combatLogFix)
|
||||
end
|
||||
Media.RegisterCallback(mod, "LibSharedMedia_Registered")
|
||||
end
|
||||
|
||||
function mod:OnDisable()
|
||||
for i = 1, #frames do
|
||||
frames[i]:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
function mod:SetBackdrops()
|
||||
for i = 1, #frames do
|
||||
self:SetBackdrop(frames[i])
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
function mod:SetBackdrop(frame)
|
||||
local profile = self.db.profile.frames[frame.id]
|
||||
frame:SetBackdrop({
|
||||
bgFile = Media:Fetch("background", profile.background),
|
||||
edgeFile = Media:Fetch("border", profile.border),
|
||||
tile = true,
|
||||
tileSize = profile.tileSize,
|
||||
edgeSize = profile.edgeSize,
|
||||
insets = {left = profile.inset, right = profile.inset, top = profile.inset, bottom = profile.inset}
|
||||
})
|
||||
local c = profile.backgroundColor
|
||||
frame:SetBackdropColor(c.r, c.g, c.b, c.a)
|
||||
|
||||
local c = profile.borderColor
|
||||
frame:SetBackdropBorderColor(c.r, c.g, c.b, c.a)
|
||||
end
|
||||
end
|
||||
|
||||
function mod:GetOptions()
|
||||
return options
|
||||
end
|
||||
|
||||
function mod:SetAnchors(frame, fix)
|
||||
local p = frame:GetParent()
|
||||
frame:ClearAllPoints()
|
||||
if fix then
|
||||
frame:SetPoint("TOPLEFT", p, "TOPLEFT", -5, 30)
|
||||
frame:SetPoint("TOPRIGHT", p, "TOPRIGHT", 5, 30)
|
||||
frame:SetPoint("BOTTOMLEFT", p, "BOTTOMLEFT", -5, -10)
|
||||
frame:SetPoint("BOTTOMRIGHT", p, "BOTTOMRIGHT", 5, -10)
|
||||
else
|
||||
frame:SetPoint("TOPLEFT", p, "TOPLEFT", -5, 5)
|
||||
frame:SetPoint("TOPRIGHT", p, "TOPRIGHT", 5, 5)
|
||||
frame:SetPoint("BOTTOMLEFT", p, "BOTTOMLEFT", -5, -10)
|
||||
frame:SetPoint("BOTTOMRIGHT", p, "BOTTOMRIGHT", 5, -10)
|
||||
end
|
||||
end
|
||||
|
||||
function mod:Info()
|
||||
return L["Gives you finer control over the chat frame's background and border colors"]
|
||||
end
|
||||
Reference in New Issue
Block a user