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.

267 lines
7.9 KiB

local E, L, V, P, G = unpack(ElvUI)
local LSM = E.Libs.LSM
local format, ipairs, type, pcall = format, ipairs, type, pcall
local westAndRU = LSM.LOCALE_BIT_ruRU + LSM.LOCALE_BIT_western
E.Media = {
Fonts = {},
Sounds = {},
Arrows = {},
MailIcons = {},
RestIcons = {},
ChatEmojis = {},
ChatLogos = {},
Textures = {},
CombatIcons = {
DEFAULT = [[Interface\CharacterFrame\UI-StateIcon]],
PLATINUM = [[Interface\Challenges\ChallengeMode_Medal_Platinum]],
ATTACK = [[Interface\CURSOR\Attack]],
ALERT = [[Interface\DialogFrame\UI-Dialog-Icon-AlertNew]],
ALERT2 = [[Interface\OptionsFrame\UI-OptionsFrame-NewFeatureIcon]],
ARTHAS = [[Interface\LFGFRAME\UI-LFR-PORTRAIT]],
SKULL = [[Interface\LootFrame\LootPanel-Icon]]
}
}
local MediaKey = {
font = 'Fonts',
sound = 'Sounds',
arrow = 'Arrows',
mail = 'MailIcons',
resting = 'RestIcons',
emoji = 'ChatEmojis',
logo = 'ChatLogos',
texture = 'Textures'
}
local MediaPath = {
font = [[Interface\AddOns\ElvUI\Core\Media\Fonts\]],
sound = [[Interface\AddOns\ElvUI\Core\Media\Sounds\]],
arrow = [[Interface\AddOns\ElvUI\Core\Media\Arrows\]],
mail = [[Interface\AddOns\ElvUI\Core\Media\MailIcons\]],
resting = [[Interface\AddOns\ElvUI\Core\Media\RestIcons\]],
emoji = [[Interface\AddOns\ElvUI\Core\Media\ChatEmojis\]],
logo = [[Interface\AddOns\ElvUI\Core\Media\ChatLogos\]],
texture = [[Interface\AddOns\ElvUI\Core\Media\Textures\]]
}
do
local t, d = '|T%s%s|t', ''
function E:TextureString(texture, data)
return format(t, texture, data or d)
end
end
local function AddMedia(Type, File, Name, CustomType, Mask)
local path = MediaPath[Type]
if path then
local key = File:gsub('%.%w-$','')
local file = path .. File
local pathKey = MediaKey[Type]
if pathKey then E.Media[pathKey][key] = file end
if Name then -- Register to LSM
local nameKey = (Name == true and key) or Name
if type(CustomType) == 'table' then
for _, name in ipairs(CustomType) do
LSM:Register(name, nameKey, file, Mask)
end
else
LSM:Register(CustomType or Type, nameKey, file, Mask)
end
end
end
end
-- Name as true will add the Key as it's name
AddMedia('font','ActionMan.ttf', 'Action Man')
AddMedia('font','ContinuumMedium.ttf', 'Continuum Medium')
AddMedia('font','DieDieDie.ttf', 'Die Die Die!')
AddMedia('font','PTSansNarrow.ttf', 'PT Sans Narrow', nil, westAndRU)
AddMedia('font','Expressway.ttf', true, nil, westAndRU)
AddMedia('font','Homespun.ttf', true, nil, westAndRU)
AddMedia('font','Invisible.ttf')
AddMedia('sound','AwwCrap.ogg', 'Awww Crap')
AddMedia('sound','BbqAss.ogg', 'BBQ Ass')
AddMedia('sound','DumbShit.ogg', 'Dumb Shit')
AddMedia('sound','MamaWeekends.ogg', 'Mama Weekends')
AddMedia('sound','RunFast.ogg', 'Runaway Fast')
AddMedia('sound','StopRunningSlimeBall.ogg', 'Stop Running')
AddMedia('sound','Whisper.ogg', 'Whisper Alert')
AddMedia('sound','YankieBangBang.ogg', 'Big Yankie Devil')
AddMedia('texture','GlowTex', 'ElvUI GlowBorder', 'border')
AddMedia('texture','NormTex', 'ElvUI Gloss', 'statusbar')
AddMedia('texture','NormTex2', 'ElvUI Norm', 'statusbar')
AddMedia('texture','NormTex3', 'ElvUI Norm1', 'statusbar')
AddMedia('texture','White8x8', 'ElvUI Blank', {'statusbar','background'})
AddMedia('texture','Minimalist', true, 'statusbar')
AddMedia('texture','Melli', true, 'statusbar')
for i = 0, 7 do -- mail icons
AddMedia('mail','Mail'..i)
end
for i = 0, 2 do -- resting icons
AddMedia('resting','Resting'..i)
end
-- nameplate target arrows
AddMedia('arrow', 'ArrowRed')
for i = 0, 72 do
AddMedia('arrow', 'Arrow'..i)
end
AddMedia('texture','Arrow')
AddMedia('texture','ArrowRight')
AddMedia('texture','ArrowUp')
AddMedia('texture','ArrowUpGlow')
AddMedia('texture','Backpack')
AddMedia('texture','BagNewItemGlow')
AddMedia('texture','BagQuestIcon')
AddMedia('texture','BagUpgradeIcon')
AddMedia('texture','Black8x8')
AddMedia('texture','BubbleTex')
AddMedia('texture','ChatEmojis')
AddMedia('texture','ChatLogos')
AddMedia('texture','ChestPlate')
AddMedia('texture','Close')
AddMedia('texture','Coins')
AddMedia('texture','Combat')
AddMedia('texture','Copy')
AddMedia('texture','Cross')
AddMedia('texture','DPS')
AddMedia('texture','ExitVehicle')
AddMedia('texture','FabricSilk')
AddMedia('texture','GoldCoins')
AddMedia('texture','GreenPotion')
AddMedia('texture','Healer')
AddMedia('texture','Help')
AddMedia('texture','Highlight')
AddMedia('texture','Invisible')
AddMedia('texture','LogoBottom')
AddMedia('texture','LogoBottomSmall')
AddMedia('texture','LogoTop')
AddMedia('texture','LogoTopSmall')
AddMedia('texture','MicroBar')
AddMedia('texture','Minus')
AddMedia('texture','MinusButton')
AddMedia('texture','Pause')
AddMedia('texture','PetBroom')
AddMedia('texture','PVPHorde')
AddMedia('texture','PVPAlliance')
AddMedia('texture','PhaseBorder')
AddMedia('texture','PhaseCenter')
AddMedia('texture','Planks')
AddMedia('texture','Play')
AddMedia('texture','Plus')
AddMedia('texture','PlusButton')
AddMedia('texture','Reset')
AddMedia('texture','Resize')
AddMedia('texture','Resize2')
AddMedia('texture','RoleIcons')
AddMedia('texture','Scroll')
AddMedia('texture','SkullIcon')
AddMedia('texture','Smooth')
AddMedia('texture','Spark')
AddMedia('texture','Tank')
AddMedia('texture','TukuiLogo')
AddMedia('texture','TargetReticle')
AddMedia('emoji','Angry')
AddMedia('emoji','Blush')
AddMedia('emoji','BrokenHeart')
AddMedia('emoji','CallMe')
AddMedia('emoji','Cry')
AddMedia('emoji','Facepalm')
AddMedia('emoji','Grin')
AddMedia('emoji','Heart')
AddMedia('emoji','HeartEyes')
AddMedia('emoji','Joy')
AddMedia('emoji','Kappa')
AddMedia('emoji','Meaw')
AddMedia('emoji','MiddleFinger')
AddMedia('emoji','Murloc')
AddMedia('emoji','OkHand')
AddMedia('emoji','OpenMouth')
AddMedia('emoji','Poop')
AddMedia('emoji','Rage')
AddMedia('emoji','SadKitty')
AddMedia('emoji','Scream')
AddMedia('emoji','ScreamCat')
AddMedia('emoji','SemiColon')
AddMedia('emoji','SlightFrown')
AddMedia('emoji','Smile')
AddMedia('emoji','Smirk')
AddMedia('emoji','Sob')
AddMedia('emoji','StuckOutTongue')
AddMedia('emoji','StuckOutTongueClosedEyes')
AddMedia('emoji','Sunglasses')
AddMedia('emoji','Thinking')
AddMedia('emoji','ThumbsUp')
AddMedia('emoji','Wink')
AddMedia('emoji','ZZZ')
AddMedia('logo','ElvBlue')
AddMedia('logo','ElvGreen')
AddMedia('logo','ElvOrange')
AddMedia('logo','ElvPink')
AddMedia('logo','ElvPurple')
AddMedia('logo','ElvYellow')
AddMedia('logo','ElvRed')
AddMedia('logo','ElvSimpy')
AddMedia('logo','Bathrobe')
AddMedia('logo','Rainbow')
AddMedia('logo','Hibiscus')
AddMedia('logo','Gem')
AddMedia('logo','Beer')
AddMedia('logo','PalmTree')
AddMedia('logo','TyroneBiggums')
AddMedia('logo','SuperBear')
E.Media.CombatIcons.COMBAT = E.Media.Textures.Combat
E.Media.Arrows.ArrowUp = E.Media.Textures.ArrowUp
do -- LSM Font Preloader ~Simpy
local preloader = CreateFrame('Frame')
preloader:SetPoint('TOP', UIParent, 'BOTTOM', 0, -500)
preloader:SetSize(100, 100)
local cacheFont = function(key, data)
local loadFont = preloader:CreateFontString()
loadFont:SetAllPoints()
if pcall(loadFont.SetFont, loadFont, data, 14) then
pcall(loadFont.SetText, loadFont, 'cache')
end
end
-- Preload ElvUI Invisible
cacheFont('Invisible', E.Media.Fonts.Invisible)
-- Lets load all the fonts in LSM to prevent fonts not being ready
local sharedFonts = LSM:HashTable('font')
for key, data in next, sharedFonts do
cacheFont(key, data)
end
-- this helps fix most of the issues with fonts or textures reverting to default because the addon providing them is loading after ElvUI
local callMedia = function(mediaType) E:UpdateMedia(mediaType) end
-- Now lets hook it so we can preload any other AddOns add to LSM
hooksecurefunc(LSM, 'Register', function(_, mediaType, key, data)
if not mediaType or type(mediaType) ~= 'string' then return end
local mtype = mediaType:lower()
if mtype == 'font' then
cacheFont(key, data)
callMedia(mtype)
elseif mtype == 'background' or mtype == 'statusbar' then
callMedia(mtype)
end
end)
end