local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB local LSM = E.Libs.LSM E.Media = { Fonts = {}, Sounds = {}, ChatEmojis = {}, ChatLogos = {}, Textures = {} } local format, ipairs, type, pcall = format, ipairs, type, pcall local westAndRU = LSM.LOCALE_BIT_ruRU + LSM.LOCALE_BIT_western do local t, d = '|T%s%s|t', '' function E:TextureString(texture, data) return format(t, texture, data or d) end end local MediaKey = { font = 'Fonts', sound = 'Sounds', emoji = 'ChatEmojis', logo = 'ChatLogos', texture = 'Textures' } local MediaPath = { font = [[Interface\AddOns\ElvUI\Media\Fonts\]], sound = [[Interface\AddOns\ElvUI\Media\Sounds\]], emoji = [[Interface\AddOns\ElvUI\Media\ChatEmojis\]], logo = [[Interface\AddOns\ElvUI\Media\ChatLogos\]], texture = [[Interface\AddOns\ElvUI\Media\Textures\]] } 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('sound','HelloKitty.ogg') AddMedia('sound','HarlemShake.ogg') AddMedia('texture','GlowTex', 'ElvUI GlowBorder', 'border') AddMedia('texture','NormTex', 'ElvUI Gloss', 'statusbar') AddMedia('texture','NormTex2', 'ElvUI Norm', 'statusbar') AddMedia('texture','White8x8', 'ElvUI Blank', {'statusbar','background'}) AddMedia('texture','Minimalist', true, 'statusbar') AddMedia('texture','Melli', true, 'statusbar') AddMedia('texture','Arrow') AddMedia('texture','ArrowRight') AddMedia('texture','ArrowUp') AddMedia('texture','Arrow1') AddMedia('texture','Arrow2') AddMedia('texture','BagNewItemGlow') AddMedia('texture','BagQuestIcon') AddMedia('texture','BagUpgradeIcon') AddMedia('texture','Black8x8') AddMedia('texture','BubbleTex') AddMedia('texture','ChatEmojis') AddMedia('texture','ChatLogos') AddMedia('texture','Close') AddMedia('texture','Combat') AddMedia('texture','Copy') AddMedia('texture','Cross') AddMedia('texture','DPS') AddMedia('texture','ExitVehicle') AddMedia('texture','Healer') AddMedia('texture','HelloKitty') AddMedia('texture','HelloKittyChat') AddMedia('texture','Help') AddMedia('texture','Highlight') AddMedia('texture','LeaderHQ') AddMedia('texture','LogoTop') AddMedia('texture','LogoTopSmall') AddMedia('texture','LogoBottom') AddMedia('texture','LogoBottomSmall') AddMedia('texture','Mail') AddMedia('texture','Minus') AddMedia('texture','MinusButton') AddMedia('texture','Pause') AddMedia('texture','PhaseBorder') AddMedia('texture','PhaseCenter') AddMedia('texture','Play') AddMedia('texture','Plus') AddMedia('texture','PlusButton') AddMedia('texture','Reset') AddMedia('texture','Resting') AddMedia('texture','Resting1') AddMedia('texture','RolesHQ') AddMedia('texture','RoleIcons') AddMedia('texture','SkullIcon') AddMedia('texture','Smooth') AddMedia('texture','Spark') AddMedia('texture','Tank') AddMedia('texture','TukuiLogo') 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','ElvRainbow') AddMedia('logo','ElvSimpy') AddMedia('logo','ElvBlue') AddMedia('logo','ElvGreen') AddMedia('logo','ElvOrange') AddMedia('logo','ElvPink') AddMedia('logo','ElvPurple') AddMedia('logo','ElvYellow') AddMedia('logo','ElvRed') AddMedia('logo','Bathrobe') AddMedia('logo','HelloKitty') AddMedia('logo','Illuminati') AddMedia('logo','MrHankey') AddMedia('logo','Rainbow') AddMedia('logo','TyroneBiggums') AddMedia('logo','Burger') AddMedia('logo','Clover') AddMedia('logo','Cupcake') AddMedia('logo','Hibiscus') AddMedia('logo','Lion') AddMedia('logo','Skull') AddMedia('logo','Unicorn') AddMedia('logo','FoxDeathKnight') AddMedia('logo','FoxDemonHunter') AddMedia('logo','FoxDruid') AddMedia('logo','FoxHunter') AddMedia('logo','FoxMage') AddMedia('logo','FoxMonk') AddMedia('logo','FoxPaladin') AddMedia('logo','FoxPriest') AddMedia('logo','FoxRogue') AddMedia('logo','FoxShaman') AddMedia('logo','FoxWarlock') AddMedia('logo','FoxWarrior') AddMedia('logo','DeathlyHallows') AddMedia('logo','GoldShield') AddMedia('logo','Gem') 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 -- 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 if mediatype:lower() == 'font' then cacheFont(key, data) end end) end