You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

217 lines
5.9 KiB

-- Customize Font
---- 1. Support LibSharedMedia
---- 1. Font Select and Comparison UI (Accessed via Settings)
local _, addon = ...
local FontUtil = {};
addon.FontUtil = FontUtil;
local DEFAULT_FONT_FILE = {
roman = "Interface/AddOns/DialogueUI/Fonts/frizqt__.ttf", --Friz Quadrata
korean = "Fonts/2002.TTF",
simplifiedchinese = "Fonts/ARKai_T.ttf",
traditionalchinese = "Fonts/blei00d.TTF",
russian = "Interface/AddOns/DialogueUI/Fonts/frizqt___cyr.ttf",
};
local NUMBER_FONT_FILE = "Interface/AddOns/DialogueUI/Fonts/ARIALN.ttf";
local FONT_OBJECT_HEIGHT = {
--FontObjectName = {10, 12, 14, 16} --Paragraph Font Size as Base
DUIFont_Quest_Title_18 = {14, 18, 18, 18},
DUIFont_Quest_Title_16 = {12, 16, 16, 16},
DUIFont_Quest_SubHeader = {10, 12, 14, 16},
DUIFont_Quest_Paragraph = {10, 12, 14, 16},
DUIFont_Quest_Gossip = {10, 12, 14, 16},
DUIFont_Quest_Quest = {10, 12, 14, 16},
DUIFont_Quest_Disabled = {10, 12, 14, 16},
DUIFont_Settings_Disabled = {10, 12, 14, 16},
DUIFont_Item = {8, 10, 12, 12},
DUIFont_ItemSelect = {8, 10, 12, 12},
DUIFont_Hotkey = {8, 10, 12, 12},
DUIFont_QuestType_Left = {8, 10, 12, 12},
DUIFont_QuestType_Right = {8, 10, 12, 12},
DUIFont_Tooltip_Large = {10, 12, 14, 16},
DUIFont_Tooltip_Medium = {8, 10, 12, 12},
DUIFont_Tooltip_Small = {8, 10, 12, 12},
DUIFont_ItemCount = {8, 10, 10, 12},
};
local IS_NUMBER_FONT = {
DUIFont_ItemCount = true,
};
do
local CLIENT_ALPHABET;
local AlphabetLocales = {
roman = {"enUS", "frFR", "deDE", "esES", "esMX", "ptBR", "itIT"},
korean = {"koKR"},
simplifiedchinese = {"zhCN"},
traditionalchinese = {"zhTW"},
russian = {"ruRU"},
};
function FontUtil:GetAlphabetForCurrentClient()
if not CLIENT_ALPHABET then
local clientLocale = GetLocale() or "enUS";
for alphabet, locales in pairs(AlphabetLocales) do
for _, locale in ipairs(locales) do
if clientLocale == locale then
CLIENT_ALPHABET = alphabet;
break
end
end
end
if not CLIENT_ALPHABET then
CLIENT_ALPHABET = "roman";
end
AlphabetLocales = nil;
end
return CLIENT_ALPHABET
end
end
function FontUtil:GetDefaultFont()
local alphabet = self:GetAlphabetForCurrentClient();
return DEFAULT_FONT_FILE[alphabet];
end
function FontUtil:GetUserFont()
if true then
return self:GetDefaultFont();
end
end
function FontUtil:GetInstalledFont()
if self.installedFontGetter then
local fontData = self.installedFontGetter();
return fontData
end
end
do
local DEFAULT_FONT_SIZE = 12;
local FONT_SIZE_ID = 1;
local FONT_DATA_ID = FONT_SIZE_ID + 1;
local FONT_SIZE_INDEX = {
[0] = 10,
[1] = 12,
[2] = 14,
[3] = 16,
};
function FontUtil:SetFontSizeByID(id)
if not (id and FONT_SIZE_INDEX[id]) then return end;
FONT_SIZE_ID = id;
FONT_DATA_ID = FONT_SIZE_ID + 1;
if FONT_SIZE_INDEX[id] == DEFAULT_FONT_SIZE then return end;
local fontSize = FONT_SIZE_INDEX[id];
DEFAULT_FONT_SIZE = fontSize;
local k = FONT_DATA_ID;
local _G = _G;
local textFontFile = self:GetUserFont();
for fontName, v in pairs(FONT_OBJECT_HEIGHT) do
local _, _, flags = _G[fontName]:GetFont();
local fontFile;
if IS_NUMBER_FONT[fontName] then
fontFile = NUMBER_FONT_FILE;
else
fontFile = textFontFile;
end
_G[fontName]:SetFont(fontFile, v[k], flags);
end
addon.CallbackRegistry:Trigger("FontSizeChanged", fontSize, id);
end
function FontUtil:SetFontByFile(textFontFile)
local k = FONT_DATA_ID;
local _G = _G;
for fontName, v in pairs(FONT_OBJECT_HEIGHT) do
local _, _, flags = _G[fontName]:GetFont();
local fontFile;
if IS_NUMBER_FONT[fontName] then
fontFile = NUMBER_FONT_FILE;
else
fontFile = textFontFile;
end
_G[fontName]:SetFont(fontFile, v[k], flags);
end
addon.CallbackRegistry:Trigger("FontSizeChanged", DEFAULT_FONT_SIZE, FONT_SIZE_ID);
end
end
do
local function Settings_FontSizeBase(dbValue)
FontUtil:SetFontSizeByID(dbValue);
end
addon.CallbackRegistry:Register("SettingChanged.FontSizeBase", Settings_FontSizeBase);
end
do --Check LibSharedMedia
local DropDownMenu;
local function CheckLib()
local libName = "LibSharedMedia-3.0";
local silent = true;
local lib = LibStub and LibStub.GetLibrary and LibStub:GetLibrary(libName, silent);
if lib then
FontUtil.installedFontGetter = function()
local data = lib:HashTable("font");
local list = lib:List("font");
local fontData = {};
local n = 0;
for _, fontName in ipairs(list) do
if data[fontName] then
n = n + 1;
fontData[n] = {fontName, data[fontName]};
end
end
return fontData
end
local fontList = FontUtil:GetInstalledFont();
if fontList and #fontList > 1 then
DropDownMenu = addon.GetDropDownMenu();
DropDownMenu:SetContent(fontList)
end
else
end
end
--addon.CallbackRegistry:Register("PLAYER_ENTERING_WORLD", CheckLib);
end