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
217 lines
5.9 KiB
|
2 years ago
|
-- 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
|