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.
242 lines
7.3 KiB
242 lines
7.3 KiB
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 = ContainerIDToInventoryID or (C_Container and C_Container.ContainerIDToInventoryID)
|
|
local GetContainerNumFreeSlots = GetContainerNumFreeSlots or (C_Container and C_Container.GetContainerNumFreeSlots)
|
|
local GetContainerItemLink = GetContainerItemLink or (C_Container and C_Container.GetContainerItemLink)
|
|
local GetInventoryItemLink = GetInventoryItemLink or (C_Container and C_Container.GetInventoryItemLink)
|
|
local GetItemQualityColor = GetItemQualityColor
|
|
local GetInventoryItemID = GetInventoryItemID
|
|
local GetItemInfo = GetItemInfo
|
|
local CreateFrame = CreateFrame
|
|
|
|
local BANK_CONTAINER = BANK_CONTAINER
|
|
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]
|
|
local icon = _G['ContainerFrame'..i..'Item'..j..'IconTexture']
|
|
local questIcon = _G['ContainerFrame'..i..'Item'..j..'IconQuestTexture']
|
|
local cooldown = _G['ContainerFrame'..i..'Item'..j..'Cooldown']
|
|
|
|
item:SetNormalTexture(E.ClearTexture)
|
|
item:SetTemplate(nil, true)
|
|
item:StyleButton()
|
|
|
|
icon:SetInside()
|
|
icon:SetTexCoord(unpack(E.TexCoords))
|
|
|
|
questIcon:SetTexture(E.Media.Textures.BagQuestIcon)
|
|
questIcon.SetTexture = E.noop
|
|
questIcon:SetTexCoord(0, 1, 0, 1)
|
|
questIcon:SetInside()
|
|
|
|
E:RegisterCooldown(cooldown, 'bags')
|
|
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 frameName = frame:GetName()
|
|
local id = frame:GetID()
|
|
local _, bagType = GetContainerNumFreeSlots(id)
|
|
local item, questIcon, link
|
|
|
|
for i = 1, frame.size do
|
|
item = _G[frameName..'Item'..i]
|
|
questIcon = _G[frameName..'Item'..i..'IconQuestTexture']
|
|
link = GetContainerItemLink(id, item:GetID())
|
|
|
|
questIcon:Hide()
|
|
|
|
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
|
|
|
|
BankFrame.itemBackdrop = CreateFrame('Frame', 'BankFrameItemBackdrop', BankFrame)
|
|
BankFrame.itemBackdrop:SetTemplate()
|
|
BankFrame.itemBackdrop:SetFrameLevel(BankFrame:GetFrameLevel())
|
|
|
|
BankFrame.bagBackdrop = CreateFrame('Frame', 'BankFrameBagBackdrop', BankFrame)
|
|
BankFrame.bagBackdrop:SetTemplate()
|
|
BankFrame.bagBackdrop:SetFrameLevel(BankFrame:GetFrameLevel())
|
|
|
|
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 = GetItemInfo(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')
|
|
|