local E, L, V, P, G = unpack(ElvUI) local S = E:GetModule('Skins') local B = E:GetModule('Bags') local _G = _G local select, unpack = select, unpack local hooksecurefunc = hooksecurefunc local ContainerIDToInventoryID = C_Container.ContainerIDToInventoryID or ContainerIDToInventoryID local GetContainerNumFreeSlots = C_Container.GetContainerNumFreeSlots or GetContainerNumFreeSlots local GetContainerItemLink = C_Container.GetContainerItemLink or GetContainerItemLink local GetInventoryItemLink = C_Container.GetInventoryItemLink or GetInventoryItemLink local GetItemQualityColor = C_Item.GetItemQualityColor or GetItemQualityColor local GetItemInfo = C_Item.GetItemInfo or GetItemInfo local GetItemQualityByID = C_Item.GetItemQualityByID local GetInventoryItemID = GetInventoryItemID local BANK_CONTAINER = Enum.BagIndex.Bank local LE_ITEM_CLASS_QUESTITEM = LE_ITEM_CLASS_QUESTITEM local bagIconCache = { [-2] = [[Interface\ICONS\INV_Misc_Key_03]], [0] = E.Media.Textures.Backpack } local function setBagIcon(frame, texture) if not frame.BagIcon then local portraitButton = _G[frame:GetName()..'PortraitButton'] portraitButton:CreateBackdrop() portraitButton:Size(32) portraitButton:Point('TOPLEFT', 12, -7) portraitButton:StyleButton(nil, true) portraitButton.hover:SetAllPoints() frame.BagIcon = portraitButton:CreateTexture() frame.BagIcon:SetTexCoord(unpack(E.TexCoords)) frame.BagIcon:SetAllPoints() end frame.BagIcon:SetTexture(texture) end function S:ContainerFrame() if E.private.bags.enable or not (E.private.skins.blizzard.enable and E.private.skins.blizzard.bags) then return end -- ContainerFrame for i = 1, _G.NUM_CONTAINER_FRAMES do local frame = _G['ContainerFrame'..i] local closeButton = _G['ContainerFrame'..i..'CloseButton'] frame:StripTextures(true) S:HandleFrame(frame, true, nil, 9, -4, -4, 2) S:HandleCloseButton(closeButton, frame.backdrop) for j = 1, _G.MAX_CONTAINER_ITEMS do local item = _G['ContainerFrame'..i..'Item'..j] item:SetNormalTexture(E.ClearTexture) item:SetTemplate(nil, true) item:StyleButton() local icon = _G['ContainerFrame'..i..'Item'..j..'IconTexture'] if icon then icon:SetInside() icon:SetTexCoord(unpack(E.TexCoords)) end local questIcon = _G['ContainerFrame'..i..'Item'..j..'IconQuestTexture'] if questIcon then questIcon:SetTexture(E.Media.Textures.BagQuestIcon) questIcon.SetTexture = E.noop questIcon:SetTexCoord(0, 1, 0, 1) questIcon:SetInside() end local cooldown = _G['ContainerFrame'..i..'Item'..j..'Cooldown'] if cooldown then E:RegisterCooldown(cooldown, 'bags') end end end hooksecurefunc('ContainerFrame_GenerateFrame', function(frame) local id = frame:GetID() if id > 0 then local itemID = GetInventoryItemID('player', ContainerIDToInventoryID(id)) if not bagIconCache[itemID] then bagIconCache[itemID] = select(10, GetItemInfo(itemID)) end setBagIcon(frame, bagIconCache[itemID]) else setBagIcon(frame, bagIconCache[id]) end end) hooksecurefunc('ContainerFrame_Update', function(frame) local id = frame:GetID() local frameName = frame:GetName() local _, bagType = GetContainerNumFreeSlots(id) for i = 1, frame.size do local item = _G[frameName..'Item'..i] local link = GetContainerItemLink(id, item:GetID()) local questIcon = _G[frameName..'Item'..i..'IconQuestTexture'] if questIcon then questIcon:Hide() end local profession = B.ProfessionColors[bagType] if profession then item:SetBackdropBorderColor(profession.r, profession.g, profession.b, profession.a) item.ignoreBorderColors = true elseif link then local _, _, quality, _, _, _, _, _, _, _, _, itemClassID = GetItemInfo(link) if itemClassID == LE_ITEM_CLASS_QUESTITEM then item:SetBackdropBorderColor(unpack(B.QuestColors.questItem)) item.ignoreBorderColors = true if questIcon then questIcon:Show() end elseif quality and quality > 1 then local r, g, b = GetItemQualityColor(quality) item:SetBackdropBorderColor(r, g, b) item.ignoreBorderColors = true else item:SetBackdropBorderColor(unpack(E.media.bordercolor)) item.ignoreBorderColors = nil end else item:SetBackdropBorderColor(unpack(E.media.bordercolor)) item.ignoreBorderColors = nil end end end) -- BankFrame local BankFrame = _G.BankFrame BankFrame:StripTextures(true) S:HandleFrame(BankFrame, true, nil, 12, 0, 10, 80) S:HandleCloseButton(_G.BankCloseButton, BankFrame.backdrop) _G.BankSlotsFrame:StripTextures() _G.BankFrameMoneyFrame:Point('RIGHT', 0, 0) for i = 1, _G.NUM_BANKGENERIC_SLOTS do local button = _G['BankFrameItem'..i] local icon = _G['BankFrameItem'..i..'IconTexture'] local cooldown = _G['BankFrameItem'..i..'Cooldown'] button:SetNormalTexture(E.ClearTexture) button:SetTemplate(nil, true) button:StyleButton() button.IconBorder:StripTextures() button.IconOverlay:StripTextures() icon:SetInside() icon:SetTexCoord(unpack(E.TexCoords)) button.IconQuestTexture:SetTexture(E.Media.Textures.BagQuestIcon) button.IconQuestTexture.SetTexture = E.noop button.IconQuestTexture:SetTexCoord(0, 1, 0, 1) button.IconQuestTexture:SetInside() E:RegisterCooldown(cooldown, 'bags') end S:HandleButton(_G.BankFramePurchaseButton) hooksecurefunc('BankFrameItemButton_Update', function(button) local id = button:GetID() if button.isBag then button:SetNormalTexture(E.ClearTexture) button:SetTemplate(nil, true) button:StyleButton() button.icon:SetInside() button.icon:SetTexCoord(unpack(E.TexCoords)) button.HighlightFrame.HighlightTexture:SetInside() button.HighlightFrame.HighlightTexture:SetTexture(unpack(E.media.rgbvaluecolor), 0.3) local link = GetInventoryItemLink('player', ContainerIDToInventoryID(id)) if link then local quality = GetItemQualityByID(link) if quality and quality > 1 then local r, g, b = GetItemQualityColor(quality) button:SetBackdropBorderColor(r, g, b) button.ignoreBorderColors = true else button:SetBackdropBorderColor(unpack(E.media.bordercolor)) button.ignoreBorderColors = nil end else button:SetBackdropBorderColor(unpack(E.media.bordercolor)) button.ignoreBorderColors = nil end else local questIcon = button.IconQuestTexture if questIcon then questIcon:Hide() end local link = GetContainerItemLink(BANK_CONTAINER, id) if link then local _, _, quality, _, _, _, _, _, _, _, _, itemClassID = GetItemInfo(link) if itemClassID == LE_ITEM_CLASS_QUESTITEM then button:SetBackdropBorderColor(unpack(B.QuestColors.questItem)) button.ignoreBorderColors = true if questIcon then questIcon:Show() end elseif quality and quality > 1 then local r, g, b = GetItemQualityColor(quality) button:SetBackdropBorderColor(r, g, b) button.ignoreBorderColors = true else button:SetBackdropBorderColor(unpack(E.media.bordercolor)) button.ignoreBorderColors = nil end else button:SetBackdropBorderColor(unpack(E.media.bordercolor)) button.ignoreBorderColors = nil end end end) end S:AddCallback('ContainerFrame')