Files
pfUI/skins/blizzard/mail.lua
T
Brues 1b71ee617f Wait on ContinueOnItemLoad for inbox, panel and loot history items
The inbox package border now waits for the item to load, since another
player's item may not be cached. The panel and loot history drop their
cached branch: ContinueOnItemLoad runs at once for a cached item. The
swing timer reads the off-hand inventory type from the slot instead of
parsing the item link.
2026-10-30 21:44:37 -05:00

189 lines
7.3 KiB
Lua

pfUI:RegisterSkin("Mailbox", function ()
local rawborder, border = GetBorderSize()
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
-- Compatibility
local StationeryBackgroundLeft, StationeryBackgroundRight
do -- SendMailFrame
local skin = CreateFrame("Frame")
skin:SetScript("OnEvent", function()
this:UnregisterEvent("MAIL_SHOW")
if not this._Mail then
StripTextures(SendMailPackageButton)
SkinButton(SendMailPackageButton, nil, nil, nil, nil, true)
hooksecurefunc("SendMailFrame_Update", function()
HandleIcon(SendMailPackageButton, SendMailPackageButton:GetNormalTexture())
local _, itemID = GetSendMailItemLink()
if itemID then
local quality = C_Item.GetItemQualityByID(itemID)
local r,g,b = GetItemQualityColor(quality)
SendMailPackageButton:SetBackdropBorderColor(r,g,b,1)
else
SendMailPackageButton:SetBackdropBorderColor(GetStringColor(pfUI_config.appearance.border.color))
end
end)
end
end)
skin:RegisterEvent("MAIL_SHOW")
HookAddonOrVariable("Mail", function()
skin._Mail = true
for i = 1, 21 do
local button = _G["MailAttachment"..i]
StripTextures(button)
SkinButton(button, nil, nil, nil, nil, true)
local orig = button.SetNormalTexture
button.SetNormalTexture = function(self, tex)
orig(self, tex)
if button.item then
HandleIcon(self, self:GetNormalTexture())
local quality = C_Item.GetItemQuality(ItemLocation:CreateFromBagAndSlot(button.item[1], button.item[2]))
local r,g,b = GetItemQualityColor(quality)
self:SetBackdropBorderColor(r,g,b,1)
else
self:SetBackdropBorderColor(GetStringColor(pfUI_config.appearance.border.color))
end
end
end
SkinButton(GetNoNameObject(InboxFrame, "Button", nil, "UI-Panel-Button-Up", OPENMAIL))
local button = GetNoNameObject(SendMailFrame, "Button", nil, "UI-Panel-Button-Up", SEND_LABEL) -- this is SendMailMailButton
SkinButton(button) -- hack! only it happened to do it
button:ClearAllPoints()
button:SetPoint("RIGHT", SendMailCancelButton, "LEFT", -2*bpad, 0)
end)
StationeryBackgroundLeft, StationeryBackgroundRight = _G.StationeryBackgroundLeft, _G.StationeryBackgroundRight
end
do -- OpenMailFrame
SkinButton(OpenMailPackageButton, nil, nil, nil, OpenMailPackageButtonIconTexture)
hooksecurefunc("InboxFrame_OnClick", function(index)
OpenMailPackageButton:SetBackdropBorderColor(GetStringColor(pfUI_config.appearance.border.color))
-- another player's item may not be cached yet
local _, itemID = GetInboxItemLink(index)
if not itemID then return end
local item = Item:CreateFromItemID(itemID)
item:ContinueOnItemLoad(function()
local quality = item:GetItemQuality()
if quality and InboxFrame.openMailID == index then
local r,g,b = GetItemQualityColor(quality)
OpenMailPackageButton:SetBackdropBorderColor(r,g,b,1)
end
end)
end)
end
StripTextures(MailFrame, true)
CreateBackdrop(MailFrame, nil, nil, .75)
CreateBackdropShadow(MailFrame)
MailFrame.backdrop:SetPoint("TOPLEFT", 12, -12)
MailFrame.backdrop:SetPoint("BOTTOMRIGHT", -30, 72)
MailFrame:SetHitRectInsets(12,30,12,72)
EnableMovable(MailFrame)
SkinCloseButton(InboxCloseButton, MailFrame.backdrop, -6, -6)
SkinTab(MailFrameTab1)
MailFrameTab1:ClearAllPoints()
MailFrameTab1:SetPoint("TOPLEFT", MailFrame.backdrop, "BOTTOMLEFT", bpad, -(border + (border == 1 and 1 or 2)))
SkinTab(MailFrameTab2)
MailFrameTab2:ClearAllPoints()
MailFrameTab2:SetPoint("LEFT", MailFrameTab1, "RIGHT", border*2 + 1, 0)
do -- InboxFrame
InboxTitleText:ClearAllPoints()
InboxTitleText:SetPoint("TOP", MailFrame.backdrop, "TOP", 0, -10)
CreateBackdrop(InboxFrame, nil, nil, .75)
InboxFrame.backdrop:SetPoint("TOPLEFT", _G["MailItem"..1], "TOPLEFT", 0, 1)
InboxFrame.backdrop:SetPoint("BOTTOMRIGHT", _G["MailItem"..INBOXITEMS_TO_DISPLAY], "BOTTOMRIGHT", 0, 0)
_G["MailItem"..1]:SetPoint("TOPLEFT", 28, -70)
for i = 1, INBOXITEMS_TO_DISPLAY do
StripTextures(_G["MailItem"..i])
StripTextures(_G["MailItem"..i.."Button"])
SkinButton(_G["MailItem"..i.."Button"], nil, nil, nil, _G["MailItem"..i.."ButtonIcon"])
end
InboxPrevPageButton:ClearAllPoints()
InboxPrevPageButton:SetPoint("TOPLEFT", InboxFrame.backdrop, "BOTTOMLEFT", 0, -10)
InboxNextPageButton:ClearAllPoints()
InboxNextPageButton:SetPoint("TOPRIGHT", InboxFrame.backdrop, "BOTTOMRIGHT", 0, -10)
SkinArrowButton(InboxPrevPageButton, "left", 16)
SkinArrowButton(InboxNextPageButton, "right", 16)
InboxPrevPageButton:GetRegions():SetPoint("LEFT", InboxPrevPageButton, "RIGHT", 5, 0)
InboxNextPageButton:GetRegions():SetPoint("RIGHT", InboxNextPageButton, "LEFT", -5, 0)
end
do -- SendMailFrame
SendMailTitleText:ClearAllPoints()
SendMailTitleText:SetPoint("TOP", MailFrame.backdrop, "TOP", 0, -10)
StripTextures(SendMailNameEditBox, nil, "BACKGROUND")
CreateBackdrop(SendMailNameEditBox, nil, true)
StripTextures(SendMailSubjectEditBox, nil, "BACKGROUND")
CreateBackdrop(SendMailSubjectEditBox, nil, true)
SkinButton(SendMailCancelButton)
SkinButton(SendMailMailButton)
SendMailMailButton:ClearAllPoints()
SendMailMailButton:SetPoint("RIGHT", SendMailCancelButton, "LEFT", -2*bpad, 0)
StripTextures(SendMailFrame)
StripTextures(SendMailScrollFrame)
CreateBackdrop(SendMailScrollFrame, nil, true)
SkinScrollbar(SendMailScrollFrameScrollBar)
SkinMoneyInputFrame(SendMailMoney)
StationeryBackgroundLeft:SetDrawLayer("BORDER")
StationeryBackgroundLeft:SetAllPoints()
StationeryBackgroundRight:Hide()
end
do -- OpenMailFrame
StripTextures(OpenMailFrame)
CreateBackdrop(OpenMailFrame, nil, nil, .75)
OpenMailFrame.backdrop:SetPoint("TOPLEFT", 10, -10)
OpenMailFrame.backdrop:SetPoint("BOTTOMRIGHT", -32, 72)
OpenMailFrame:SetHitRectInsets(10,32,10,72)
SkinCloseButton(OpenMailCloseButton, OpenMailFrame.backdrop, -6, -6)
OpenMailFrame:DisableDrawLayer("BACKGROUND")
OpenMailTitleText:ClearAllPoints()
OpenMailTitleText:SetPoint("TOP", OpenMailFrame.backdrop, "TOP", 0, -10)
SkinButton(OpenMailCancelButton)
SkinButton(OpenMailDeleteButton)
OpenMailDeleteButton:ClearAllPoints()
OpenMailDeleteButton:SetPoint("RIGHT", OpenMailCancelButton, "LEFT", -2*bpad, 0)
SkinButton(OpenMailReplyButton)
OpenMailReplyButton:ClearAllPoints()
OpenMailReplyButton:SetPoint("RIGHT", OpenMailDeleteButton, "LEFT", -2*bpad, 0)
SkinButton(OpenMailMoneyButton, nil, nil, nil, OpenMailMoneyButtonIconTexture)
SkinButton(OpenMailLetterButton, nil, nil, nil, OpenMailLetterButtonIconTexture)
StripTextures(OpenMailScrollFrame)
CreateBackdrop(OpenMailScrollFrame, nil, true)
SkinScrollbar(OpenMailScrollFrameScrollBar)
OpenStationeryBackgroundLeft:SetDrawLayer("BORDER")
OpenStationeryBackgroundLeft:SetTexCoord(.1,1,.1,.9)
OpenStationeryBackgroundLeft:SetAllPoints()
OpenStationeryBackgroundRight:Hide()
end
end)