Files
coa-chatter/Modules/ChatFont.lua
T

183 lines
4.6 KiB
Lua

local mod = Chatter:NewModule("Chat Font", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("Chatter")
mod.modName = L["Chat Font"]
local Media = LibStub("LibSharedMedia-3.0")
local pairs = _G.pairs
local player_entered_world = false
local defaults = {
profile = {
frames = {}
}
}
local outlines = {[""] = "None", ["OUTLINE"] = "Outline", ["THICKOUTLINE"] = "Thick Outline"}
local options = {
font = {
type = "select",
name = L["Font"],
desc = L["Font"],
dialogControl = 'LSM30_Font',
values = Media:HashTable("font"),
get = function() return mod.db.profile.font end,
set = function(info, v)
mod.db.profile.font = v
mod:SetFont(nil, v)
end
},
fontsize = {
type = "range",
name = L["Font size"],
desc = L["Font size"],
min = 4,
max = 30,
step = 1,
bigStep = 1,
get = function() return mod.db.profile.fontsize end,
set = function(info, v)
mod.db.profile.fontsize = v
mod:SetFont(nil, nil, v)
end
},
outline = {
type = "select",
name = L["Font Outline"],
desc = L["Font outlining"],
values = outlines,
get = function() return mod.db.profile.outline or "" end,
set = function(info, v)
mod.db.profile.outline = v
mod:SetFont(nil, nil, nil, v)
end
}
}
function mod:OnInitialize()
for i = 1, NUM_CHAT_WINDOWS do
defaults.profile.frames["FRAME_" .. i] = {}
end
self.db = Chatter.db:RegisterNamespace("ChatFont", defaults)
for i = 1, NUM_CHAT_WINDOWS do
local cf = _G["ChatFrame" .. i]
local t = {
type = "group",
name = L["Chat Frame "] .. i,
desc = L["Chat Frame "] .. i,
args = {
fontsize = {
type = "range",
name = L["Font size"],
desc = L["Font size"],
min = 4,
max = 30,
step = 1,
bigStep = 1,
get = function() return mod.db.profile.frames["FRAME_" .. i].fontsize or mod.db.profile.fontsize end,
set = function(info, v)
mod.db.profile.frames["FRAME_" .. i].fontsize = v
mod:SetFont(cf, nil, v)
end
},
font = {
type = "select",
name = L["Font"],
desc = L["Font"],
dialogControl = 'LSM30_Font',
values = Media:HashTable("font"),
get = function() return mod.db.profile.frames["FRAME_" .. i].font or mod.db.profile.font end,
set = function(info, v)
mod.db.profile.frames["FRAME_" .. i].font = v
mod:SetFont(cf, v)
end
},
outline = {
type = "select",
name = L["Font Outline"],
desc = L["Font outlining"],
values = outlines,
get = function() return mod.db.profile.frames["FRAME_" .. i].outline or "" end,
set = function(info, v)
mod.db.profile.frames["FRAME_" .. i].outline = v
mod:SetFont(cf, nil, nil, v)
end
}
}
}
options["frame" .. i] = t
end
end
function mod:LibSharedMedia_Registered()
self:SetFont()
end
function mod:Popout(frame,src)
local fontName, fontHeight, fontFlags = src:GetFont()
frame:SetFont(fontName,fontHeight,fontFlags)
end
function mod:OnEnable()
Media.RegisterCallback(mod, "LibSharedMedia_Registered")
self:LibSharedMedia_Registered()
if not player_entered_world then
self:RegisterEvent("PLAYER_ENTERING_WORLD")
end
end
function mod:PLAYER_ENTERING_WORLD()
self:SetFont()
self:UnregisterAllEvents()
player_entered_world = true
end
function mod:OnDisable()
Media.UnregisterCallback(mod, "LibSharedMedia_Registered")
self:SetFont(nil, "Arial Narrow", 12, "")
end
function mod:SetFont(cf, font, size, outline)
if cf then
self:SetFrameFont(cf, font, size, outline)
else
for i = 1, NUM_CHAT_WINDOWS do
cf = _G["ChatFrame" .. i]
self:SetFrameFont(cf, font, size, outline)
end
for index,name in ipairs(self.TempChatFrames) do
local cf = _G[name]
if cf then
self:SetFrameFont(cf, font, size, outline)
end
end
end
end
function mod:SetFrameFont(cf, font, size, outline)
local f = "FRAME_" .. cf:GetName():match("%d+")
local prof = self.db.profile.frames[f]
local profFont = nil
if prof then
profFont = prof.font
else
prof = {}
end
if profFont == "Default" then
profFont = nil
end
local f, s, m = cf:GetFont()
font = Media:Fetch("font", font or profFont or self.db.profile.font or f)
size = size or prof.fontsize or self.db.profile.fontsize or s
outline = outline or prof.outline or self.db.profile.outline or m
cf:SetFont(font, size, outline)
end
function mod:GetOptions()
return options
end
function mod:Info()
return L["Enables you to set a custom font and font size for your chat frames"]
end